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

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

מבוא (Introduction)

שורת הפקודה היא כלי מורכב מאוד. לכל פקודה יש אפשרויות ייחודיות משלה, ולכן התיעוד הוא המפתח לעבודה עם מערכת לינוקס. מלבד הספרייה /usr/share/doc/, שמכילה את רוב התיעוד, כלים שונים מספקים מידע על השימוש בפקודות לינוקס. פרק זה מתמקד בשיטות לגשת לתיעוד זה, במטרה לקבל עזרה.

ישנן מגוון שיטות לקבלת עזרה בשורת הפקודה של לינוקס. פקודות כמו man, help ו- info הן רק כמה מהן. עבור Linux Essentials, נתמקד בפקודות man ו- info שכן הן הכלים הנפוצים ביותר לקבלת עזרה.

נושא נוסף בפרק זה יהיה איתור קבצים. תעבוד בעיקר עם פקודת locate.

קבלת עזרה בשורת הפקודה (Getting Help on the Command Line)

עזרה מובנית (Built-in Help)
כאשר מפעילים פקודה עם הפרמטר –help, רוב הפקודות מציגות הוראות קצרות על השימוש בהן. למרות שלא כל הפקודות מספקות את האפשרות הזו, זו עדיין דרך טובה ללמוד עוד על הפרמטרים של פקודה. שים לב שההוראות מ- –help הן בדרך כלל קצרות יחסית בהשוואה למקורות תיעוד אחרים שנדון בהם בהמשך השיעור.

עמודי מדריך (Man Pages)
רוב הפקודות מספקות עמודי מדריך או “עמודי man“. תיעוד זה בדרך כלל מותקן עם התוכנה וניתן לגשת אליו באמצעות הפקודה man. הפקודה שעבור עמוד ה- man שלה יש להציג מוסיפים כארגומנט לפקודת man:

$ man mkdir

פקודה זו פותחת את עמוד ה- man של mkdir. ניתן להשתמש במקשי החצים למעלה ולמטה או במקש הרווח כדי לנווט בעמוד ה- man. כדי לצאת מעמוד ה- man, יש ללחוץ על Q.

כל עמוד man מחולק לעד 11 חלקים, אם כי חלקים רבים מהם הם אופציונליים:

חלק (Section) תיאור (Description)
NAME שם הפקודה ותיאור קצר
SYNOPSIS תיאור התחביר של הפקודה
DESCRIPTION תיאור ההשפעות של הפקודה
OPTIONS אפשרויות זמינות
ARGUMENTS ארגומנטים זמינים
FILES קבצים נלווים
EXAMPLES דוגמאות לשורת הפקודה
SEE ALSO הפניות לנושאים קשורים
DIAGNOSTICS הודעות אזהרה ושגיאה
COPYRIGHT מחבר(י) הפקודה
BUGS מגבלות ידועות של הפקודה

בפועל, רוב עמודי ה- man אינם מכילים את כל החלקים הללו.

עמודי מדריך מחולקים לשמונה קטגוריות, ממוספרות מ-1 עד 8:

קטגוריה (Category) תיאור (Description)
1 פקודת משתמש
2 קריאות מערכת
3 פונקציות מספריית C
4 דרייברים וקבצי התקנים
5 קבצי תצורה ותבניות קבצים
6 משחקים
7 שונות
8 פקודות מנהל מערכת
9 פונקציות ליבת המערכת (לא סטנדרטי)

כל עמוד מדריך שייך בדיוק לקטגוריה אחת. עם זאת, מספר קטגוריות יכולות להכיל עמודי מדריך עם אותו שם. ניקח לדוגמה את הפקודה passwd. הפקודה הזו יכולה לשמש לשינוי סיסמת משתמש. מכיוון ש- passwd היא פקודת משתמש, עמוד המדריך שלה נמצא בקטגוריה 1. בנוסף, קובץ בסיס הנתונים של סיסמאות /etc/passwd גם לו יש עמוד מדריך שנקרא passwd גם הוא. מכיוון שמדובר בקובץ תצורה, הוא שייך לקטגוריה 5. כאשר מתייחסים לעמוד מדריך, לרוב מוסיפים את מספר הקטגוריה לשם עמוד המדריך, כמו passwd(1) או passwd(5) כדי לזהות את עמוד המדריך המתאים.

כברירת מחדל, הפקודה man passwd מציגה את עמוד המדריך הראשון הזמין, במקרה זה passwd(1). ניתן לציין את הקטגוריה הרצויה באמצעות הפקודה man 1 passwd או man 5 passwd.

