שיעור 9 of 22
בתהליך

שימוש בתיקייות והצגת קבצים

הקדמה

תעודה: Linux Essentials

גרסה: 1.6

נושא: 2 – מציאת דרכך במערכת לינוקס

מטרה: 2.3 – שימוש בתיקיות ורשימת קבצים

שיעור: 1 מתוך 2

קבצים ותיקיות

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

    $ tree
    Documents
    ├── Mission-Statement.txt
    └── Reports
        └── report2018.txt
    1 directory, 2 files
    

בדוגמה זו, Documents היא תיקיה המכילה קובץ אחד (Mission-Statement.txt) ותיקיית משנה אחת (Reports). תיקיית Reports מכילה בתורה קובץ אחד בשם report2018.txt. ניתן לומר שתיקיית Documents היא התיקייה הראשית של תיקיית Reports.

טיפ:

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

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

שמות קבצים ותיקיות בלינוקס יכולים להכיל אותיות קטנות וגדולות, מספרים, רווחים ותווים מיוחדים. עם זאת, מכיוון שלתווים מיוחדים רבים יש משמעות מיוחדת ב-shell של לינוקס, כדאי להימנע משימוש ברווחים או תווים מיוחדים כאשר נותנים שמות לקבצים או לתיקיות. לדוגמה, רווחים דורשים תו התחמקות \ כדי להזינם בצורה נכונה:

    $ cd Mission\ Statements
    

בנוסף, התייחס לשם הקובץ report2018.txt. שמות קבצים יכולים להכיל סיומת שמגיעה לאחר הנקודה (.). שלא כמו ב-Windows, לסיומת אין משמעות מיוחדת בלינוקס; היא שם להבנת האדם. בדוגמה שלנו, .txt מסמן לנו שזהו קובץ טקסט רגיל, למרות שהוא יכול להכיל מבחינה טכנית כל סוג של נתונים.

ניווט במערכת הקבצים

זיהוי מיקום נוכחי:

מכיוון ש-shell של לינוקס כמו Bash מבוססים על טקסט, חשוב לזכור את המיקום הנוכחי שלך בעת ניווט במערכת הקבצים. שורת הפקודה מספקת את המידע הזה:

    user@hostname ~/Documents/Reports $
    

שימו לב שמידע כמו שם המשתמש ו- hostname יכוסה בחלקים הבאים. משורת הפקודה, אנחנו יודעים שהמיקום הנוכחי שלנו הוא בתיקיית Reports. בצורה דומה, הפקודה pwd תדפיס את ספריית העבודה הנוכחית:

    user@hostname ~/Documents/Reports $ pwd
    /home/user/Documents/Reports
    

הקשר בין תיקיות מיוצג באמצעות קו נטוי קדימה (/). אנחנו יודעים ש-Reports היא תיקיית משנה של Documents, שהיא תיקיית משנה של user, שנמצאת בתוך תיקיה שנקראת home. נראה ש-home אין תיקיית אם, אך זה לא נכון כלל. ההורה של home נקרא root, ומיוצג על ידי הקו הנטוי הראשון (/). נדון בספריית root בחלקים הבאים.

שימו לב שהפלט של הפקודה pwd שונה מעט מנתיב הנתון בשורת הפקודה. במקום /home/user, שורת הפקודה מכילה את הסמל (~). הסמל הזה הוא תו מיוחד שמייצג את ספריית הבית של המשתמש. נעסוק בזה בהרחבה בשיעור הבא.

רשימת תוכן התיקייה

תוכן התיקייה הנוכחית נרשם באמצעות פקודת ls:

    user@hostname ~/Documents/Reports $ ls
    report2018.txt
    

שימו לב ש-ls לא מספק מידע על ספריית ההורה. בנוסף, כברירת מחדל ls לא מציג מידע על תוכן תיקיות המשנה. ls יכול “לראות” רק את מה שנמצא בתיקייה הנוכחית.

שינוי ספריה נוכחית

הניווט בלינוקס נעשה בעיקר באמצעות הפקודה cd. פקודה זו משנה את הספרייה הנוכחית. באמצעות הפקודה pwd שהוצגה קודם, אנו יודעים שהספרייה הנוכחית שלנו היא /home/user/Documents/Reports. ניתן לשנות את הספרייה הנוכחית על ידי הזנת נתיב חדש:

    user@hostname ~ $ cd /home/user/Documents
    user@hostname ~/Documents $ pwd
    /home/user/Documents
    user@hostname ~/Documents $ ls
    Mission-Statement.txt Reports
    

מהמיקום החדש שלנו, אנו יכולים “לראות” את Mission-Statement.txt ואת ספריית המשנה שלנו Reports, אך לא את התוכן של ספריית המשנה. אנו יכולים לנווט בחזרה לתוך Reports כך:

    user@hostname ~/Documents $ cd Reports
    user@hostname ~/Documents/Reports $ pwd
    /home/user/Documents/Reports
    user@hostname ~/Documents/Reports $ ls
    report2018.txt
    

