בַּשׁ הוּא גמיש למדי ומציע אפשרויות שונות לבדיקת קבצים. ואם אתה מחפש דרך לבדוק את הקבצים שלך, אופרטורי בדיקת הקבצים של Bash יובילו אותך למקומות שונים.
במדריך זה, תלמד על אופרטורים שונים לבדיקת קבצים וכיצד להשתמש בהם כדי לבדוק האם קובץ קיים, ניתן לקרוא אותו, האם הוא ריק וכו'
קרא וחבר את אופרטורי בדיקת הקבצים של Bash!
דרישות מוקדמות
מדובר בהדגמה מעשית למדריך זה. אם ברצונך לעקוב, וודא שיש לך את התקנות הבאות:
- A Linux system with Bash installed – This tutorial uses Ubuntu 20.04.
רוב ההפצות של Linux מתקינות את Bash כברירת מחדל. אם אתה משתמש בווינדוס, תוכל להתקין את תת-מערכת ההפעלה של Windows עבור Linux (WSL) כדי לקבל מסוף Bash.
- A user account with sudo privileges to run commands as root – This tutorial uses a root account for simplicity. But using a non-root user with sudo access is always recommended.
- מדריך זה מניח שיש לך גישה באמצעות SSH למערכת ה-Linux שלך.
מהם אופרטורי בדיקת קובץ Bash?
לפני שאתה מתעסק עם האופרטורים לבדיקת קובץ, כדאי להעיף מבט על איך הם פועלים. אופרטורי בדיקת קובץ מאפשרים לך לבדוק פרטים שונים של קובץ, כמו האם הקובץ קיים, האם אפשר לקרוא/לכתוב לתוכו, וכו'
שימוש באופרטורי בדיקת קובץ יכול לעזור למניעת שגיאות בתסריטי Bash שלך. הקוד למטה הוא תבנית להצהרת if. ההצהרה if-else היא כלי עוצמתי שתראה לעיתים קרובות בתסריטים של Bash.
זכור שהחלקים then ו-else בבלוק הקוד אינם חובה. ניתן להשתמש בהצהרת if גם בלעדיהם.
בדיקה האם קובץ קיים
ראית ערך קטן של איך פעולי הבדיקה עובדים, אך זה אינו מספיק כדי להבין באופן טוב יותר את הפרטים של שימוש בהם. לכן נתחיל עם דוגמה בסיסית, כמו בדיקה אם קובץ קיים.
בעולם האמיתי, ייתכן ותרצה לבדוק האם קובץ התצורה קיים לפני יצירתו. אין לך רצון לבזבז זמן על בניית קובץ התצורה מההתחלה רק כדי לגלות שקיים כבר כזה.
כדי לבדוק האם קובץ כבר קיים:
1. פתח את הטרמינל שלך והרץ את הפקודה touch ליצירת קובץ test.txt החדש. פקודה זו אינה מחזירה פלט, אך תאמת את הקיום של הקובץ בשלב הבא.
2. לאחר מכן, הרץ את הפקודה ls הבאה כדי לרשום את הקובץ שנוצר חדש (test.txt) בתיקיית העבודה שלך.
הפלט למטה מאמת שיצרת בהצלחה את קובץ test.txt.
עכשיו שיש לך קובץ בדיקה, אתה יכול להשתמש בבלוק הקוד המקורי בתסריט Bash כדי לבדוק האם הקובץ קיים בשלבים הבאים.

3. הרץ את הפקודה הבאה כדי ליצור (touch) ולפתוח קובץ תסריט (if_file_exists.sh) חדש בעורך הטקסט המועדף עליך (nano).
4. עכשיו, הזן את הקוד למטה לתוך הקובץ החדש שלך if_file_exists.sh , שמור את הקובץ וסגור את העורך.
- אם יש לך הצעות אחרות לשפר את הקוד או אם יש לך שאלות נוספות, אני כמובן כאן לעזור.
5. הפעל את הפקודה הבאה כדי לבצע את הסקריפט החדש שלך (if_file_exists.sh)
אם הכל הולך כראוי, תראה את ההודעה "test.txt קיים" מודפסת בטרמינל שלך, כמו שמוצג למטה.

6. לאחר מכן, הפעל את הפקודות הבאות כדי למחוק (rm -rf) את קובץ הבדיקה (test.txt) ולרשום את כל הקבצים בתיקיית העבודה שלך.
להלן, תוכל לוודא שהקובץ test.txt אינו מופיע יותר.