כבר דנו כיצד לנווט בעמוד מדריך וכיצד לחזור לשורת הפקודה. מבפנים, man משתמש בפקודת less כדי להציג את תוכן עמוד המדריך. less מאפשר חיפוש טקסט בעמוד מדריך. כדי לחפש את המילה linux ניתן פשוט להשתמש בפקודה /linux לחיפוש קדימה מהנקודה הנוכחית בעמוד, או ?linux כדי להתחיל חיפוש אחורה. פעולה זו מדגישה את כל התוצאות התואמות ומזיזה את העמודה להתאמה הראשונה. בשני המקרים ניתן להקליד N כדי לקפוץ להתאמה הבאה. כדי למצוא מידע נוסף על תכונות אלו, לחץ H ותוצג תפריט עם כל המידע.

עמודי מידע (Info Pages)
כלי נוסף שיעזור לך בזמן העבודה עם מערכת לינוקס הוא עמודי המידע. עמודי המידע בדרך כלל מפורטים יותר מעמודי המדריך והם מעוצבים בטקסט היפר (hypertext), בדומה לדפי אינטרנט.

$ info mkdir

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

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

תיקיית /usr/share/doc/
כפי שהוזכר קודם, הספרייה /usr/share/doc/ מאחסנת את רוב התיעוד של הפקודות שהמערכת משתמשת בהן. ספרייה זו מכילה ספרייה נפרדת עבור רוב החבילות המותקנות במערכת. שם הספרייה הוא בדרך כלל שם החבילה ולעיתים גרסתה.

ספריות אלו כוללות קובץ README או readme.txt שמכיל את התיעוד הבסיסי של החבילה. לצד קובץ ה- README, התיקייה יכולה לכלול גם קבצי תיעוד אחרים, כמו changelog הכולל את היסטוריית התוכנית בפירוט, או דוגמאות לקבצי תצורה עבור החבילה הספציפית.

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

איתור קבצים (Locating Files)

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

$ locate note
/lib/udev/keymaps/zepto-znote
/usr/bin/zipnote
/usr/share/doc/initramfs-tools/maintainer-notes.html
/usr/share/man/man1/zipnote.1.gz

הפקודה locate תומכת בשימוש בתווי כלליים (wildcards) ובהבעות רגולריות (regular expressions), ולכן מחרוזת החיפוש לא חייבת להתאים לכל שם הקובץ הרצוי. תלמד עוד על הבעות רגולריות בפרק מאוחר יותר.

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

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

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

find דורשת לפחות את הנתיב שבו היא צריכה לחפש. בנוסף, ניתן להוסיף מה שנקרא הבעות (expressions) כדי לספק קריטריוני סינון עבור הקבצים שיוצגו. דוגמה לכך היא הביטוי -name, שמחפש קבצים עם שם מסוים:

~$ cd Downloads
~/Downloads
$ find . -name thesis.pdf
./thesis.pdf
~/Downloads
$ find ~ -name thesis.pdf
/home/carol/Downloads/thesis.pdf

הפקודה הראשונה find מחפשת את הקובץ בתוך ספריית Downloads הנוכחית, בעוד שהפקודה השנייה מחפשת את הקובץ בתוך ספריית הבית של המשתמש.

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

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

1. השתמש בפקודת man כדי לגלות מה עושה כל פקודה:

פקודה (Command) תיאור (Description)
ls הצגת התוכן של ספרייה.
cat
cut
cd
cp
mv
mkdir
touch
wc
passwd
rm
rmdir
more
less
whereis
head
tail
sort
tr
chmod
grep

2. פתח את עמוד המידע של ls וזיהה את התפריט (MENU):

  • אילו אפשרויות יש לך?
  • מצא את האפשרות שמאפשרת למיין את הפלט לפי זמן שינוי (modification time).

3. הצג את הנתיב של 3 קבצי README ראשונים. השתמש בפקודת man כדי לזהות את האפשרות הנכונה לפקודת locate.

4. צור קובץ בשם test בספריית הבית שלך. מצא את הנתיב המוחלט שלו באמצעות פקודת locate.

5. האם מצאת אותו מיד? מה היית צריך לעשות כדי ש-locate ימצא אותו?

6. חפש את הקובץ test שיצרת קודם באמצעות פקודת find. איזה תחביר השתמשת בו ומהו הנתיב המוחלט?

תרגילים חקרניים

1. יש פקודה אחת בטבלה למעלה שאין לה עמוד מדריך. מהי הפקודה ולמה לדעתך אין לה עמוד מדריך?