כעת חזרנו למקום שבו התחלנו.

נתיבים מוחלטים ויחסיים

הפקודה pwd תמיד מציגה נתיב מוחלט. נתיב מוחלט מכיל כל שלב בדרך מהקצה העליון של מערכת הקבצים (/) עד לתיקייה הסופית (Reports). נתיבים מוחלטים תמיד מתחילים בקו נטוי קדימה (/).

    /
    └── home
        └── user
            └── Documents
                └── Reports
    

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

הדוגמה השנייה (cd Reports) הייתה הרבה יותר קלה להקלדה. זהו דוגמה לנתיב יחסי. נתיבים יחסיים קצרים יותר אך יש להם משמעות רק ביחס למיקום הנוכחי שלך. שקול את ההשוואה הבאה: אני מבקר אצלך בבית. אתה אומר לי שהחבר שלך גר ליד. אני אבין את המיקום מכיוון שהוא יחסי למיקומי הנוכחי. אבל אם תאמר לי את זה בטלפון, אני לא אוכל למצוא את בית החבר שלך. תצטרך לתת לי את הכתובת המלאה.

נתיבים יחסיים מיוחדים

ה-shell של לינוקס מספק לנו דרכים לקצר את הנתיבים כאשר אנו מנווטים. כדי לחשוף את הנתיבים המיוחדים הראשונים, נשתמש בפקודת ls עם הדגל -a. דגל זה משנה את פקודת ls כך שכל הקבצים והתיקיות יופיעו, כולל קבצים ותיקיות מוסתרים:

    user@hostname ~/Documents/Reports $ ls -a
    .
    ..
    report2018.txt
    

הערה: תוכל לעיין בעמוד המדריך (man page) עבור ls כדי להבין מה עושה הדגל -a.

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

  • . מציין את המיקום הנוכחי (במקרה זה, Reports).
  • .. מציין את תיקיית ההורה (במקרה זה, Documents).

בדרך כלל אין צורך להשתמש בנתיב היחסי המיוחד עבור המיקום הנוכחי. קל יותר ומובן יותר להקליד report2018.txt מאשר ./report2018.txt. אבל לשימוש ב-. יש יתרונות שתלמד בהמשך. כרגע, נתמקד בנתיב היחסי עבור תיקיית ההורה:

    user@hostname ~/Documents/Reports $ cd ..
    user@hostname ~/Documents $ pwd
    /home/user/Documents
    

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

    user@hostname ~/Documents $ cd ../..
    $ pwd
    /home
    

תרגילים מונחים

  1. עבור כל אחד מהנתיבים הבאים, ציין האם הוא נתיב מוחלט או יחסי:
    • /home/user/Downloads
    • ../Reports
    • /var
    • docs
    • /
  2. התבונן במבנה הקבצים הבא. שים לב: ספריות מסתיימות בקו נטוי (/) כאשר הפקודה tree מופעלת עם האפשרות -F. תזדקק להרשאות מנהל מערכת כדי להפעיל את פקודת tree על הספרייה root (/)‏. הבא הוא פלט דוגמה ואינו מעיד על מבנה ספרייה מלא. השתמש בו כדי לענות על השאלות הבאות:
    $ sudo tree -F /
    /
    ├── etc/
    │   ├── network/
    │   │   └── interfaces
    │   ├── systemd/
    │   │   ├── resolved.conf
    │   │   ├── system/
    │   │   ├── system.conf
    │   │   ├── user/
    │   │   └── user.conf
    │   └── udev/
    │   ├── rules.d/
    │   └── udev.conf
    └── home/
      ├── lost+found/
      └── user/
      └── Documents/
    12 directories, 5 files
                

    משתמש הזין את הפקודות הבאות:

    $ cd /etc/udev
    $ ls -a
                

    מה יהיה הפלט של הפקודה ls -a?

  3. הזן את הפקודה הקצרה ביותר עבור כל אחת מהבאות:
    • המיקום הנוכחי שלך הוא root (/). הזן את הפקודה כדי לנווט לתיקיית lost+found בתיקיית home (דוגמה):
      $ cd home/lost+found
                          
    • המיקום הנוכחי שלך הוא root (/). הזן את הפקודה כדי לנווט לתיקייה בשם /etc/network/.
    • המיקום הנוכחי שלך הוא /home/user/Documents/. נווט לתיקייה בשם /etc/.
    • המיקום הנוכחי שלך הוא /etc/systemd/system/. נווט לתיקייה בשם /home/user/.
  4. השתמש בפקודות הבאות:
    $ pwd
    /etc/udev/rules.d
    $ cd ../../systemd/user
    $ cd ..
    $ pwd
                

    מהו הפלט של הפקודה pwd האחרונה?