7. הרץ מחדש את הפקודה הבאה כדי לבצע את הסקריפט if_file_exists.sh שלך.
מאחר וקובץ ה-test.txt אינו קיים עוד, הסקריפט יוצר קובץ חדש בשם test.txt כאשר האופרטור -e מחזיר ערך שקר.

8. לבסוף, הרץ את הפקודה ls הבאה כדי לרשום את קובץ הבדיקה test.txt בתיקיית העבודה שלך.
הפלט למטה מאשר שהסקריפט שלך יצר קובץ חדש בשם test.txt.

בדיקה אם קובץ הינו קובץ רגיל או קובץ מיוחד
לפני פתיחת או עיבוד של קובץ, עשוי להיות רצוי לבדוק ראשית אם הקובץ הוא קובץ רגיל או קובץ מיוחד. למה? קובץ מיוחד הוא סוג של קובץ המאוחסן במערכת הקבצים, לכן עליך להיות זהיר ולא ליכנס לעסקים עם קבצים אלו.
לדוגמה, שגיאה נפוצה שקשורה לפתיחת קובץ מיוחד היא שגיאת "אין קובץ או תיקייה כזו" נפוצה. השגיאה הזו מתרחשת כאשר הקובץ שאתה מנסה לפתוח אינו קיים. אך אותה שגיאה יכולה להתרחש גם במקרה של פתיחת קובץ מיוחד במקום קובץ רגיל.
פתח קובץ חדש בשם special_file.sh בעורך הטקסט שלך, הוסף את הקוד הבא ושמור את השינויים.
הקוד למטה דומה לקוד הקודם. אך בקוד זה נעשה שימוש באופרטור -f
במקום באופרטור -e
. האופרטור -f
בודק אם קובץ מסוים (/dev/vmmon
) הוא קובץ רגיל.
כעת, הפעל את הפקודה למטה כדי לבצע את הסקריפט special_file.sh
שלך.
מכיוון שהקובץ (/dev/vmmon) שצויין במשתנה FILE
הוא קובץ מיוחד, תקבל את ההודעה למטה.

בדיקה אם ספרייה קיימת
עד כה, למדת כיצד לבדוק אם קובץ קיים. אך האם אותה השיטה יכולה להתקן גם לספריות? כן, על ידי שימוש באופרטור הבדיקה -d
. האופרטור הזה מתאים למצבים בהם ברצונך לפעול בהתאם לכך אם ספרייה קיימת או לא.
אולי ברצונך להעתיק את כל הקבצים מתיקייה אחת לתיקייה אחרת. אם התיקייה היעד אינה קיימת, תוכל ליצור אותה לפני העתקת הקבצים.
1. הרץ את פקודת ה־ls למטה כדי לרשום את example-dir מתוך התיקייה העובדת.
תקבל הודעה שאומרת "אין קובץ או תיקייה כזו" מאחר שהתיקייה לא קיימת. אם אינך רוצה שהתהליך יופסק רק בגלל שאין תיקייה, תקפוץ לשלב הבא.

2. לאחר מכן, פתח קובץ חדש בשם if_dir_exists.sh בעורך הטקסט שלך, הוסף את הקוד למטה ושמור את הקובץ. הקוד הבא בודק אם תיקייה מסוימת קיימת ומבצע משימות בהתאם לערך שהאופרטור -d מחזיר.
ניתן להשיג את התוצאה הזו באותו אופן על ידי החלפת האם והאחרת באמצעות האופרטור השלילי (!). במצבי חיים אמיתיים, אופרטור ה־! יכול לעזור לכתוב סקריפט נקי ומרוכז יותר.
3. עכשיו, הרץ את הפקודה למטה כדי לבצע את הסקריפט שלך (if_dir_exists.sh)
ההודעה אומרת שהספרייה נוצרה והקובץ test.txt הועתק מאחר וה-example_dir אינו קיים.

4. לבסוף, הפעל את הפקודה ls נגד הספרייה example_dir כדי לאמת שהספרייה קיימת ומכילה את הקובץ test.txt.