2. באמצעות הפקודות שבטבלה למעלה, צור את עץ הקבצים הבא. השמות שמתחילים באות גדולה הם ספריות, והקבצים באותיות קטנות הם קבצים:

    User
    ├── Documents
    | ├──Hello
    | | ├──hey2
    | | ├──helloa
    | | └──ola5
    | └──World
    | └──earth9
    ├── Downloads
    | ├──Music
    | └──Songs
    | ├──collection1
    | └──collection2
    ├── Test
    | └── passa
    └── test
    

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

4. חפש בתוך עץ הקבצים את כל הקבצים שמסתיימים במספר.

5. הסר את כל עץ הספריות בפקודה אחת.

סיכום

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

  • איך לקבל עזרה
  • איך להשתמש בפקודת man
  • איך לנווט בעמודי המדריך (man page)
  • הקטגוריות השונות של עמודי המדריך
  • איך להשתמש בפקודת info
  • איך לנווט בין צמתים שונים
  • איך לחפש קבצים במערכת

פקודות שנעשה בהן שימוש בתרגילים:

  • man – הצגת עמוד מדריך.
  • info – הצגת עמוד מידע.
  • locate – חיפוש במסד הנתונים של locate עבור קבצים בשם מסוים.
  • find – חיפוש במערכת הקבצים עבור שמות שתואמים לקריטריונים מסוימים.
  • updatedb – עדכון מסד הנתונים של locate.

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

1. השתמש בפקודת man כדי לגלות מה עושה כל פקודה:

פקודה (Command) תיאור (Description)
ls הצגת התוכן של ספרייה.
cat משרשר או מציג קבצי טקסט.
cut מוציא חלקים מתוך קובץ טקסט.
cd משנה ספרייה נוכחית.
cp מעתיק קובץ.
mv מעביר קובץ (או משנה את שמו).
mkdir יוצר ספרייה חדשה.
touch יוצר קובץ או משנה את זמן השינוי שלו.
wc מונה את מספר המילים, השורות או הבתים בקובץ.
passwd משנה את סיסמת המשתמש.
rm מוחק קובץ.
rmdir מוחק ספרייה.
more מציג קבצי טקסט מסך אחד בכל פעם.
less מציג קבצי טקסט, מאפשר גלילה מעלה ומטה שורה או עמוד בכל פעם.
whereis מציג את נתיב הקובץ לתוכנית מסוימת ולדפי המדריך הקשורים אליה.
head מציג את השורות הראשונות של קובץ.
tail מציג את השורות האחרונות של קובץ.
sort מסדר קובץ לפי סדר אלפביתי או מספרי.
tr מתרגם או מוחק תווים מתוך קובץ.
chmod משנה את ההרשאות של קובץ.
grep מחפש בתוך קובץ.

2. פתח את עמוד המידע של ls וזיהה את התפריט (MENU):

  • אילו אפשרויות יש לך?
  • מצא את האפשרות שמאפשרת למיין את הפלט לפי זמן שינוי (modification time).

3. הצג את הנתיב של 3 קבצי README ראשונים. השתמש בפקודת man כדי לזהות את האפשרות הנכונה לפקודת locate.

$ locate -l 3 README
/etc/alternatives/README
/etc/init.d/README
/etc/rc0.d/README

4. צור קובץ בשם test בספריית הבית שלך. מצא את הנתיב המוחלט שלו באמצעות פקודת locate.

$ touch test
$ locate test
/home/user/test

5. האם מצאת אותו מיד? מה היית צריך לעשות כדי ש-locate ימצא אותו?

$ sudo updatedb

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

6. חפש את הקובץ test שיצרת קודם באמצעות פקודת find. איזה תחביר השתמשת בו ומהו הנתיב המוחלט?

$ find ~ -name test
או
$ find . -name test
/home/user/test

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

1. יש פקודה אחת בטבלה למעלה שאין לה עמוד מדריך. מהי הפקודה ולמה לדעתך אין לה עמוד מדריך?

הפקודה היא cd. אין לה עמוד מדריך מכיוון שזו פקודה מובנית (built-in) בתוך ה-shell.

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

    User
    ├── Documents
    | ├──Hello
    | | ├──hey2
    | | ├──helloa
    | | └──ola5
    | └──World
    | └──earth9
    ├── Downloads
    | ├──Music
    | └──Songs
    | ├──collection1
    | └──collection2
    ├── Test
    | └── passa
    └── test
    

הפתרון הוא שילוב של פקודות mkdir ו-touch.

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

$ ls -R

4. חפש בתוך עץ הקבצים את כל הקבצים שמסתיימים במספר.

$ find ~ -name “*[0-9]”
$ locate “*[0-9]”

5. הסר את כל עץ הספריות בפקודה אחת.

$ rm -r Documents Downloads Test test