תרגילי חקירה

  1. נניח שמשתמש הזין את הפקודות הבאות:
    $ mkdir "this is a test"
    $ ls
    this is a test
                

    איזו פקודת cd תאפשר לך להיכנס לתיקייה זו?

  2. נסה זאת שוב, אך לאחר הקלדת cd this, לחץ על מקש ה-TAB. מה מוצג כעת בשורת הפקודה?
  3. נסה ליצור ספרייה ששמה מכיל תו \. הצג את שם הספרייה באמצעות ls ומחק את הספרייה.

סיכום

בשיעור זה למדת:

  • יסודות מערכת הקבצים של לינוקס
  • ההבדל בין תיקיות אב לתיקיות משנה
  • ההבדל בין נתיבים מוחלטים לנתיבים יחסיים
  • הנתיבים היחסיים המיוחדים . ו-..
  • ניווט במערכת הקבצים באמצעות cd
  • הצגת המיקום הנוכחי שלך באמצעות pwd
  • רשימת כל הקבצים והתיקיות באמצעות ls -a

הפקודות הבאות נדונו בשיעור זה:

  • cd – שינוי הספרייה הנוכחית.
  • pwd – הצגת הנתיב של הספרייה הנוכחית.
  • ls – הצגת תוכן תיקייה והצגת מאפייני קבצים.
  • mkdir – יצירת ספרייה חדשה.
  • tree – הצגת רשימה היררכית של עץ ספריות.

תשובות לתרגילים מונחים

  1. עבור כל אחד מהנתיבים הבאים, ציין האם הוא נתיב מוחלט או יחסי:
    • /home/user/Downloads מוחלט
    • ../Reports יחסי
    • /var מוחלט
    • docs יחסי
    • / מוחלט
  2. התבונן במבנה הקבצים הבא. שים לב: ספריות מסתיימות בקו נטוי (/) כאשר הפקודה tree מופעלת עם האפשרות -F. תזדקק להרשאות מנהל מערכת כדי להפעיל את פקודת tree על ספריית /. השתמש במבנה זה כדי לענות על השאלות הבאות:
    $ sudo tree -F /
    /
    ├── etc/
    │   ├── network/
    │   │   └── interfaces
    │   ├── systemd/
    │   │   ├── resolved.conf
    │   │   ├── system/
    │   │   ├── system.conf
    │   │   ├── user/
    │   │   └── user.conf
    │   └── udev/
    │   ├── rules.d/
    │   └── udev.conf
    └── home/
      ├── lost+found/
      └── user/
      └── Documents/
    12 directories, 4 files
                

    משתמש הזין את הפקודות הבאות:

    $ cd /etc/udev
    $ ls -a
                

    מה יהיה הפלט של הפקודה ls -a?

    תשובה: . .. rules.d udev.conf

  3. הזן את הפקודה הקצרה ביותר עבור כל אחת מהבאות:
    • המיקום הנוכחי שלך הוא /. הזן את הפקודה כדי לנווט ל-lost+found בתיקיית home (דוגמה):
      $ cd home/lost+found
                          
    • המיקום הנוכחי שלך הוא /. הזן את הפקודה כדי לנווט לתיקיית network:
      $ cd etc/network
                          
    • המיקום הנוכחי שלך הוא Documents. נווט לתיקיית etc:
      $ cd /etc
                          
    • המיקום הנוכחי שלך הוא system. נווט לתיקיית user:
      $ cd /home/user
                          
  4. שקול את הפקודות הבאות:
    $ pwd
    /etc/udev/rules.d
    $ cd ../../systemd/user
    $ cd ..
    $ pwd
                

    מהו הפלט של הפקודה pwd האחרונה?

    תשובה: /etc/systemd

תשובות לתרגילי חקירה

  1. נניח שמשתמש הזין את הפקודות הבאות:
    $ mkdir "this is a test"
    $ ls
    this is a test
                

    איזו פקודת cd תאפשר לך להיכנס לתיקייה זו?

    תשובה: $ cd this\ is\ a\ test

  2. נסה זאת שוב, אך לאחר הקלדת cd this, לחץ על מקש ה-TAB. מה מוצג כעת בשורת הפקודה?
  3. נסה ליצור ספרייה ששמה מכיל תו \. הצג את שם הספרייה באמצעות ls ומחק את הספרייה.

    תשובה: אתה יכול להתחמק מהתו \ באמצעות תו \ נוסף (\\) או להשתמש במרכאות יחידות או כפולות סביב שם הספרייה כולו:

    $ mkdir my\\dir
    $ ls
    'my\dir'
    $ rmdir 'my\dir'