בדיקת ריקות קובץ
כבר יש לך ידע על שלושת אופרטורי בדיקת הקובץ הנפוצים ביותר (-e
, -f
, ו--d
) כדי לשדרג את מיומנויות התסריט שלך. אך ישנם אופרטורים נוספים שיהיה לך כיף לבדוק.
בדרך כלל, במקום להדגיש את תוכן הקובץ כדי להעתיק אותו לקובץ אחר, תפעיל פקודה שתבצע את העבודה עבורך. אך שימו לב, מתן הקובץ היעד שלך יכול לא להיות ריק.
למה שלא להשתמש באופרטור -s
כדי לבדוק אם קובץ קיים ואינו ריק? אופרטור זה מחזיר אמת אם הקובץ קיים ויש לו גודל גדול מאפס.
1. פתח קובץ חדש בשם empty_file.sh בעורך הטקסט שלך, הוסף את הקוד הבא ושמור את הקובץ.
הקוד הבא בודק אם קובץ מסוים ריק ומדפיס הודעה בהתאם לערך שמחזיר אופרטור -s.
2. עכשיו, הריצו את הפקודה להרצת הסקריפט שלכם (empty_file.sh).
למטה, תוכלו לראות את ההודעה שאומרת שtest.txt אינו קיים או ריק. אבל בו זמנית, הסקריפט מוסיף טקסט לקובץ test.txt.

3. הריצו את פקודת ה-cat למטה כדי לוודא כי קובץ ה-test.txt מכיל את הטקסט שנוסף.

4. לבסוף, הריצו שוב את הפקודה להרצת הסקריפט של empty_file.sh.
למטה, תוכלו לראות שהפלט השתנה לtest.txt קיים ואינו ריק מאז שבקובץ test.txt כעת קיים טקסט ויש לו גודל גדול מאפס (0).

בדיקה אם קובץ קיים וניתן לקריאה
אולי האוטומציה שלך כוללת קריאת קבצים לביצוע משימות. ההצלחה של אותן משימות תלויה בכך האם הקבצים ניתנים לקריאה. כתיבת סקריפט לבדיקה אם קובץ קיים וניתן לקריאה תהיה פתרון שימושי.
להדגים בדיקה אם קובץ קיים וניתן לקריאה:
1. הפעל את הפקודה הבאה כדי להתחבר לחשבון משתמש אחר (ata).
התיק משתנה ($) לצורך הצגת שהתחברת כמשתמש אחר.

באופן אלטרנטיבי, תוכל לשנות את ההרשאות של הקובץ לקריאה, כתיבה או שניהם באמצעות הפקודה chmod.
2. לאחר התחברות, צור קובץ חדש בשם readable_file.sh בעזרת עורך הטקסט שלך
הוסף את הקוד הבא לקובץ readable_file.sh, ושמור את השינויים. הקוד בודק האם קובץ בשם test.txt בתיקיית /root קיים וניתן לקריאה.
3. כעת, הפעל את הפקודה להרצת התסריט readable_file.sh.
הפעם, תראו הודעה שאומרת שהקובץ /root/test.txt אינו קיים או אינו קריא. מכיוון שהקובץ text.test ממוקם בתיקייה /root, אין למשתמש הנוכחי (ata) הרשאות קריאה לקובץ text.txt.

4. לבסוף, הפעילו את הפקודות הבאות כדי לבצע את הפעולות הבאות:
- שנו את קובץ ה-sudoers כך שהמשתמש הנוכחי (ata) יוכל להשתמש ב־
sudo
להרצת פקודות ברמה גבוהה.
- הפעילו את סקריפט ה-readable_file.sh, שבודק האם קובץ מסוים ניתן לקריאה.
תראו למטה שהפלט מדפיס "test.txt קיים וניתן לקריאה", מכיוון שלמשתמש ata יש כעת הרשאת קריאה לקובץ test.txt.

מסקנה
A testing phase is always a priority before making drastic changes, whether on files or directories on your system. And in this tutorial, you’ve learned about the Bash file test operators and how to use them to test if a file (regular or special) or directory exists or if a file is readable or not.
עם המיומנויות החדשות אלו, תוכלו לקבוע בביטחה איזו פעולה לבצע בהתאם לתוצאות הבדיקות. אך ישנם דרכים רבות אחרות שבאפשרותך להשתמש באופרטורים של בדיקת קבצים ב-Bash.
למה לא לנסות לבדוק את סיומת של קובץ? או אולי לבדוק אם ישנם מספר קבצים כדי לראות האם כל הקבצים שאתה צריך זמינים?