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

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

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

הערה חשובה: כל הדוגמאות בספר זה מוצגות באובונטו 22.04.2 LTS (Jammy Jellyfish). רוב כליי השורת הפקודה הם דומים במידה רבה במפלצות אחרות. עם זאת, ייתכן שייש שינויים ביישומים הGUI ובפקודות אם אתה עובד על מפלצת לינוקס אחרת.

תוכן העניינים

חלק 1: הקדם ללינוקס

1.1. התחלה עם לינוקס

מה הוא לינוקס?

לינוקס הוא מערכת ההפעלה הפתוחה שמבוססת על מערכת ההפעלה Unix. היא נוצרה על ידי לינוס טורבלדס ב-1991.

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

למה כדאי ללמוד על Linux?

בנוף מרכזי של מרכזי נתונים של היום, Linux ו-Microsoft Windows עומדים בראש המתחרים העיקריים, עם Linux שיש לו חלק גדול.

כאן כמה סיבות משכנעות ללמוד Linux:

  • בהתרפצות של יישומי Linux, יש סיכוי גבוה שהיישום שלך יתווסף על Linux. לכן לימוד Linux כמפתח מתפתח ערך נוסף.

  • עם השימוש בחישוב ענן כשגרה, יש סיכוי גבוה שהמופעים שלך בענן יסמכו על Linux.

  • Linux משמש כיסוד למערכות הפעלה רבות לאינטרנט הדברים (IoT) ויישומים ניידים.

  • בעולם המחשוב, יש הרבה הזדמנויות לאלה שמיומנים ב-Linux.

מה משמעות ש-Linux היא מערכת הפעלה קוד פתוח?

ראשית, מהו קוד פתוח? תוכנה קוד פתוח היא תוכנה ששומה נתונה לציבור ומי שרוצה יכול להשתמש בה, לשנות ולהפיץ אותה.

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

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

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

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

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

מערכת ההפעלה Chrome OS המשמשת ב-Chromebooks מבוססת על לינוקס. אנדרואיד, שמפעילה רבים מהסמארטפונים ברחבי העולם, גם היא מבוססת על לינוקס.

מהו ליבת לינוקס?

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

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

הַלָּיבָה נִטעֵנָה לְזִיכּוֹר רִאשוֹנָה כְּשֶׁהַמַעְרֵכָת הַפּוֹעָלֶת מַתְחִילָה וְנוֹשֶׁאת שָׁם עַד שֶׁהַמַעְרֵכָת נִכְבֶּה. הַלָּיבָה אַחֲרֵיוּת אוֹתָה הַמְּשִׁימוֹת כָּמוֹ נְהִירוּת דִּיסְקִים, נְהִירוּת מְשִׁימוֹת, וְנְהִירוּת זִיכּוֹר.

אִם אַתֶּם סְקָרִיִּים לְגַבֵּי מַה שֶּׁהַלָּיבָה שֶׁל לִינוּקס נִרְאֶה כְּמוֹ, הַנִּקּוּדִים שֶׁל גִּיטְהֻב נִמְצָאִים כאן.

מַהוּוּת הַתְּפִיצָה שֶׁל לִינוּקס?

עַל יְדֵי נְקוּדָה זוֹ אַתָּה יוֹדֵעַ שֶׁאַתָּה יָכוֹל לְהַשְתִּימֵשׁ בְּקוֹד שֶׁל הַלָּיבָה שֶׁל לִינוּקס, לְשַׁנוֹת אוֹתוֹ, וְלִיצוֹר לָךְ לָקֶרֶא קוֹד חֲדָשָׁה. אַתָּה יָכוֹל גַּם לְשַׁרֵף יַחְדָּיו מְגִירוֹת שוֹנוֹת וְתוֹכְנוֹת כְּדֵי לִיצוֹר מַעֲרֶכֶת הַפּוֹעָלֶת חֲדָשָׁה לָגַמְרֵי.

תְּפִיצַת לִינוּקס אוֹ תְּפִיצָה הִיא גְּרָסָה שֶׁל מַעֲרֶכֶת הַפּוֹעָלֶת לִינוּקס שֶׁכֵּלֶיָּה אֶת הַלָּיבָה שֶׁל לִינוּקס, כְּלֵי־מוְדוּעִים מְעִרְכֵי נִיהוּל, וְתַכְנוּת אֲחֵרוֹת. בִּהְיוֹתָה קוֹד פָּתוּחַ, תְּפִיצַת לִינוּקס הִיא מִאֵמָץ שֶׁמְשַׁתֵּף עֲם כְּמוּת רַבָּה שֶׁל קְהִלּוֹת פִּתְחוּת קוֹד פָּתוּחַ עִצָּמִיוֹת.

מַהוּוּת הַכְּוָונָה כְּשֶׁאַתָּה אוֹמֵר שֶׁתְּפִיצָה היא מוּפְקָצֶת? כְּשֶׁאַתָּה אוֹמֵר שֶׁתְּפִיצָה היא "מוּפְקָצֶת" מֵתְּפִיצָה אַחֶרֶת, הַתְּפִיצָה הַחֲדָשָׁה נִבְנֵית עַל בַּסִּיס אוֹ הַתְּכַנָּית שֶׁל הַתְּפִיצָה הַמְּקֹדֶמֶת. הַמוּפְקֶצֶת יָכוֹלָה לִכְלוֹל הַשְׁתָּמָה מְעוֹרֶכֶת נִיהוּל חֲבִילוֹת תַּכְנִיוֹת (יוֹתֵר עַל זֶה בַּשְּׁעֵתָּאַרְתָּן), גִּרְסָת הַלָּיבָה, וְלִפְעָמִים גַּם הַכְּלָיָּה שֶׁל אוֹתָם כְּלֵי הַגְּדָרָה.

הַיוֹם, יֵשׁ אַלְפֵּי תְּפִיצוֹת שֶׁל לִינוּקס לִבְחִירָה, שֶׁמַצְיַנוֹת יִעוּדָן שֶׁמִּבְחָרָן וְשֶׁמַכְּרִיזוֹת עַל הַתַּמְיכָה בַּתַּכְנוּת הַיַּזְמָה בִּתְּפִיצָתָן.

הַתְּפִיצוֹת מִשְׁתַּנּוֹת מְאֵחַת לַשְּׁנִיָּה, אֲבָל הֵן בְּכָלֵל יֵשׁ לָהֶן מְאַפְיֵּנִים מְשֻׁגָּרִים מֵהַמִּינְיָּים הַבְּהוּתָם:

  • תְּפִיצָה כוֹלֶתֶת אֶת הַלָּיבָה שֶׁל לִינוּקס.

  • היא תומכת בתוכנות במרחב המשתמש.

  • ההתפלגות יכולה להיות קטנה ומסודרת סיימנטלית או לכלל אלפים של תוכנות פתוחות מקור.

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

אם תסתכלו על לינוקס התפלגות זמן, תראו שתי ההתפלגות הגדולות: Slackware ו Debian. המספר הזה מהם נובע. לדוגמה, Ubuntu ו Kali נובעים מ Debian.

מה היתרונות של השחיתות? יש יתרונות מגוונים של השחיתות. ההשחיתות יכולות להשתמש ביציבות, בטיחות ובמאגרי תוכנה גדולים של ההתפלגות הורית.

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

חלק מההתפלגות הלינוקס הפופולריות הן:

  1. Ubuntu

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

  2. Linux Mint: מבוססת על Ubuntu, Linux Mint מספקת חוויה מושלמת למשתמשים עם התמקדות בתמיכה במדיה מולטיבית. למידה נוספת על Linux Mint, הלכה לכאן.

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

  4. Manjaro: מבוסס על Arch Linux, Manjaro מעניק חוויה מודע-משתמש עם תוכנה מותקנת קודם וכלים פשוטים לניהול מערכת. למידה נוספת על Manjaro, לכאן.

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

איך להתקין ולגיש לLinux

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

אני ממליץ לך לעקוב אחר אחד מהשיטות האלה על מנת לקבל גישה לLinux כך שתוכל לעקוב אחריו.

התקין Linux כOS ראשי

הדרך היעילה ביותר להשתמש בLinux היא להתקין אותו כOS ראשי, כך שתוכל להשתמש בכל הכח של המכשיר שלך.

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

  • שלב 1 – הורדת האיזו: לך לאתר הרשמי של Ubuntu והוריד את הקבצים האיזו. ותוודא שאתה בוחר שישון יציב שמתוייג "LTS". LTS מתייחסת לתמיכה מורחבת טווח, שאומר שתוכל לקבל עדכונים אבטחה ושימור בחינם למשך זמן ארוך (בדרך כלל 5 שנים).

  • שלב 2 – יצירת דיסק התחילה: יש מספר תוכנות שיכולות ליצור דיסק התחילה. אני ממליץ להשתמש ב Rufus, כי הוא די קל לשימוש. תוכל להוריד אותו מפה.

  • שלב 3 – הפעל מהפלאש דרייב: לאחר שהפלאש דרייב הניתן להפעלה שלך מוכן, הכניסו אותו והפעילו ממנו. תפריט ההפעלה תלוי במחשב הנייד שלך. ניתן לחפש ב- Google את תפריט ההפעלה עבור דגם המחשב הנייד שלך.

  • שלב 4 – עקוב אחר ההוראות. לאחר שהתהליך הפעלה מתחיל, בחרו נסו או התקינו את אובונטו.

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

  • שלב 5 – איתחול מחדש: לחצו על "איתחול כעת" והוציאו את הפלאש דרייב.

  • שלב 6 – התחברות: התחבר עם הפרטים שהזנת לפני כן.

והנה! כעת תוכל להתקין אפליקציות ולהתאים אישית את דסק העבודה שלך.

להתקנה מתקדמת, ניתן לחקור את הנושאים הבאים:

  • מיצוב כונן.

  • הגדרת זיכרון סוואפ כדי לאפשר הפעלה מתהפכת.

גישה לטרמינל

חלק חשוב במדריך זה הוא ללמוד על הטרמינל שבו תפעיל את כל הפקודות ותראה את הקסם מתרחש. תוכל לחפש את הטרמינל על ידי לחיצה על כפתור ה-"windows" והקלדת "terminal". תוכל להצמיד את הטרמינל לסרגל המשימות שבו נמצאות האפליקציות האחרות לגישה קלה.

💡 הקיצורקוד לפתיחת הטרמינל הוא ctrl+alt+t

תוכל גם לפתוח את הטרמינל מתוך תיקייה. יש ללחוץ ימני במקום בו אתה נמצא וללחוץ על "Open in Terminal". זה יפתח את הטרמינל באותו הנתיב.

איך להשתמש ב-Linux על מחשב עם Windows

לפעמים ייתכן שתצטרך להריץ גם את Linux ו-Windows בצד אחד. למרבה המזל, יש כמה דרכים שבהן תוכל ליהנות מיתרונות שני העולמות ללא צורך במחשבים שונים לכל מערכת ההפעלה.

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

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

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

�בחירה 2: השתמש בתת-מערכת הפעלה של ווינדוס עבור לינוקס (WSL) תת-מערכת הפעלה של ווינדוס עבור לינוקס מספקת שכבת יכולת שמאפשרת לך להריץ תכנות מבינריים של לינוקס ישירות על ווינדוס.

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

כיצד להתקין את WSL2

ראשית, הפעל את אפשרות תת-מערכת הפעלה של ווינדוס בהגדרות.

  • עבור לתפריט התחלה. חפש "הדלק או כבה תכונות של Windows".

  • סמן את אפשרות "תת-מערכת הפעלה של ווינדוס" אם היא עדיין לא מסומנת.

  • לאחר מכן, פתח את פקודת הפרומפט וספק את הפקודות להתקנה.

  • פתח את פקודת הפרומפט כמנהל:

  • הרץ את הפקודה הבאה:

wsl --install

זהו הפלט:

הערה: כברירת מחדל, Ubuntu יותקן.

  • לאחר השלמת ההתקנה, יידרש לאתחל את המכונה של Windows שלך. לכן, הפעל מחדש את מכונת ה-Windows שלך.

לאחר האתחול, עשוי להופיע חלון כזה:

לאחר השלמת ההתקנה של Ubuntu, יתבקש ממך להזין שם משתמש וסיסמה.

והכל! אתה מוכן להשתמש ב-Ubuntu.

הפעל את Ubuntu על ידי חיפוש בתפריט התחלה.

והנה יש לנו את מופע ה-Ubuntu שלך מופעל.

אפשרות 3: השתמש במכונה וירטואלית (VM)

מכונה וירטואלית (VM) היא אםולציה תוכנה של מערכת מחשב פיזית. היא מאפשרת לך להפעיל מספר מערכות הפעלה ויישומים על מחשב פיזי אחד בו זמנית.

באפשרותך להשתמש בתוכנות וירטואליזציה כמו Oracle VirtualBox או VMware כדי ליצור מכונה וירטואלית הרצה של Linux בתוך הסביבה של Windows שלך. זה מאפשר לך להפעיל את Linux כמערכת האורח לצד Windows.

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

הנה חלק מהאפשרויות הנפוצות המוצגות למעשה בווירטואליזציה:

אפשרות 4: השתמש בפתרון מונחת-בראש

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

ניתן להשתמש במערכות עריכת קוד מקוונות או תאי קוד מקוונים על ידי לגשת ללינוקס. שימו לב שבדרכים אלה לעיתים לרוב אתה לא מקבל שירותים ניהוליים מושלמים.

עורכי קוד מקוונים

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

Replit הוא דוגמה לעורך קוד מקוון, שבו ניתן לכתוב את הקוד שלך ולגשת אל תוך הקוד בשורת הפקודה של Linux באותו הזמן.

טרמינלי Linux בממשק האינטרנט:

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

דוגמה אחת היא JSLinux. בתמונה מתחת מוצגת סביבת Linux מוכנה לשימוש:

אפשרות 5: השתמש בפתרון מבוסס-ענן

במקום להריץ Linux ישירות על מחשב ה-Windows שלך, ניתן לשקול להשתמש בסביבות Linux מבוססות-ענן או שרתים וירטואליים פרטיים (VPS) לגישה ועבודה עם Linux מרחוק.

שירותים כמו Amazon EC2, Microsoft Azure או DigitalOcean מספקים מופעים של Linux שניתן להתחבר אליהם ממחשב ה-Windows שלך. שים לב שעל חלק מהשירותים אלו יש תכונת הפעלה חינמית, אך לרוב הם אינם חינמיים לטווח הארוך.

חלק 2: מבוא לשורת הפקודה Bash ולפקודות מערכת

2.1. התחלה עם שורת הפקודה Bash

מבוא לשורת הפקודה Bash

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

ניתן להגדיר משתמשים שונים להשתמש בשלים שונים. אבל, רוב המשתמשים מעדיפים להישאר עם השל המוגדר כברירת מחדל הנוכחי. השל המוגדר כברירת מחדל עבור רבות מהפצות הלינוקס הוא השל "באש" של GNU (bash). באש מחליף את השל "בורן" (sh).

כדי לגלות איזה של אתה משתמש כרגע, פתח את הטרמינל והכנס את הפקודה הבאה:

echo $SHELL

פירוט הפקודה:

  • הפקודה echo משמשת להדפיס על הטרמינל.

  • המשתנה המיוחד $SHELL מחזיק את שם השל הנוכחי.

בהגדרתי, הפלט הוא /bin/bash. זה אומר שאני משתמש בשל באש.

# פלט
echo $SHELL
/bin/bash

באש הוא חזק מאוד בגלל שהוא יכול לפשט פעולות מסוימות שקשה לבצע ביעילות עם ממשק משתמש גרפי (GUI). זכור שרוב השרתים אין להם ממשק משתמש גרפי, ומומלץ ללמוד להשתמש ביכולות של ממשק שורת הפקודה (CLI).

טרמינל נגד של

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

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

מהו המופע?

כאשר של משמש באופן אינטראקטיבי, הוא מציג את $ כאשר הוא ממתין לפקודה מהמשתמש. זה נקרא המופע של השל.

[username@host ~]$

אם השל פועל כמשתמש root (תלמד עוד על המשתמש root מאוחר יותר), המופע משתנה ל־#.

[root@host ~]#

2.2. מבנה הפקודה

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

בדרך כלל, פקודות Linux עוקבות אחר התחביר הבא:

command [options] [arguments]

כאן פירוט של התחביר שנתון למעלה:

  • פקודה: זהו שם הפקודה שברצונך לבצע. ls (רשימה), cp (העתקה) ו־rm (מחיקה) הן פקודות Linux נפוצות.

  • [אפשרויות]

    : אפשרויות, או דגלים, לרוב מקדמים סימן חיצון (-) או סימן חיצון כפול (–), שמשנים את התנהגות הפקידה. הם יכולים לשנות איך הפקידה פועלת. לדוגמה, ls -a משתמש באפשרות -a כדי להציג קבצים חבויים בתוך התיקייה הנוכחית.

  • [אג'נדומים]

    : אג'נדומים הם הקלטים לפקידות הדורשות אחד. אלה יכולים להיות שמות קבצים, שמות משתמשים או מידע אחר, שהפקידה תפעל עליו. לדוגמה, בפקידה cat access.log, cat היא הפקידה וaccess.log הוא הקלט. כתוצאה, הפקידה cat מציגה את התוכן של הקבץ access.log.

אג'נדומים ואפשרויות אינם נדרשים עבור כל פקידה. חלק מהפקידות יכולות להיות מופעלות ללא אף אג'נדום או אפשרויות, בעוד אחרות עלולות לדרוש אחד או שניהם על מנת לפעול נכונה. תוכל תמיד להתייחס למדיקת הפקידה כדי לבדוק את האפשרויות והאג'נדומים שהיא תומכת.

טיפ: אתם יכולים להסתכל על ספר ההוראות של פקודה באמצעות הפקודה man.

אתם יכולים לגשת לעמוד ההוראות עבור ls באמצעות man ls, וזה ייראה כך:

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

2.3. פקודות Bash וצירופי מקשים

כשאתם במסוף, אתם יכולים להאיץ את המשימות שלכם על ידי שימוש בצירופים.

הנה כמה מהצירופים הנפוצים ביותר במסוף:

פעולה צירוף
חיפוש הפקודה הקודמת חץ למעלה
קפיץ לתחילת המילה הקודמת Ctrl+חץ שמאלה
מחיקת תווים מהסמן לסוף השורת הפקודה Ctrl+K
השלמת פקודות, שמות קבצים ואפשרויות לחיצה על Tab
קפיץ לתחילת שורת הפקודה Ctrl+A
הצגת רשימה של הפקודות הקודמות history

2.4. הזדהות: הפקודה whoami

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

רק אחרי הסימן $, הקלידו whoami ולחצו Enter.

whoami

ז

zaira@zaira-ThinkPad:~$ whoami
zaira

חלק 3: הבנת מערכת הלינוקס שלך

3.1. גילו את מערכת ההפעלה והפרמטרים שלך

הדפסת מידע מערכת באמצעות הפקודה uname

ניתן לקבל מידע מערכת מפורט באמצעות הפקודה uname.

כשמספקים את האפשרות -a, היא מדפיסה את כל מידע המערכת.

uname -a
# הפלט
Linux zaira 6.5.0-21-generic #21~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Feb  9 13:32:52 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

בהפלט שלמעלה,

  • Linux: מציין את מערכת ההפעלה.

  • zaira: מייצג את שם המחשב.

  • 6.5.0-21-generic #21~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Feb 9 13:32:52 UTC 2: מספק מידע על גרסת הקרן, תאריך בנייתה ופרטים נוספים.

  • x86_64 x86_64 x86_64: מציין את הארכיטקטורה של המערכת.

  • GNU/Linux: מייצג סוג מערכת ההפעלה.

מצא פרטים על הארכיטקטורה של הCPU בעזרת הפקודה lscpu

הפקודה lscpu בLinux משמשת כדי להציג מידע על הארכיטקטורה של הCPU. כשאתה מבצע lscpu בתורמין, היא מספקת פרטים כמו:

  • הארכיטקטורה של הCPU (לדוגמה, x86_64)

  • מצבים הפעולה של הCPU (לדוגמה, 32-bit, 64-bit)

  • סדר הביטים (לדוגמה, Little Endian)

  • CPU(s) (מספר הCPU), וכך הלאה

    בואו ננסה את זה:

lscpu
# יציאה
Architecture:            x86_64
  CPU op-mode(s):        32-bit, 64-bit
  Address sizes:         48 bits physical, 48 bits virtual
  Byte Order:            Little Endian
CPU(s):                  12
  On-line CPU(s) list:   0-11
Vendor ID:               AuthenticAMD
  Model name:            AMD Ryzen 5 5500U with Radeon Graphics
    Thread(s) per core:  2
    Core(s) per socket:  6
    Socket(s):           1
    Stepping:            1
    CPU max MHz:         4056.0000
    CPU min MHz:         400.0000

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

חלק 4: ניהול קבצים מהמשטח

4.1. היררכיית הפילסמטים במערכת הלינUX

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

התוויות / הם התיקייה השורשית ונקודת ההתחלה של המערכת הפי

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

שים לב שזו לא רשימה מלאה וההתפרצויות השונות עשויות להיות בעלות הגדרות שונות.

הנה טבלה שמראה את המטרה של כל ספרייה:

מיקום מטרה
/bin בינאריות פקודות מהותיות
/boot קבצים סטטיים של מנהל האתחול, נחוץ להתחיל את תהליך האתחול.
/etc הגדרות מערכת ספציפיות למארח
/home ספריות בית של המשתמשים
/root ספריית בית למשתמש המנהלים root
/lib ספריות משותפות מהותיות ומודולי הליבה
/mnt נקודת העגינה לעיגון מערכת קבצים באופן זמני
/opt חבילות תוכנה מוספנית ליישומים
/usr תוכנה מותקנת וספריות משותפות
/var מידע משתנה שגם מתמשך בין ההפעלות
/tmp קבצים זמניים שנגישים לכל המשתמשים

💡 טיפ: אתה יכול ללמוד עוד על מערכת הקבצים באמצעות הפקודה man hier.

אתה יכול לבדוק את מערכת הקבצים שלך באמצעות הפקודה tree -d -L 1. אתה יכול לשנות את הסימן -L כדי לשנות את עומק העץ.

tree -d -L 1
# פלט
.
├── bin -> usr/bin
├── boot
├── cdrom
├── data
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib32 -> usr/lib32
├── lib64 -> usr/lib64
├── libx32 -> usr/libx32
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── snap
├── srv
├── sys
├── tmp
├── usr
└── var

25 directories

שינוי היכן שהמידע אינו מקיף ומערכות והתפלגויות שונות עשויות להיות מתורגמות אחרת.

4.2. מעבר במערכת הקבצים של לינוקס

נתיב מלא נגד נתיב יחסי

נתיב מלא הוא הנתיב המלא מהספרייה השורש לקובץ או ספרייה. הוא תמיד מתחיל ב- /. לדוגמה, /home/john/documents.

נתיב יחסי, לעומת זה, הוא הנתיב מהספרייה הנוכחית לקובץ או ספרייה היעד. הוא לא מתחיל ב- /. לדוגמה, documents/work/project.

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

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

הנה דוגמה:

pwd
# פלט
/home/zaira/scripts/python/free-mem.py

שינוי ספריות באמצעות הפקודה cd

הפקודה לשינוי ספריות היא cd והיא מייצגת "change directory" (שינוי ספרייה). אתה יכול להשתמש בפקודה cd כדי לנווט לספרייה שונה.

אתה יכול להשתמש בנתיב יחסי או בנתיב מלא.

לדוגמה, אם אתה רוצה לנווט במבנה הקבצים הבא (לפי הקווים האדומים):

ואתה עומד ב "home", הפקודה תהיה כך:

cd home/bob/documents/work/project

כמה קיצורי דרך שונים ושימושיים ל־cd הם:

פקודה תיאור
cd .. חזרה לתוך התיקייה הקודמת
cd ../.. חזרה לתוך שתי תיקיות
cd או cd ~ בא לתוך התיקייה הראשונית
cd - בא לתוך המסלול הקודם

4.3. ניהול קבצים ותיקיות

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

💡עידן: תוכל להבחין בין קובץ לתיק על פי התווית הראשונה בתוצאת ls -l. תווית '-' מייצגת קובץ, בעוד תווית 'd' מייצגת תיק.

יצירת תיקים חדשים באמצעות הצו ה mkdir

ניתן ליצור תיק ריק בעזרת הצו mkdir.

# יוצר תיק ריק בשם "foo" בתוך התיקייה הנוכחית
mkdir foo

ניתן גם ליצור תיקים באופן רצף בעזרת האפשרות -p.

mkdir -p tools/index/helper-scripts
# תוצאה של tree
.
└── tools
    └── index
        └── helper-scripts

3 directories, 0 files

יצירת קבצים חדשים באמצעות הצו touch

הצו touch יוצר קובץ ריק. תוכל להשתמש בו כך:

# יוצר קובץ ריק בשם "file.txt" בתוך התיקייה הנוכחית
touch file.txt

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

# יוצר קבצים ריקים "file1.txt", "file2.txt" ו "file3.txt" בתוך התיקייה הנוכחית

touch file1.txt file2.txt file3.txt

הסרת קבצים ותיקיות באמצעות הפקטים rm ו rmdir

אתה יכול להשתמש בפקט rm כדי להסיר קבצים ותיקים לא ריקים.

פקט תיאור
rm file.txt הסרת הקבץ file.txt
rm -r directory הסרת התיקייה directory והתוכן שלה
rm -f file.txt הסרת הקבץ file.txt בלי בקשה לאשר
rmdir directory הסרת תיקייה ריקה

🛑 שימו לב שצריך להשתמש בדגל -f בזהירות מפני שלא ישאר סיפור להסיר קבץ. גם, היו זהירים במילת הפקט rm בתוך תיקיית root מפני שזה עשוי להיות קשור בהסרת קבצים חשובים למערכת.

עיצוב קבצים בעזרת הפקט cp

כדי לעתיף קבצים בלינוקס, משתמשים בפקט cp.

  • תבנית עיצוב לעתיף קבצים:cp source_file destination_of_file

הפקט זה מעתיף קבץ בשם file1.txt למיקום חדש /home/adam/logs.

cp file1.txt /home/adam/logs

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

שוכפל קובץ בשם file1.txt לקובץ אחר בשם file2.txt באותה תיקייה.

cp file1.txt file2.txt

העברה ושינוי שם של קבצים ותיקיות באמצעות הפקודה mv

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

תחביר להעברת קבצים:mv קובץ_מקור תיקייה_יעד

דוגמה: העברת קובץ בשם file1.txt לתיקייה בשם backup:

mv file1.txt backup/

להעברת תיקייה ותוכנותה:

mv dir1/ backup/

שינוי שם של קבצים ותיקיות בלינוקס נעשה גם עם הפקודה mv.

תחביר לשינוי שם של קבצים:mv שם_ישן שם_חדש

דוגמה: שינוי שם של קובץ מfile1.txt לfile2.txt:

mv file1.txt file2.txt

שינוי שם של תיקייה מdir1 לdir2:

mv dir1 dir2

4.4. מציאת קבצים ותיקיות באמצעות הפקודה find

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

הנה התחביר הבסיסי של הפקודה find:

find /path/ -type f -name file-to-search

איפה,

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

  • -type מייצג את הסוף המפתח של הקובץ. הם יכולים להיות כל אחד מהאפשרויות הבאות:
    fקובץ רגיל כמו קבצי טקסט, תמונות וקבצים נסתרים.
    dתיקייה. התיקייות האלה הן התיקיות בתוך המחשבה.
    lקישור סימולים. קישורים סימולים מצביעים על קבצים ודומים לקישורים קצרים.
    cמכשירים מוליכים. קבצים שמשמשים עבור מכשירים מוליכים נקראים קבצי מכשירים מוליכים. דריכים מתקשרים עם מכשירים מוליכים על ידי שליחת וקבלת אותם בתוך בלוקים של מידע. דוגמאות כוללות מקלדות, כרטיסי צליל והעכבר.
    bמכשירים בלוקים. קבצים שמשמשים עבור מכשירים בלוקים נקראים קבצי מכשירים בלוקים. דריכים מתקשרים עם מכשירים בלוקים על ידי שליחת וקבלת כל הבלוקים של המידע. דוגמאות כוללות USB וCD-ROM

  • -שם הוא שם סוג הקובץ שאתה רוצה לחפש.

כיצד לחפש קבצים לפי שם או סיומת

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

find . -type f -name "style*"
#פלט
./style.css
./styles.css

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

find . -type f -name "*.html"
# פלט
./services.html
./blob.html
./index.html

כיצד לחפש קבצים מוסתרים

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

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

find . -type f -name ".*"

רשימה וחיפוש קבצים מוסתרים

ls -la
# תוכן תיקייה
total 5
drwxrwxr-x  2 zaira zaira 4096 Mar 26 14:17 .
drwxr-x--- 61 zaira zaira 4096 Mar 26 14:12 ..
-rw-rw-r--  1 zaira zaira    0 Mar 26 14:17 .bash_history
-rw-rw-r--  1 zaira zaira    0 Mar 26 14:17 .bash_logout
-rw-rw-r--  1 zaira zaira    0 Mar 26 14:17 .bashrc

find . -type f -name ".*"
# פלט חיפוש
./.bash_logout
./.bashrc
./.bash_history

למעלה תראו רשימה של קבצים מוסתרים בתיקיית הבית שלי.

איך לחפש קבצי לוג וקבצי הגדרה

קבצי לוג כללית סיומת .log, ונוכל למצוא אותם בצורה הבאה:

 find . -type f -name "*.log"

באופן דומה, נוכל לחפש קבצי הגדרה בצורה הבאה:

 find . -type f -name "*.conf"

איך לחפש קבצים אחרים לפי סוג

נוכל לחפש קבצי בלוק תווים על ידי מתן c ל--type:

find / -type c

באופן דומה, נוכל למצוא קבצי בלוק מכשירים על ידי שימוש ב-b:

find / -type b

איך לחפש תיקיות

בדוגמה למטה, אנו מוצאים את התיקיות באמצעות הדגל -type d.

ls -l
# רשימת תוכן תיקייה
drwxrwxr-x 2 zaira zaira 4096 Mar 26 14:22 hosts
-rw-rw-r-- 1 zaira zaira    0 Mar 26 14:23 hosts.txt
drwxrwxr-x 2 zaira zaira 4096 Mar 26 14:22 images
drwxrwxr-x 2 zaira zaira 4096 Mar 26 14:23 style
drwxrwxr-x 2 zaira zaira 4096 Mar 26 14:22 webp 

find . -type d 
# פלט חיפוש תיקיות
.
./webp
./images
./style
./hosts

איך לחפש קבצים לפי גודל

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

find / -size +250M

כאן, אנו מפרטים קבצים שגודלם עולה על 250MB.

יחידות אחרות כוללות:

  • G: גיגה-בתים.

  • מ׳: מגה בייטס.

  • ק׳: קילו בייטס

  • c : בייטס.

רק החליפו עם היחידה התאימה.

find <directory> -type f -size +N<Unit Type>

איך לחפש קבצים לפי זמן שינוי

על-ידי שימוש בפלאג -mtime, תוכלו לסנן קבצים ותיקיות לפי זמן השינוי.

find /path -name "*.txt" -mtime -10

לדוגמה,

  • -mtime +10 משמעותו שאתם מחפשים קובץ ששונה לפני 10 ימים.

  • -mtime -10 משמעותו פחות מ-10 ימים.

  • -mtime 10 אם מתעלמים מהסימנים + או – זה אומר בדיוק 10 ימים.

4.5. פקודות בסיסיות להצגת קבצים

שילוב והצגת קבצים באמצעות הפקודה cat

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

הנה סימניטיקה בסיסית של הפקודה cat:

cat [options] [file]

הדרך הכי פשוטה להשתמש ב-cat היא ללא אפשרויות או ארגומנטים. זה יציג את

למשל, אם רוצים להציג תוכן של קובץ שנקרא file.txt, ניתן להשתמש בפקודה הבאה:

cat file.txt

זה יציג את כל התוכן של הקובץ בטרמינל בו-זמנית.

צפייה דיאלוגית בקבצים טקסט בעזרת less ו more

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

השיבוץ של הפקודה less הוא:

less [options] [file]

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

השיבוץ של הפקודה more הוא:

more [options] [file]

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

כדי להגיע לאחור אתה יכול להשתמש במקש b, וכדי להגיע קדימה אתה יכול להשתמש במקש f.

ציגת החלק האחרון של קבצים בעזרת tail

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

לדוגמה, tail file.txt יציג את 10 השורות

אם תרצו להציג מספר שונה של שורות, תוכלו להשתמש באפשרות -n בקבילה עם מספר השורות שתרצו להציג.

# הצג את ה-50 שורות האחרונות בקובץ file.txt
tail -n 50 file.txt

💡טיפ: שימוש נוסף ב tail הוא דרך העדכון המועדך (-f). האפשרות הזו מאפשרת לך להציג את התוכן של קובץ בזמן הכתיבה. זוהי שימוש שימושי להצגה ומעקבים בקובצי לוג בזמן אמת.

הצגה בתחילת קבצים בעזרת head

בדומה ל tail, אתם יכולים להשתמש בפקודה head בלינוקס כדי להציג את החלק הקדם של קובץ.

לדוגמה, head file.txt יהציג את ה-10 שורות הראשונות של הקובץ file.txt באופן בר-קבע.

כדי לשנות את מספר השורות המוצגות, תוכלו להשתמש באפשרות -n בקבילה עם מספר השורות שתרצו להציג.

ספירת מילים, שורות ותווים בעזרת wc

אתם יכולים לספור מילים, שורות ותווים בקובץ בעזרת הפקודה wc.

לדוגמה, בהרצה wc syslog.log קיבלתי את היוצאה הבאה:

1669 9623 64367 syslog.log

ביוצאה העליונה,

  • 1669 מייצג את מספר השורות בקובץ syslog.log.

  • 9623</
  • זה מייצג את מספר התווים בקובץ syslog.log.

לכן, הפקודה wc syslog.log ספרה 1669 שורות, 9623 מילים, ו-64367 תווים בקובץ syslog.log.

השוואת קבצים על פי שורה בשימוש ב-diff

השוואה ומציאת הבדלים בין שני קבצים היא מטלה נפוצה בלינוקס. ניתן להשוות שני קבצים ישירות בשורת הפקודה בשימוש בפקודה diff.

בסיס הפירוש של פקודת ה-diff הוא:

diff [options] file1 file2

ישנם שני קבצים, hello.py ו-also-hello.py, שנשווה בשימוש בפקודת diff:

# תוכן של hello.py

def greet(name):
    return f"Hello, {name}!"

user = input("Enter your name: ")
print(greet(user))
# תוכן של also-hello.py

more also-hello.py
def greet(name):
    return fHello, {name}!

user = input(Enter your name: )
print(greet(user))
print("Nice to meet you")
  1. בדיקה האם הקבצים זהים או לא
diff -q hello.py also-hello.py
# פלט
Files hello.py and also-hello.py differ
  1. ראו כיצד הקבצים משתנים. כדי לראות את ההבדלים, ניתן להשתמש בסמן -u כדי לראות פלט מאוחד:
diff -u hello.py also-hello.py
--- hello.py    2024-05-24 18:31:29.891690478 +0500
+++ also-hello.py    2024-05-24 18:32:17.207921795 +0500
@@ -3,4 +3,5 @@

 user = input(Enter your name: )
 print(greet(user))
+print("Nice to meet you")

— hello.py 2024-05-24 18:31:29.891690478 +0500

  • בפלט העליון:
  • --- hello.py 2024-05-24 18:31:29.891690478 +0500 מציין את הקובץ שנבדק ואת חותמת הזמן שלו.
  • +++ also-hello.py 2024-05-24 18:32:17.207921795 +0500 מציין את הקובץ השני שנבדק ואת חותמת הזמן שלו.
  • @@ -3,4 +3,5 @@ מציג את מספרי השורות בהן השינויים מתרחשים. במקרה זה, זה מציין ששורות 3 עד 4 בקובץ המקור השתנו לשורות 3 עד 5 בקובץ המודרף.
  • user = input(Enter your name: ) היא שורה מהקובץ המקור.
  • print(greet(user)) היא עוד שורה מהקובץ המקור.
  1. +print("Nice to meet you") היא השורה הנוספת בקובץ המודרף.
diff -y hello.py also-hello.py
כדי לראות את ההבדל בפורמט צד לצד, ניתן להשתמש בדגל -y:
def greet(name):                        def greet(name):
    return fHello, {name}!                        return fHello, {name}!

user = input(Enter your name: )                    user = input(Enter your name: )
print(greet(user))                        print(greet(user))
                                        >    print("Nice to meet you")

# פלט

  • בפלט:
  • השורות האותות בשני הקובצים מוצגות צד אחד לצד השני.

שורות שהם שונות מוצגות עם סימן > שמרמז שהשורה נמצאת רק באחד מהקובצים.

חלק 5: העיקרון של עיצוב טקסט בלינUX

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

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

5.1. הדרך המלאה למומצא Vim

הקדם לVim

  • Vim הוא מחתר טקסט פופולרי עבור הקומאנד השורה. Vim מגיע עם היתרונות שלו: הוא חזק, מותאם ומהיר. הנה כמה סיבות לכך שצריך לחשוב על ללמוד Vim:
  • רוב השרתים נגי
  • Vim משתמשת בגישה מתמקדת במקלדת, מאחר והיא מיועדת לשימוש ללא עכבר, דבר שיכול להאיץ משמעותית משימות עריכה לאחר שמבינים את קיצורי המקלדת. זה גם הופך אותה למהירה יותר מכלי ה-GUI.
  • כמה יישומי Linux, לדוגמה עריכת עבודות cron, עובדים באותה פורמט עריכה כמו Vim.

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

Vim יש לו שני גרסאות: Vim (vim) ו-Vim tiny (vi). Vim tiny היא גרסה קטנה יותר של Vim שחסרה בה חלק מהתכונות של Vim.

איך להתחיל להשתמש ב-vim

vim your-file.txt

התחילו להשתמש ב-Vim עם הפקודה הבאה:

your-file.txt יכול להיות קובץ חדש או קובץ קיים שברצונכם לערוך.

ניווט בווים: שליטה בתנועה ובמצבי פקודה

בימי קדם של ה-CLI, מקלדות לא היו מכילות מקשי חץ. לכן, ניווט נעשה באמצעות קבוצת המקשים הזמינים, כש-hjkl היה אחד מתוכם.

כשמדובר בשליטה ממוקדת במקלדת, שימוש במקשי hjkl יכול להאיץ מאוד על משימות עריכת הטקסט.

שים לב: למרות שמקשי החץ יעבדו היטב, תמיד ניתן לנסות לעבוד עם מקשי hjkl לניווט. ישנם אנשים שמוצאים את השיטה הזו יעילה.

💡לטיפ: כדי לזכור את רצף המקשים hjkl, ניתן להשתמש במשפט הבא: hang back (חזור אחורה), jump down (קפוץ למטה), kick up (התארך למעלה), leap forward (קפוץ קדימה).

שלושת מצבי ה-וים

  1. עליך לדעת את שלושת מצבי ההפעלה של וים ואיך להחליף ביניהם. קלידות התנהגות שונה בכל מצב פקודה. המצבים השלושה הם:
  2. מצב פקודה.
  3. מצב עריכה.

מצב חזותי.

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

⚠ כדי לעבור למצבים אחרים, עליך להיות במצב פקודה תחילה

מצב עריכה

מצב זה מאפשר לך לבצע שינויים בקובץ. כדי להיכנס למצב עריכה, יש ללחוץ על I במצב פקודה. שים לב למערך ה-'-- INSERT' בסוף המסך.

מצב ויזואלי

  • מצב זה מאפשר לך לעבוד על תו יחיד, בלוק טקסט או שורות טקסט. נשבור את זה לשלבים פשוטים. זכור, השתמש בשילובים הבאים כאשר במצב פקודה.
  • Shift + V → בחר מספר שורות.
  • Ctrl + V → מצב בלוק

V → מצב תווים

מצב הוויזואלי מועיל כאשר יש צורך להעתיק ולהדביק או לערוך שורות במספר.

מצב פקודה מורחב.

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

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

עריכה יעילה ב-Vim: העתקה/הדבקה וחיפוש

1. איך להעתיק ולהדביק ב-Vim

  • העתקת-הדבקה מוכרת כ-"yank" ו-"put" במונחים של Linux. כדי להעתיק ולהדביק, עקוב אחר השלבים הבאים:
  • בחר טקסט במצב ויזואלי.
  • לחץ על 'y' כדי להעתיק/להדביק.

הזז את הסמן שלך למיקום הנדרש ולחץ על 'p'.

2. איך לחפש טקסט בווים

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

במצב הפקודה, יש להקליד :set hls וללחוץ enter. חיפוש באמצעות /מחרוזת-לחיפוש. זה ידגיש את החיפושים.

נחפש כמה מחרוזות:

3. איך לצאת מווים

  • למעבר למצב פקודה (על ידי לחיצה פעמיים על escape) ואז להשתמש בדגלים הללו:
  • יציאה ללא שמירה → :q!

יציאה ושמירה → :wq!

קיצורי דרך בווים: עושים עריכה מהירה

  • הערה: כל הקיצורים הללו עובדים רק במצב הפקודה.
  • Ctrl+u: התרחק חצי דף למעלה
  • P: הדבק למעלה מהסמן
  • :%s/old/new/g: מחליף את כל ההופעות של old ב־new בקובץ
  • :q!: יציאה בלתי מתועניינת

Ctrl+w עקוב בהקשר h/j/k/l: ניווט בין חלונות הפיצול

5.2. שליטה בנאנו

התחלה עם נאנו: עורך הטקסט ידידותי למשתמש

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

nano

ליצירת קובץ חדש באמצעות נאנו, השתמש בפקודה הבאה:

nano filename

להתחיל לערוך קובץ קיים בעזרת נאנו, השתמש בפקודה הבאה:

רשימת מקשי הקישור בנאנו

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

כתוב לקובץ ושמור

בעיקרון, אחרי שתפתחו את Nano בשימוש בפקודה nano, תוכלו להתחיל בכתיבת טקסט. כדי לשמור על הקובץ, תלחצו Ctrl+O. יהיה לכם בקשה להזין את שמו הקובץ. תלחצו Enter כדי לשמור על הקובץ.

יציאה מ Nano

ניתן לצאת מ Nano על ידי לחיצה Ctrl+X. אם יש שינויים לא נשמרים, Nano יבקש מכם לשמור על השינויים לפני שיצאתכם.

עיצוב והדבקה

כדי לבחור אזור, תשתמשו ב ALT+A. תקופה תווה תוצאה. תשתמשו בסמלים האורך כדי לבחור את הטקסט. ברגע שתבחרו, תסירו את התקופה עם ALT+^.

כדי להעתיק את הטקסט הבחור, תלחצו Ctrl+K. כדי להדביק את הטקסט הנהגע, תלחצו Ctrl+U.

היתוך והדבקה

בחרו את האזור בעזרת ALT+A. ברגע שתבחרו, היתוך את הטקסט עם Ctrl+K. כדי להדביק את הטקסט הנהגע, תלחצו Ctrl+U.

ניווט

השתמשו ב Alt \ כדי לעבור להתחלת הקובץ.

השתמשו ב Alt / כדי לעבור לסוף הקובץ.

צייתת מספרי שורות

כשתפתחו קובץ בעזרת nano -l filename, תוכלו לראות מספרי שורות בצד שמאל של הקובץ.

חיפוש

נ

ניתן גם להתחיל חיפוש למחרוזת עם CTRL + W וללחוץ על Enter. אם ברצונך לחפש לאחור, תוכל ללחוץ על Alt+W לאחר שתתחיל את החיפוש עם Ctrl+W.

  • סיכום של פעולות המקלדת המרכזיות בננו
  • Ctrl+G: הצגת הטקסט עזר
  • Ctrl+J: היישור פסקה נוכחית
  • Ctrl+V: גלול למטה בדף אחד
  • Ctrl+\: חיפוש והחלפה

Alt+E: משחזר את הפעולה שהובטלה לאחרונה

חלק 6: סקריפטינג באש

6.1. הגדרת סקריפטינג באש

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

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

6.2 היתרונות של השליטה Bash

שיתוף השליטה Bash הוא כלי חזק ומושלם לאוטומציית משימות ניהול מערכת, ניהול משאבי מערכת, וביצוע שאר משימות מסורתיות במערכות Unix/Linux.

  • חלק מהיתרונות של העלילה הם:
  • אוטומצייה: עלילות מאפשרות לך לאוטומט תפקידים מחזרים ותהליכים, שחוזרים על זמן ומפחיתים את הסיכון לטעויות שיכולות להתרחש באותם ביצוע ידני.
  • ניידות: עלילות יכולות להיות נעדרות בשונות הפלטפורמות והמערכות ההפעלה, כולל אוניקס, לינוקס, מקסיOS, ואפילו בעזרת הדמיונים או מכונות מדמיות ב-Windows.
  • גמישות: קבצי תסריט (Shell scripts) הם בעלי אפשרויות התאמה גבוהות וניתן לשנותם בקלות כדי להתאים לדרישות ספציפיות. ניתן גם לשלב אותם עם שפות תכנות אחרות או כלי עזר כדי ליצור תסריטים עוצמתיים יותר.
  • נגישות: קבצי תסריט (Shell scripts) קלים לכתיבה ואינם דורשים כלים או תוכנה מיוחדת. ניתן לערוך אותם באמצעות כל עורך טקסט, ורוב מערכות ההפעלה מגיעות עם מפרש Shell מובנה.
  • אינטגרציה: קבצי תסריט (Shell scripts) יכולים להיכלל עם כלים ויישומים אחרים, כגון מסדי נתונים, שרתי אינטרנט ושירותי ענן, מאפשרים עבודה מערכתית וניהול מערכתי מורכב יותר.

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

6.3. סקירה של מפרש ה-Bash וממשק מבנה הפקודות

כלים כמו "של" ו"באש" משמשים באופן קרוב לשתותר. אך יש הבדל עדין בין שניהם.

המושג "של" מתייחס לתוכנה שמספקת ממשק שורת-פקודה לתקשורת עם מערכת ההפעלה. באש (Bourne-Again SHell) הוא אחד מהשלים האוניקסיים/לינוקסיים הנפוצים ביותר והוא השל ברירת המחדל בהרבה גרסאות לינוקס.

עד עכשיו, הפקודות שהכנסת למעשה היו מופקעות ב-"של".

למרות שבאש היא סוג של של, ישנם שלים אחרים זמינים גם כן, כמו Korn shell (ksh), C shell (csh), ו Z shell (zsh). לכל של יש את הסינטקס השלו ואת סט הפיצ'רים, אבל כולם חולקים את המטרה המשותפת של ספקת ממשק שורת-פקודה לתקשורת עם מערכת ההפעלה.

ps
# output:

    PID TTY          TIME CMD
  20506 pts/0    00:00:00 bash <--- the shell type
  20931 pts/0    00:00:00 ps

ניתן לקבוע את סוג השל שלך באמצעות הפקודה ps:

בסכמה, בעוד "של" הוא מושג רחב שמתייחס לכל תוכנה שמספקת ממשק שורת-פקודה, "באש" הוא סוג מסוים של של שנפוץ במערכות אוניקס/לינוקס.

הערה: בחלק זה, נשתמש בשל "באש".

6.4. איך ליצור ולהריץ תסריטים של באש

כללי הסיווג השם של תסריטים

לפי הסיווג השם, תסריטי באש מסתיימים ב- .sh. אך תסריטי באש יכולים להרוץ בהצלחה ללא ההרחבה sh.

הוספת השבאנג

סקריפטים של Bash מתחילים עם shebang. Shebang הוא שילוב של bash # ו- bang ! לאחריו נתיב באש של bash. זהו השורה הראשונה של הסקריפט. Shebang אומר לשל כי יש להפעיל את זה דרך bash shell. Shebang היא פשוט נתיב מוחלט למפרש bash.

#!/bin/bash

מטה דוגמה להצהרת ה-shebang.

which bash

ניתן למצוא את נתיב ה-shell שלך באש (שעשוי להשתנות מהמופיע לעיל) באמצעות הפקודה:

יצירת סקריפט bash הראשון שלך

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

vim run_all.sh

צור קובץ בשם run_all.sh באמצעות כל עורך שבחרת.

#!/bin/bash
echo "Today is " `date`

echo -e "\nenter the path to directory"
read the_path

echo -e "\n you path has the following files and folders: "
ls $the_path

הוסף את הפקודות הבאות בקובץ שלך ושמור אותו:

  1 בואו נביט עמוק יותר בסקריפט שורה אחר שורה. אני מציג שוב את אותו סקריפט, אך הפעם עם מספור שורות.
  2 echo "Today is " `date`
  3
  4 echo -e "\nenter the path to directory"
  5 read the_path
  6
  7 echo -e "\n you path has the following files and folders: "
  8 ls $the_path
  • #!/bin/bash
  • שורה מס׳ 1: ה-shebang (#!/bin/bash) מצביע על נתיב ה-shell של bash.
  • שורה מס׳ 2: הפקודה echo מציגה את התאריך והשעה הנוכחיים בטרמינל. שימו לב שה-date נמצא בסוגריים חזרה.
  • שורה מס׳ 4: אנו רוצים שהמשתמש יזין נתיב תקני.
  • שורה מספר 5: פקודת read קוראת את הקלט ושומרת אותו במשתנה the_path.

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

הפעלת סקריפט הבש

chmod u+x run_all.sh

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

  • כאן,
  • chmod משנה את הבעלות של קובץ עבור המשתמש הנוכחי :u.
  • +x מוסיף את ההרשאות הרצתיות למשתמש הנוכחי. זה אומר שהמשתמש הבעלים יכול כעת להריץ את הסקריפט.

run_all.sh הוא הקובץ שברצוננו להריץ.

  • אפשר להריץ את הסקריפט באמצעות אחת מהשיטות המוזכרות:
  • sh run_all.sh
  • bash run_all.sh

סקריפט של ריצת הכל.sh

בואו נראה את זה רץ בפעולה 🚀

6.5. בסיסי סקריפטינג באש

הערות בסקריפטינג באש

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

הערות מאוד מועילות בתיעוד הקוד, וזו דרך טובה להוסיף אותן כדי לעזור לאחרים להבין את הקוד.

הנה דוגמאות של הערות:
# זוהי דוגמא להערה

# שתי השורות האלה יישמעו על ידי המתונגר

משתנים וסוגי נתונים ב-Bash

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

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

  1. ב-Bash, אתה יכול להשתמש ולהגדיר את ערכי המשתנה בדרכים הבאות:
country=Netherlands

להקצות את הערך ישירות:

same_country=$country

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

זה מקצה את הערך של country למשתנה החדש same_country.

country=Netherlands
echo $country
כדי לגשת לערך של המשתנ
Netherlands
new_country=$country
echo $new_country
פלט
Netherlands

פלט

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

הנורמות למתן שמות למשתנים

  1. בתסריטים Bash, הדברים הבאים הם הנורמות למתן שמות למשתנים:
  2. שמות המשתנים צריכים להתחיל עם אות או תוויד (_).
  3. שמות המשתנים יכולים להכיל אותיות, ספרות ותווידים (_).
  4. שמות המשתנים חשובים לגדר האותיות.
  5. שמות המשתנים לא צריכים להכיל חלוקי שם או תווים מיוחדים.
  6. השתמש בשמות מתאריים שמשקפים את תכליתו של המשתנה.

הימנע משימוש במילות מקובעות, כמו if, then, else, fi, וכן הלאה כשמות משתנים.

name
count
_var
myVar
MY_VAR

הנה כמה דוגמאות של שמות משתנים חוקיים ב-Bash:

והנה כמה

2ndvar (variable name starts with a number)
my var (variable name contains a space)
my-var (variable name contains a hyphen)

# שמות משתנים לא תקינים

עקרונות אלו לשימוש בשמות עוזרים להפוך סקריפטים ב-Bash לנגישים יותר לקריאה ולתחזוקה.

קלט ופלט בסקריפטים ב-Bash

איסוף קלט

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

קריאת הקלט מהמשתמש ואחסונו במשתנה

#!/bin/bash
echo "What's your name?"
read entered_name
echo -e "\nWelcome to bash tutorial" $entered_name

אנו יכולים לקרוא את הקלט מהמשתמש באמצעות הפקודה read.

2. קריאה מקובץ

while read line
do
  echo $line
done < input.txt

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

3. ארגומנטים משורת הפקודה

בסקריפט או פונקציה של Bash, $1 מציין את הארגומנט הראשון שהועבר, $2 מציין את הארגומנט השני שהועבר, וכן הלאה.

#!/bin/bash
echo "Hello, $1!"

סקריפט זה מקבל שם כארגומנט משורת הפקודה ומדפיס ברכה אישית.

סיפקנו את Zaira כארגומנט לסקריפט.

פלט:

הצגת תוצאות

  1. בסעיף זה נדון בכמה שיטות לקבל פלט מהסקריפטים.
echo "Hello, World!"

הדפסה לטרמינל:

פקודה זו מדפיסה את הטקסט "שלום, עולם!" לטרמינל.

echo "This is some text." > output.txt

2. כתיבה לקובץ:

פקודה זו כותבת את הטקסט "זהו טקסט כלשהו." לקובץ בשם output.txt. שימו לב כי האופרטור > מחליף קובץ אם כבר קיימת בו תוכן.

echo "More text." >> output.txt

3. הוספה לקובץ:

זה מוסף את הטקסט "עוד טקסט." לקצה הקבצים output.txt.

ls > files.txt

4. העתקת התוצאות:

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

תלמידים על העתקת התוצאות בפירוט בפרק 8.5.

הצעות מובניות (if/else)

מבנים שמייצרים תוצאות בוליאניות, שהם או אמת או שקר, נקראים תנאים. קיימות דרכים מספרות להערכת תנאים, כולל if, if-else, if-elif-else, והצעות מובניות מונחות.

if [[ condition ]];
then
    statement
elif [[ condition ]]; then
    statement 
else
    do this by default
fi

שיווקסיפס:

שיווקסיפס של הצעות מובניות בבאש

if [ $a -gt 60 -a $b -lt 100 ]

אנחנו יכולים להשתמש במנגנונים הגיוניים כמו והחדש אחד -a ואחד מוליך -o כדי לבצע השוואות שיש להם חשיבות רבה יותר.

ההצעה הזו בודקת אם שני התנאים הם true: a גדול מ 60 וb קטן מ 100.

#!/bin/bash

בואו נראה דוגמה אחת של תוכנית באש השולים if, if-else, וif-elif-else הצעות כדי לקבע האם מספר שנקרא על ידי המשתמש הוא חיובי, שלילי, או אפס:

echo "Please enter a number: "
read num

if [ $num -gt 0 ]; then
  echo "$num is positive"
elif [ $num -lt 0 ]; then
  echo "$num is negative"
else
  echo "$num is zero"
fi

# תוכנית לקבע אם מספר הוא חיובי, שלילי, או אפס

הסקript ראשית מבקש מהמשתמש להזין מספר. אחר כך, הוא משתמש בהצעה if כדי לבדוק אם המספר הוא גדול מ 0. אם כן, הסקript מוציא את המספר הזה כחיובי. אם המספר אינו גדול מ 0, הסקript מתקדם להצעה הבאה, שהיא של if-elif.

פה, הסקript בדוק אם המספר הוא פחות מ 0. אם כן, הסקript מוציא שהמספר הוא שלילי.

לבסוף, אם המספר לא גדול מ 0 ולא פחות מ 0, הסקript משתמש בהצעה else כדי להציע שהמספר הוא אפס.

ראו אותו בפעולה 🚀

הילוך והפילוט בבאש

לולאה חייבת

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

#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
   echo "$i"
  (( i += 1 ))
done

במקרה הבא, (( i += 1 )) הוא המשפט המנצח שמעלה את ערכו של i. הלולאה תרצה בדיוק 10 פעמים.

לולאה על-פי

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

#!/bin/bash

for i in {1..5}
do
    echo $i
done

במקרה הבא, הלולאה תהיה מסובבת 5 פעמים.

הצעות מקטע

case expression in
    pattern1)
        סיטואציית באש משמשת להשוואה של ערך מסוים ביחס לרשימה של תבניות ולהרצת חלק של קוד בהתבסס על התבנית הראשונה שהתאימה. הסינטקס של סיטואציה בבאש הוא כפי שלאחר מכן:
        ;;
    pattern2)
        # קוד לביצוע אם הביטוי מתאים לתבנית1
        ;;
    pattern3)
        # קוד לביצוע אם הביטוי מתאים לתבנית2
        ;;
    *)
        # קוד לביצוע אם הביטוי מתאים לתבנית3
        ;;
esac

# קוד לביצוע אם אף אחת מהתבניות למעלה לא מתאימה לביטוי

כאן, "ביטוי" הוא הערך שרוצים להשוות, ו"תבנית1", "תבנית2", "תבנית3" וכן הלאה הן התבניות שרוצים להשוות אותו בניהן.

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

fruit="apple"

case $fruit in
    "apple")
        echo "This is a red fruit."
        ;;
    "banana")
        echo "This is a yellow fruit."
        ;;
    "orange")
        echo "This is an orange fruit."
        ;;
    *)
        echo "Unknown fruit."
        ;;
esac

בואו נראה דוגמה:

בדוגמה זו, מכיוון שהערך של fruit הוא apple, התבנית הראשונה מתאימה, והבלוק של הקוד שמדגיש This is a red fruit. מופעל. אם הערך של fruit היה banana, התבנית השנייה היתה מתאימה והבלוק של הקוד שמדגיש This is a yellow fruit. היה מופעל, וכך הלאה.

אם הערך של fruit לא מתאים לאף אחת מהתבניות המסוימות, המקרה הרגיל מופעל, שמדגיש Unknown fruit.

חלק 7: ניהול חבילות תוכנה בלינוקס

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

7.1. חבילות וניהול חבילות

מהו חבילה?

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

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

מה ההבדל בין מקור ובינארי?

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

כאשר אתה מוריד חבילה, אתה יכול לקבל את קוד המקור או את הקוד הבינארי. קוד המקור הוא הקוד הנקרא הנוכחי שניתן לקידוד לקוד בינארי. קוד הבינארי הוא הקוד הנקרא הנקרא המקודד שהמחשב יכול להבין.

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

uname -m
ניתן למצוא את ארכיטקטורת המכונה שלך באמצעות הפקודה uname -m.
x86_64

# פלט

תלות חבילות

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

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

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

מנהלי חבילות

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

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

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

ערוצי תוכנה/מאגרי תוכנה

⚠️ ניהול חבילות שונה בין הפצות שונות. כאן, אנו משתמשים באובונטו.

התקנת תוכנה בלינוקס שונה מעט בהשוואה לווינדוס ולמק.

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

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

התהליך הכללי להורדת תוכנה מתוך מאגר נראה כך:

  1. אם נדבר באופן ספציפי על אובונטו,
  2. המדדון נלך באמצעות apt update. (apt מוסבר בחלק הבא).
  3. קובצים/תלות נדרשים על פי המדדון באמצעות apt install
  4. חבילות ותלות מתוקנים מקומית.

תלות וחבילות מעודכנות כאשר נדרש באמצעות apt update ו-apt upgrade

בדיסטרובים מבוססי דביאן, ניתן למצוא את רשימת המאגרים (repositories) ב- /etc/apt/sources.list.

7.2. התקנת חבילה באמצעות שורת פקודה

פקודת apt היא כלי חזק לשורת הפקודה, העובד עם "Advanced Packaging Tool (APT)" של אובונטו.

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

כדי לצפות בלוגים של ההתקנה באמצעות apt, ניתן לצפות בקובץ /var/log/dpkg.log.

הנה כמה משתמשי הפקודה apt:

התקנת חבילות

sudo apt install htop

לדוגמה, כדי להתקין את חבילת htop, ניתן להשתמש בפקודה הבאה:

עדכון אינדקס רשימת החבילות

sudo apt update

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

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

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

sudo apt upgrade

כדי לשדרג את החבילות, ניתן להשתמש בפקודה הבאה:

הסרת חבילות

sudo apt remove htop

כדי להסיר חבילה, דוגמת htop, ניתן להשתמש בפקודה הבאה:

7.3. התקנת חבילה באמצעות שיטה גרפית מתקדמת – Synaptic

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

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

שום דבר לא יוריד את התשואות שלך מאשר יכולות לעשות השירותים שלך בצורה מקצועית ובערך.

7.4. התקנת חבילות שהורדו מאתר באינטרנט

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

cd directory
sudo dpkg -i package_name.deb

שימוש בdpkgלהתקנת חבילות:dpkg הוא כלי שורת פקודה המשמש להתקנת חבילות. כדי להתקין חבילה עם dpkg, פתחו את המסוף והקלידו את הבא:

שים לב: החליפו "directory" בתיקייה בה נמצאת החבילה ו"package_name" בשם הקובץ של החבילה.

לחלופין, ניתן ללחוץ עם היד הימנית, לבחור "לפתוח עם יישום אחר" ולבחור יישום עם ממשק גרפי.

💡 טיפ: באובונטו, ניתן לראות רשימה של החבילות המותקנות עם dpkg --list.

חלק 8: נושאים לינוקס מתקדמים

8.1. ניהול משתמשים

יכולים להיות משתמשים מרובים עם רמות גישה שונות במערכת. בלינוקס, המשתמש root יש את הרמת הגישה הגבוהה ביותר ויכול לבצע כל פעולה על המערכת. משתמשים רגילים ישנם גישה מוגבלת ויכולים רק לבצע פעולות שניתנה להם הרשות לבצע.

מהי משתמש?

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

אנשים מזהים מ

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

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

  1. קיימות שלושה סוגים עיקריים של חשבונות משתמשים:
  2. משתמש ראשי: משתמש הראשי מסוגל לגשת למערכת ללא הגבלות. שם המשתמש הראשי הוא root. יש לו מזהה משתמש (UID) של 0.
  3. משתמש מערכת: משתמש המערכת כולל חשבונות משתמש שמשמשים להפעלת שירותים מערכתיים. חשבונות אלו משמשים להפעלת שירותים מערכתיים ואין להם מטרה לשיתוף פעולה אנושית.

משתמש רגיל: משתמשים רגילים הם משתמשים אנושיים המשכילים לגשת למערכת.

id
uid=1000(john) gid=1000(john) groups=1000(john),4(adm),24(cdrom),27(sudo),30(dip)... output truncated

פקודת id מציגה את מזהה המשתמש ומזהה הקבוצה של המשתמש הנוכחי.

id username

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

ps -u


לצפייה במידע קשרת משתמשים עבור תהליכים, השתמשו בפקודת ps עם הסימן -u.
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  16968  3920 ?        Ss   18:45   0:00 /sbin/init splash
root         2  0.0  0.0      0     0 ?        S    18:45   0:00 [kthreadd]

# הפלט

לשמורת מחדל, מערכות משתמשות בקובץ /etc/passwd כדי לאחסן מידע על משתמשים.

root:x:0:0:root:/root:/bin/bash

הנה שורה מהקובץ /etc/passwd:

  1. הקובץ /etc/passwd מכיל את המידע הבא על כל משתמש:
  2. שם משתמש: root – שם המשתמש של חשבון המשתמש.
  3. סיסמה: x – הסיסמה בצורה מוצפנת עבור חשבון המשתמש שנמצאת בקובץ /etc/shadow בגלל הגנת המידע.
  4. ID משתמש (UID): 0 – המזהה המספרי היחיד לחשבון המשתמש.
  5. ID קבוצה (GID): 0 – המזהה העיקרי של קבוצת המשתמש.
  6. מידע משתמש: root – השם האמיתי של חשבון המשתמש.
  7. ספריית הבית: /root – ספריית הבית עבור חשבון המשתמש.

Shell: /bin/bash – הקושחה המוגדרת כברירת מחדל עבור חשבון המשתמש. משתמש מערכת עשוי להשתמש ב-/sbin/nologin אם אין ניתובים אינטראקטיביים שמורים עבור משתמש זה.

מהו קבוצה?

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

ברירת המחדל, מידע על הקבוצות מאוחסן בקובץ /etc/group.

adm:x:4:syslog,john

הנה ערך מתוך קובץ /etc/group:

  1. הנה הפירוט של השדות בערך הנתון:
  2. שם הקבוצה: adm – שם הקבוצה.
  3. סיסמה: x – הסיסמה של הקבוצה מאוחסנת בקובץ /etc/gshadow מטעמי אבטחה. הסיסמה אופציונלית ומופיעה ריקה אם אינה מוגדרת.
  4. זיהוי קבוצה (GID): 4 – המזהה המספרי היחודי של הקבוצה.

חברי הקבוצה: syslog, john – רשימת שמות המשתמשים המהווים חברי הקבוצה. במקרה זה, לקבוצה adm יש שני חברים: syslog ו־john.

ברשומה ספציפית זו, שם הקבוצה הוא adm, מזהה הקבוצה הוא 4, ולקבוצה יש שני חברים: syslog ו־john. שדה הסיסמה נקבע בדרך כלל ל־x כדי לציין שהסיסמה של הקבוצה מאוחסנת בקובץ /etc/gshadow.

  • הקבוצות מחולקות גם לקבוצות 'ראשיות' ו'תומכות'.
  • קבוצת הראשית: לכל משתמש מוקצתת קבוצת ראשית אחת כברירת מחדל. קבוצה זו כללית משם כמו המשתמש ונוצרת כאשר חשבון המשתמש נוצר. קבצים ותיקיות שנוצרים על ידי המשתמש בדרך כלל שייכים לקבוצה ראשית זו.

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

שליטה בגישה: מציאת והבנת הרשאות קובץ

בעלות קובץ ניתן לראות באמצעות הפקודה ls -l. העמודה הראשונה בפלט של הפקודה ls -l מציגה את ההרשאות של הקובץ. עמודות אחרות מציגות את בעל הקובץ ואת הקבוצה שבה הקובץ שייך.

נבחן בקרוב את העמודה מצב:

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

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

💡טיפ: ביטול תיקייה ניתן לראות בעזרת הפקודה ls -ld.

איך לקרוא הרשאות סימוניות או הרשאות rwx

  • הייצוג rwx ידוע כייצוג סימוני של הרשאות. במערך הרשאות,
  • קרא. זה מודגש בתוות הראשונה של המשוואה.
  • כתב מייצג כתיבה. זה מודגש בתוות השניה של המשוואה.

מיקום מייצג הרצאה. זה מודגש בתוות השלישית של המשוואה.

קרא:

לקבצים רגילים, הרשאות לקריאה מאפשרות לקבץ להיות פתוח ולהיקרא, אך לא מאפשרות למשתמשים לשנות אותו.

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

כתב:

כשלקבצים יש הרשאות לכתיבה, המשתמש יכול לשנות (לערוך, למחוק) את הקבץ ולשמור עליו.

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

דוגמאות של הרשאות בלינUX

  • עכשיו שאנחנו יודעים איך לקרוא להרשאות, בואו נראה כמה דוגמאות.
  • קוד: -rw-rw-r–: קובץ שנפתח לשינוי על ידי בעליו והקבוצה אבל לא על ידי אחרים.

קוד: drwxrwx—: תיקייה שניתן לשנותה על ידי בעליה והקבוצה.

הרצה:

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

איך לשנות בעלות והרשאות קבצים בלינוקס באמצעות chmod ו-chown

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

chmod permissions filename

תחביר שלchmod:

  • שם,
  • ההרשאות יכולות להיות קריאה, כתיבה, הרצה או שילוב שלהן.

שם_הקובץ הוא שם הקובץ שלו צריך לשנות את ההרשאות. זה גם יכול להיות רשימה של קבצים כדי לשנות הרשאות בקנה מידה.

  1. נ
  2. מצב סמלי: שיטה זו משתמשת בסמלים כמו u, g, o כדי לייצג משתמשים, קבוצות ואחרים. הרשאות מיוצגות כ-r, w, x לקריאה, כתיבה וביצוע, בהתאמה. ניתן לשנות הרשאות באמצעות +, – ו=.

מצב אבסולוטי: שיטה זו מייצגת הרשאות כמספרים אוקטליים בעלי 3 ספרות בטווח 0-7.

עכשיו, נראה אותן בפרט.

כיצד לשנות הרשאות באמצעות מצב סמלי

הטבלה למטה מסכמת את ייצוג המשתמשים: ייצוג משתמש
u תיאור
g משתמש/בעלים
o קבוצה

אחרים

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

מוגדרת הרשאה אם לא נמצאה קודם. גם משתלטת על הרשאות אם נתגברו קודם.

דוגמה:

נניח שיש לי סקripט ואני רוצה להפוך אותו לנייד עבור בעלי הקובץ zaira.

הרשאות הנוכחיות של הקובץ הן בדרך הבאה:

בואו נפרד את הרשאות בדרך הבאה:

chmod u+x mymotd.sh

כדי להוסיף את האפשרויות לביצוע (x) לבעל (u) באופן סימבולי ניתן להשתמש בפקודה הבאה:

היצאה:

עכשיו, אנחנו יכולים לראות שנוסדו את האפשרויות לביצוע עבור בעל zaira.

  • דוגמאות נוספות לשינוי רשאות באופן סימבולי:
  • הסרת קריאה וכתיבה לצוות ולאחרים: chmod go-rw.
  • הסרת קריאה לאחרים: chmod o-r.
העלת כתיבה לצוות וחיסול הרשאות הקיימות: chmod g=w.

איך לשנות הרשאות באופן מושלם

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

הטבלה הבאה מראה איך אנחנו יכולים להעניק הרשאות רלוונטיות: הרשאה
לספק הרשאה קריאה
הוסף 4 כתיבה
הוסף 2 ביצוע

הוסף 1

הרשאות יכולות להוצע באמצעות הסרה. הטבלה הבאה מראה איך נוכל להסיר הרשאות רלוונטיות: הרשאה
לספק הרשאה קריאה
הסר 4 כתיבה
הסר 2 ביצוע

הסר 1

  • דוגמה:

הגישה read (הוסף 4) לuser, read (הוסף 4) וexecute (הוסף 1) לקבוצה, ורק execute (הוסף 1) לאחרים.

chmod 451 file-name

זו הדרך בה ביצענו את החישוב:

  • שימו לב שזה אותו דבר כמו r--r-x--x.

הסר את הזכויות לביצוע מאחרים וקבוצה.

  • כדי להסיר את הזכויות לביצוע מאחרים וקבוצה, הסר 1 מחלק הביצוע של השתיים האחרונות.

נקבע עבור user יכולת קריאה (read), כתיבה (write) וביצוע (execute), עבור group יכולת קריאה (read) וביצוע (execute), ורק קריאה (read) עבור האחרים.

זה יהיה אותו הדבר כמו rwxr-xr--.

איך לשנות בעלות באמצעות הפקודה chown

בשלב הבא, נלמד כיצד לשנות את בעלות הקובץ. ניתן לשנות את בעלות הקובץ או התיקייה באמצעות הפקודה chown. במקרים מסוימים, שינוי בעלות דורש יעוד הרשאות sudo.

chown user filename
תחביר של chown:

איך לשנות את בעלות המשתמש באמצעות chown

בואו נעביר את בעלות הקובץ ממשתמש zaira למשתמש news.

chown news mymotd.sh

פקודה לשנות בעלות: sudo chown news mymotd.sh.

פלט:

איך לשנות בעלות המשתמש והקבוצה בו זמנית

chown user:group filename
ניתן גם להשתמש ב-chown כדי לשנות בעלות המשתמש והקבוצה בו זמנית.

איך לשנות בעלות ספריית התיקיות

chown -R admin /opt/script
ניתן לשנות בעלות באופן התפשט עבור תוכן בתיקייה. הדוגמה הבאה משנה את בעלות התיקייה /opt/script כדי לאפשר למשתמש admin.

איך לשנות בעלות הקבוצה

chown :admins /opt/script
במקרה שרק צריך לשנות את בעלות הקבוצה, ניתן להשתמש ב-chown על ידי הצבת הקוד התחתון : לפני שם הקבוצה

איך להחליף בין משת

[user01@host ~]$ su user02
Password:
[user02@host ~]$
ניתן להחליף בין משתמשים באמצעות פקודת su.

כיצד לקבל גישה כמשתמש ראשי

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

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

[user01@host ~]$ su
Password:
[root@host ~]אם אתה משאיר את שם המשתמש בריק, פקודת su מחליפה לחשבון משתמש שורש כברירת מחדל.

#

גרסה נוספת של פקודת su היא su -. פקודת su מחליפה לחשבון משתמש שורש אך לא משנה את משתני הסביבה. פקודת su - מחליפה לחשבון משתמש שורש ומשנה את משתני הסביבה לאלה של המשתמש המטרה.

הרצת פקודות עם sudo

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

הרצת פקודות עם sudo היא אפשרות מוגן יותר מאשר להריץ את הפקודות כמשתמש root. זה כי רק סט ספציפי של משתמשים יכולים לקבל הרשאה להריץ פקודות עם sudo. זה מוגדר בקובץ /etc/sudoers.

גם, sudo מתעד את כל הפעלות המבצעות בעזרתו, מספק שרשרת בדיקה של מי שהבצע את הפעלות האלה ומתי.

cat /var/log/auth.log | grep sudo

ב Ubuntu, ניתן למצוא את המסמכים הבדיקה כאן:

user01 is not in the sudoers file.  This incident will be reported.

עבור משתמש שאין לו גישה ל sudo, זה מתויג במסמכים וגורם להציע מסר כמו זה:

ניהול חשבונות משתמשים מקומיים

יצירת משתמשים מן השורץ הצעדי

sudo useradd username

הפקת הפעלה הבאה עבור יצירת משתמש חדש היא:

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

שינוי משתמשים קיימים

הפקת usermod משמשת לשינוי משתמשים קיימים. הנה כמה מהאפשרויות המקובלות שמשמשות בין הפקת usermod:

  1. הנה כמה דוגמאות לפקת usermod בLinux:
  2. שינוי שם הכניסה של משתמש:
  3. שינוי היוזר הבית של משתמש:
  4. הוספת משתמש לקבוצה מוסף:
  5. שינוי השל של משתמש:
  6. נעצרת חשבון משתמש:
  7. פתירת חשבון משתמש:
  8. הגדרת תאריך קיימות לחשבון משתמש:
  9. שינוי תעודת הזהות המרכזית של משתמש (UID):
  10. שינוי קבוצת המשתמש העיקרית:
הסרת משתמש מקבוצת מועדפת:

מחיקת משתמשים

  • הפקט userdel משמש למחיקת חשבון משתמש וקבצים הקשורים לו מהמערכת.
  • sudo userdel שם_משתמש: מסיר את הפרטים של המשתמש מ /etc/passwd אך שומר על המחשבה האישית שלו.
הפקט sudo userdel -r שם_משתמש מסיר את הפרטים של המשתמש מ /etc/passwd וגם מוצא את המחשבה האישית שלו.

שינוי סיסמאות משתמשים

  • הפקט passwd משמש כדי לשנות סיסמאות משתמש.

sudo passwd שם_משתמש: מעדיף את הסיסמא המקורית או משנה את הסיסמא הקיימת של שם_משתמש. הוא גם משמש כדי לשנות את הסיסמא של המשתמש שמחובר עכשיו.

8.2 התחברות לשרתים רחוקים דרך SSH

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

מהי פרוטוקול SSH?

SSH ניתן להפרש כ Secure Shell. זהו פרוטוקול רשת קריפטוגרפי שמאפשר תקשורת בטוחה בין שני מערכות.

הפורט ברירת המחדל ל-SH הוא 22.

  • שני המשתתפים בתקשורת דרך SSH הם:
  • השרת: המכשיר שאליו אתה רוצה לגשת.

הלקוח: המערכת שאתה משתמש בה כדי לגשת לשרת.

  1. התחברות לשרת עוקבת אחרי השלבים הבאים:
  2. התחלת החיבור: הלקוח שולח בקשת חיבור לשרת.
  3. חלוקת מפתחות: השרת שולח את המפתח הציבורי שלו ללקוח. שניהם מסכימים על שיטות ההצפנה שימושיות.
  4. יצירת מפתח ישיבה: הלקוח
  5. אמת המשתמש: המשתמש מתחבר לשרת באמצעות סיסמה, מפתח פרטי, או שיטה אחרת.

תקשורת בטוחה: אחרי ההתחברות, המשתמש והשרת מתקשרים באמצעות הצפנה.

איך להתחבר לשרת רחוק בעזרת SSH?

הפקת הssh היא כלי מובנה בלינוקס והמובנה הברירי בנוסף. הוא מאפשר לנו לגיש לשרתים בקלות ובבטיחות.

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

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

מספר הפורט שיש לך גישה אליו בשרת.

ssh username@server_ip

הסינTAX הבסיסי של הפקת הssh הוא:

ssh [email protected]

לדוגמה, אם שם המשתמש שלך הוא john וכתובת השרת היא 192.168.1.10, הפקת המספר תהיה:

[email protected]'s password: 
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-70-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Fri Jun  5 10:17:32 UTC 2024

  System load:  0.08               Processes:           122
  Usage of /:   12.3% of 19.56GB   Users logged in:     1
  Memory usage: 53%                IP address for eth0: 192.168.1.10
  Swap usage:   0%

Last login: Fri Jun  5 09:34:56 2024 from 192.168.1.2
john@hostname:~$ אחר כך, תיעד להזין את הסיסמה

# התחיל להזין פקודות

עכשיו אתה יכול להריץ את הפקודות הרלוונטיות על השרת 192.168.1.10.

ssh -p port_number username@server_ip

⚠️ הפורט ברירת המחדל ל-ssh הוא 22 אבל הוא גם פגיע, כיוון שההאקרים ינסו כנראה קודם כאן. השרת שלך יכול לחשוף פורט אחר ולשתף את הגישה עםך. כדי להתחבר לפורט שונה, השתמש בסימן -p.

8.3. ניתוח מתקדם של רישומים וניתוחם

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

הנה דוגמה של קובץ רישום:
2024-04-25 09:00:00 INFO Startup: Application starting
2024-04-25 09:01:00 INFO Config: Configuration loaded successfully
2024-04-25 09:02:00 DEBUG Database: Database connection established
2024-04-25 09:03:00 INFO User: New user registered (UserID: 1001)
2024-04-25 09:04:00 WARN Security: Attempted login with incorrect credentials (UserID: 1001)
2024-04-25 09:05:00 ERROR Network: Network timeout on request (ReqID: 456)
2024-04-25 09:06:00 INFO Email: Notification email sent (UserID: 1001)
2024-04-25 09:07:00 DEBUG API: API call with response time over threshold (Duration: 350ms)
2024-04-25 09:08:00 INFO Session: User session ended (UserID: 1001)
2024-04-25 09:09:00 INFO Shutdown: Application shutdown initiated

# קובץ רישום מדוגמה

  • קובץ רישום בדרך כלל מכיל את העמודות הבאים:
  • תאריך ושעה: התאריך והשעה בה קרה האירוע.
  • רמת הרישום: החומרה של האירוע (INFO, DEBUG, WARN, ERROR).
  • מרכיב: המרכיב של המערכת שיצר את האירוע (Startup, Config, Database, User,
  • מסר: תיאור של האירוע שהתרחש

מידע נוסף: מידע נוסף שקשור לאירוע.

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

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

המידע המסווה יכול גם להיות שימושי ליצירת התרעות, דוחות ולוגים במדף.

בחלק זה, תחקור טכניקות ספציפיות לפרשת מאגרי הלוג בלינUX.

פרשת טקסט באמצעות grep

גrep הוא יישום באשר של באש. הוא אומר "גלובלי תווית רגולרית לחדש". גrep משמש למציאת משתנים בקבצים.

  1. פה כמה שימושים רגילים של grep:
  2. פקודה זו מחפשת את "search_string" בקובץ המקורי שם_הקובץ.
  3. פקודה זו מחפשת את "search_string" בכל הקבצים בתיקייה המצויה ובתתי התיקיות שלה.
  4. פקודה זו מבצעת חיפוש לא רגיש לאותיות גדולות/קטנות למחרוזת "search_string" בקובץ המקורי שם_הקובץ.
  5. הפקטיבי הזה מראה את מספרי השורות בצעד עם השורות המתאמים בקובץ הנקרא filename.
  6. הפקטיבי הזה מספר את מספר השורות שיש בהם "search_string" בקובץ הנקרא filename.
  7. הפקודה הזו מציגה את כל השורות שאינן מכילות "search_string" בקובץ בשם filename.
  8. הפקודה הזו מחפשת את המילה השלמה "word" בקובץ בשם filename.

הפקודה הזו מאפשרת שימוש בביטויים רגולריים מורחבים עבור התאמה מפורטת יותר של דפוסים בקובץ בשם filename.

💡 טיפ: אם ישנם מספר קבצים בתיקייה, תוכל להשתמש בפקודה הבאה כדי למצוא את רשימת הקבצים המכילים את המחרוזות המבוקשות.
grep -l "String to Match" /path/to/directory

# מצא את רשימת הקבצים המכילים את המחרוזות המבוקשות

טקסט המיצוא בשימוש sed

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

סימנטיקה בסיסית שלsed:

sed [options] 'command' file_name

הסימנטיקה הבסיסית של sed היא כך:

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

sedשימוש:

1. החלפה:

sed 's/old-text/new-text/' filename

הסימן s משמש להחלפת טקסט. הטקסט הישן old-text מוחלף ב- new-text:

sed 's/error/warning/' system.log

לדוגמה, כדי לשנות את כל המופעים של "error" ל- "warning" בקובץ היומן system.log:

2. הדפסת שורות המכילות תבנית ספציפית:

sed -n '/pattern/p' filename

שימוש ב- sed כדי לסנן ולהציג שורות שמתאימות לתבנית ספציפית:

sed -n '/ERROR/p' system.log

לדוגמה, כדי למצוא כל השורות המכילות "ERROR":

3. מחיקת שורות המכילות תבנית ספציפית:

sed '/pattern/d' filename

ניתן למחוק שורות מהפלט שמתאימות לתבנית ספציפית:

sed '/DEBUG/d' system.log

לדוגמה, כדי להסיר את כל השורות המכילות "DEBUG":

4. היציאת שדות ספציפיים משורת היומן:

sed -n 's/^\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\).*/\1/p' system.log

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

עיבוד טקסט עם awk

awk יש לו את היכולת לחלק בקלות כל שורה לשדות. הוא מתאים במיוחד לעיבוד טקסט מסודר כמו קובצי לוגים.

תחביר בסיסי שלawk

awk 'pattern { action }' file_name

התחביר הבסיסי של awk הוא:

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

2024-04-25 09:00:00 INFO Startup: Application starting
2024-04-25 09:01:00 INFO Config: Configuration loaded successfully
2024-04-25 09:02:00 INFO Database: Database connection established
2024-04-25 09:03:00 INFO User: New user registered (UserID: 1001)
2024-04-25 09:04:00 INFO Security: Attempted login with incorrect credentials (UserID: 1001)
2024-04-25 09:05:00 INFO Network: Network timeout on request (ReqID: 456)
2024-04-25 09:06:00 INFO Email: Notification email sent (UserID: 1001)
2024-04-25 09:07:00 INFO API: API call with response time over threshold (Duration: 350ms)
2024-04-25 09:08:00 INFO Session: User session ended (UserID: 1001)
2024-04-25 09:09:00 INFO Shutdown: Application shutdown initiated
  INFO
  • בדוגמאות הקרובות, תשתמש בקובץ הלוג הזה כדוגמה:

גישה לעמודות באמצעותawk

zaira@zaira-ThinkPad:~$ awk '{ print $1 }' sample.log
השדות ב- awk (מופרדים ברווחים באופן משתנה) ניתן לגשת אליהם באמצעות $1, $2, $3, וכן הלאה.
2024-04-25
2024-04-25
2024-04-25
2024-04-25
2024-04-25
2024-04-25
2024-04-25
2024-04-25
2024-04-25
2024-04-25

zaira@zaira-ThinkPad:~$ awk '{ print $2 }' sample.log
# פלט
09:00:00
09:01:00
09:02:00
09:03:00
09:04:00
09:05:00
09:06:00
09:07:00
09:08:00
09:09:00
  • # פלט
awk '/ERROR/ { print $0 }' logfile.log

הדפסת שורות הכוללות תבנית ספציפית (לדוגמה, ERROR)
2024-04-25 09:05:00 ERROR Network: Network timeout on request (ReqID: 456)

# פלט

  • זה מדפיס את כל השורות שכוללות "ERROR".
awk '{ print $1, $2 }' logfile.log
חלץ את השדה הראשון (תאריך ושעה)
2024-04-25 09:00:00
2024-04-25 09:01:00
2024-04-25 09:02:00
2024-04-25 09:03:00
2024-04-25 09:04:00
2024-04-25 09:05:00
2024-04-25 09:06:00
2024-04-25 09:07:00
2024-04-25 09:08:007
2024-04-25 09:09:00

# פלט

  • זה יחליץ את שתי השדות הראשונות מכל שורה, שבמקרה הזה יהיו התאריך והשעה.
awk '{ count[$3]++ } END { for (level in count) print level, count[level] }' logfile.log

סיכום הופעות של כל רמת הלוג
 1
WARN 1
ERROR 1
DEBUG 2
INFO 6

# פלט

  • הפלט יהיה סיכום של מספר הופעות של כל רמת יומן.
awk '{ $3="INFO"; print }' sample.log

סינון שדות מסוימים (לדוגמה, שבהם השדה השלישי הוא INFO)
2024-04-25 09:00:00 INFO Startup: Application starting
2024-04-25 09:01:00 INFO Config: Configuration loaded successfully
2024-04-25 09:02:00 INFO Database: Database connection established
2024-04-25 09:03:00 INFO User: New user registered (UserID: 1001)
2024-04-25 09:04:00 INFO Security: Attempted login with incorrect credentials (UserID: 1001)
2024-04-25 09:05:00 INFO Network: Network timeout on request (ReqID: 456)
2024-04-25 09:06:00 INFO Email: Notification email sent (UserID: 1001)
2024-04-25 09:07:00 INFO API: API call with response time over threshold (Duration: 350ms)
2024-04-25 09:08:00 INFO Session: User session ended (UserID: 1001)
2024-04-25 09:09:00 INFO Shutdown: Application shutdown initiated
  INFO

# פלט

פקודה זו תחליף את כל השורות בהן השדה השלישי הוא "INFO".

💡 עצה: המפריד המוגדר כברירת מחדל ב־awk הוא רווח. אם קובץ היומן שלך משתמש במפריד אחר, אתה יכול לציין אותו באמצעות האפשרות -F. לדוגמה, אם קובץ היומן שלך משתמש בנקודתיים כמפריד, תוכל להשתמש ב־awk -F: '{ print $1 }' logfile.log כדי לחלץ את השדה הראשון.

פירוש קבצי יומן עם cut

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

cut [options] [file]

התחביר הבסיסי של פקודת cut הוא:

  • כמה אפשרויות נפוצות לפקודת cut:
  • -d : מציין מפריד שימש כמפריד שדות.
  • -f : בוחר את השדות שיצוגם נבחר.

זהו התרגום העברי:

-c : מציין עמדות תווים.

cut -d ' ' -f 1 logfile.log

למשל, הפקודה שלהלן תחלק את השדה הראשון (מופרד ברווח) מכל שורה בקובץ היומן:

דוגמאות שימוש בcutלניתוח יומנים

2024-04-25 08:23:01 INFO 192.168.1.10 User logged in successfully.
2024-04-25 08:24:15 WARNING 192.168.1.10 Disk usage exceeds 90%.
2024-04-25 08:25:02 ERROR 10.0.0.5 Connection timed out.
...

נניח שיש לך קובץ יומן שנבנה כך, שהשדות מופרדים ברווח:

  1. cut יכול להשתמש בדרך הבאה:
cut -d ' ' -f 2 system.log

לחלץ את הזמן מכל רשומת היומן:
08:23:01
08:24:15
08:25:02
...

# פלט

  1. פקודה זו משתמשת ברווח כמחרוזת ובוחרת בשדה השני, שהוא הרכיב הזמן של כל רשומת היומן.
cut -d ' ' -f 4 system.log

לחלץ את כתובות ה-IP מהיומנים:
192.168.1.10
192.168.1.10
10.0.0.5

# פלט

  1. פקודה זו מחלקת את השדה הרביעי, שהוא כתובת ה-IP מכל רשומת היומן.
cut -d ' ' -f 3 system.log

לחלץ רמות יומן (INFO, WARNING, ERROR):
INFO
WARNING
ERROR

# פלט

  1. זה מחלק את השדה השלישי שכולל את רמת היומן.

שילובcutעם פקודות אחרות:

grep "ERROR" system.log | cut -d ' ' -f 1,2 

הפלט של פקודות אחרות יכול להשתמש בפייפליין לפקודת cut. נניח שאתה רוצה לסנן יומנים לפני חיתוך. ניתן להשתמש ב-grep כדי לחלץ שורות המכילות "ERROR" ולאחר מכן להשתמש ב-cut כדי לקבל מידע ספציפי מאותן שורות:
2024-04-25 08:25:02

# פלט

  1. הפקודה הזו תסנן תוכן שמכיל "ERROR", ואז תחלץ את התאריך והשעה מהשורות הללו.

חילוץ שדות מרובים:

cut -d ' ' -f 1,2,3 system.log` 

אפשר לחלץ שדות מרובים כאשר מציין טווח או רשימה מופרדת בפסיקים של שדות:
2024-04-25 08:23:01 INFO
2024-04-25 08:24:15 WARNING
2024-04-25 08:25:02 ERROR
...

# פלט

הפקודה לעיל תחלץ את שלושת השדות הראשונים מכל רשומת יומן שהם תאריך, שעה ורמת יומן.

פענוח קבצי לוג עם sort ו־uniq

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

התחביר הבסיסי של sort

sort [options] [file]

הפקודה sort מארגנת שורות של טקסט לפי סדר אלפביתי או מספרי.

  • כמה אפשרויות מרכזיות לפקודת sort:
  • -n: ממיין את הקובץ בהנחה שהתוכן הוא מספרי.
  • -r: מהפוך את סדר המיון.
  • -k: מציין מפתח או מספר עמודה למיון על פיו.

-u: ממיין ומסיר שורות כפולות.

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

uniq [options] [input_file] [output_file]

הסינTAX של uniq הוא:

  • כמה אפשרויות מפתח עבור הפקט uniq הן:
  • -c: מקדם כל שורה במספר ההופעות שלה.
  • -d: מפרסם רק שורות הגיוניות.

-u: מפרסם רק שורות ייחודיות.

דוגמאות לשימוש ב sort ו uniq ביחד עבור פירוש דיוקים

2024-04-25 INFO User logged in successfully.
2024-04-25 WARNING Disk usage exceeds 90%.
2024-04-26 ERROR Connection timed out.
2024-04-25 INFO User logged in successfully.
2024-04-26 INFO Scheduled maintenance.
2024-04-26 ERROR Connection timed out.
  1. נניח שאלה הבאה בדיוקים לדוגמאות האלה:
sort system.log

סידור של דיוקים על פי תאריך:
2024-04-25 INFO User logged in successfully.
2024-04-25 INFO User logged in successfully.
2024-04-25 WARNING Disk usage exceeds 90%.
2024-04-26 ERROR Connection timed out.
2024-04-26 ERROR Connection timed out.
2024-04-26 INFO Scheduled maintenance.

# יוצא

  1. זה מסorts את הדיוקים אלפביתית, שבעיקרון מסorts אותם על פי תאריך אם התאריך הוא השדה הראשון.
sort system.log | uniq

סידור והסרה של השורות המוחזרות:
2024-04-25 INFO User logged in successfully.
2024-04-25 WARNING Disk usage exceeds 90%.
2024-04-26 ERROR Connection timed out.
2024-04-26 INFO Scheduled maintenance.

# יוצא

  1. הפקט זה מסorts את הקבצים הדיוקים ושולח אותם ל uniq, מסרב להציג שורות מוחזרות.
sort system.log | uniq -c

ספירת ההופעות של כל שורה:
2 2024-04-25 INFO User logged in successfully.
1 2024-04-25 WARNING Disk usage exceeds 90%.
2 2024-04-26 ERROR Connection timed out.
1 2024-04-26 INFO Scheduled maintenance.

# יוצא

  1. סורס את הדיוקים הדיוקים ואחראי אליו הופך או
sort system.log | uniq -u

זיהוי רשומות לוג ייחודיות:

2024-04-25 WARNING Disk usage exceeds 90%.
2024-04-26 INFO Scheduled maintenance.

# פלט

  1. פקודה זו מציגה שורות שהן ייחודיות.
sort -k2 system.log

מיון לפי רמת הלוג:
2024-04-26 ERROR Connection timed out.
2024-04-26 ERROR Connection timed out.
2024-04-25 INFO User logged in successfully.
2024-04-25 INFO User logged in successfully.
2024-04-26 INFO Scheduled maintenance.
2024-04-25 WARNING Disk usage exceeds 90%.

# פלט

ממיין את הרשומות בהתבסס על השדה השני, שהוא רמת הלוג.

8.4. ניהול תהליכים בלינוקס באמצעות שורת פקודה

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

תכונות כגון בעלות, מאפייני אבטחה ושימוש במשאבים.

  • לתהליך יש גם סביבה שמורכבת מ:
  • משתנים מקומיים וגלובליים
  • ההקשר לתזמון הנוכחי

משאבי מערכת שהוקצו, כמו יציאות רשת או מזהי קבצים.

כשאתה מפעיל את הפקודה ls -l, המערכת הפעלה יוצרת תהליך חדש כדי לבצע את הפקודה. התהליך כולל מזהה, מצב ורץ עד שהפקודה מושלמת.

הבנת יצירת תהליכים ומחזור חי שלהם

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

לתהליך systemd יש מספר תהליך (PID) של 1 והוא אחראי להתחלת המערכת, התחלת וניהול של תהליכים אחרים וניהול שרותי המערכת. כל התהליכים האחרים במערכת הם צאצאים של systemd.

תהליך הורה משכפל את מרחב הכתובת שלו (fork) כדי ליצור מבנה תהליך חדש (ילד). לכל תהליך חדש מוקצה מספר תהליך ייחודי (PID) למטרות עיקבה ובטיחות. ה-PID ומספר התהליך של הורה (PPID) הם חלק מהסביבה של התהליך החדש. כל תהליך יכול ליצור תהליך ילד.

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

בדרך כלל, תהליך הורה ישן בעוד תהליך הילד פועל, ומכין בקשה (wait) להיות מודע כאשר הילד מסיים.

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

הבנת מצב

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

התהליכים במערכת לינוקס יכולים להיות באחד מהמצבים הבאים: מצב
תיאור (חדש)
מצב ההתחלה כאשר תהליך נוצר באמצעות שיגור קריאה מערכתי של fork. (מוכן לריצה) (R)
התהליך מוכן לריצה ומחכה לתזמון על מעבדת CPU. (בריצה) (משתמש) (R)
התהליך מבצע במצב משתמש, רצה יישומי משתמשים. (בריצה) (ליבה) (R)
התהליך מבצע במצב ליבה, מתמודד עם שיגורי מערכת והפרעות חומרה. (ישן) (S)
התהליך מחכה לאירוע (לדוגמה, פעולת I/O) להשלים וניתן להעירו בקלות. (ישן) (לא ניתן להפריע) (D)
התהליך במצב ישון לא ניתן להפריע, מחכה לתנאי מסויים (בדרך כלל I/O) להשלים ולא ניתן להפריע על ידי אותות. (ישן) (ישן דיסק) (K)
התהליך מחכה לפעולות I/O של דיסק להשלים. (ישן) (לא עוסק) (I)
התהליך לא עוסק, לא עצר (T)
ההרצה של התהליך הופסקה, בדרך כלל באמצעות אות, וניתן להמשיך אותה מאוחר יותר. זומבי (Z)

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

התהליכים מעברים בין המצבים הללו בדרכים הבאות: מעבר
תיאור Fork
יוצר תהליך חדש מתהליך הורה, עובר מהמצב (חדש) למצב פועל (מוכן) (R). תזמון
מתזמן מבחר תהליך פועל, מעביר אותו למצב פועל (משתמש) או פועל (מערכת). הרצה
התהליך עובר ממצב פועל (מוכן) (R) למצב פועל (מערכת) (R) כאשר מתוזמן להרצה. ניכוס או תזמון מחדש
ניתן לנכוס או לתזמן מחדש את התהליך, מחזיר אותו למצב פועל (מוכן) (R). קריאת מערכת
התהליך עושה קריאת מערכת, עובר ממצב פועל (משתמש) (R) למצב פועל (מערכת) (R). חזרה
התהליך משלים קריאת מערכת וחוזר למצב פועל (משתמש) (R). חיכה
התהליך מחכה לאירוע, עובר ממצב פועל (מערכת) (R) לאחד ממצבי השינה (S, D, K או I). אירוע או אות
התהליך מתעורר על ידי אירוע או אות, מעביר אותו ממצב ״שינה״ חזרה למצב Runnable (מוכן) (R). השהייה
התהליך מושהה, במעבר ממצב Running (kernel) או Runnable (מוכן) למצב Stopped (T). המשך
התהליך מומשך, במעבר ממצב Stopped (T) חזרה למצב Runnable (מוכן) (R). יציאה
התהליך מסיים, במעבר ממצב Running (user) או Running (kernel) למצב Zombie (Z). לקצוץ

התהליך הורץ קורא את מצב היציאה של התהליך הזומבי, מסיר אותו מטבלת התהליכים.

כיצד להציג תהליכים

zaira@zaira:~$ ps aux
ניתן להשתמש בפקודת ps יחד עם שילוב של אפשרויות כדי להציג תהליכים במערכת Linux. הפקודה ps משמשת להצגת מידע על מבחר של תהליכים פעילים. לדוגמה, ps aux מציג את כל התהליכים שרצים במערכת.
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0 168140 11352 ?        Ss   May21   0:18 /sbin/init splash
root           2  0.0  0.0      0     0 ?        S    May21   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   May21   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   May21   0:00 [rcu_par_gp]
root           5  0.0  0.0      0     0 ?        I<   May21   0:00 [slub_flushwq]
root           6  0.0  0.0      0     0 ?        I<   May21   0:00 [netns]
root          11  0.0  0.0      0     0 ?        I<   May21   0:00 [mm_percpu_wq]
root          12  0.0  0.0      0     0 ?        I    May21   0:00 [rcu_tasks_kthread]
root          13  0.0  0.0      0     0 ?        I    May21   0:00 [rcu_tasks_rude_kthread]
*... output truncated ....*

# פלט

  1. הפלט לעיל מציג תמונת שלב של התהליכים שרצים כעת במערכת. כל שורה מייצגת תהליך עם העמודות הבאות:
  2. משתמש: המשתמש שבבעלות התהליך.
  3. PID: מזהה התהליך.
  4. %CPU: שימוש במעבד של התהליך.
  5. %MEM: שימוש הזיכרון של התהליך.
  6. VSZ: גודל הזיכרון הווירטואלי של התהליך.
  7. RSS: גודל המערכת המקובעת, כלומר הזיכרון הפיזי שלא נמרץ שימוש ממשיך על ידי המשימה.
  8. TTY: מסוף השליטה של התהליך. סימן ? מציין שאין מסוף שליטה.
  9. Ss: מוביל סשן. זוהי תהליך שהתחיל סשן, והוא מוביל של קבוצת תהליכים ויכול לשלוט בסיגנלים טרמינל. ה S הראשון מציין את מצב השינה וה s השני מציין שהוא מוביל סשן.
  10. START: הזמן או התאריך של התהליך.
  11. TIME: זמן המעבד הכולל.

COMMAND: הפקודה שהתחילה את התהליך.

תהליכים חזיתיים וברקע

בחלק זה, תלמדו איך תוכלו לשלוט בעבודות על ידי הרצתן ברקע או בחזית.

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

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

יצירת שלושה תהליכים

פתחו מסוף והתחילו שלושה תהליכים רצופים. השתמשו בפקודה sleep, שמשאירה את התהליך רצה למשך מספר שניות מסויים.
sleep 300 &
sleep 400 &
sleep 500 &

# ריצה של פקודת sleep ל 300, 400, ו 500 שניות

  1. ה& בסוף כל פקודה מעביר את התהליך לרקע.

תצוגת עבודות ברקע

jobs

השתמשו בפקודה jobs כדי להציג את רשימת העבודות ברקע.

jobs
[1]   Running                 sleep 300 &
[2]-  Running                 sleep 400 &
[3]+  Running                 sleep 500 &
  1. פלט הוא אמור להיראות כמו זה:

הבאת עבודה ברקע לחזית

fg %1

כדי להביא עבודה ברקע לחזית, השתמשו בפקודה fg בעקבות מספר העבודה. לדוגמה, כדי להביא את העבודה הראשונה (sleep 300) לחזית:

  1. זה יביא את העבודה 1 לחזית.

החזרת עבודה בחזית לרקע

בזמן שהמשימה רצה ברקע, ניתן להשעות אותה ולהעבירה חזרה לרקע על ידי לחיצה על Ctrl+Z כדי להשעות את המשימה.

zaira@zaira:~$ fg %1
sleep 300

^Z
[1]+  Stopped                 sleep 300

zaira@zaira:~$ jobs
משימה שהושעתה תראה כך:
[1]+  Stopped                 sleep 300
[2]   Running                 sleep 400 &
[3]-  Running                 sleep 500 &

# משימה שהושעתה

כעת השתמש בפקודה bg כדי להמשיך בביצוע המשימה עם מספר הזיהוי 1 ברקע.
# ללחוץ על Ctrl+Z כדי להשעות את המשימה ברקע
bg %1
  1. # לאחר מכן, להמשיך בביצועה ברקע
jobs
[1]   Running                 sleep 300 &
[2]-  Running                 sleep 400 &
[3]+  Running                 sleep 500 &

הצג שוב את המשימות

  • בתרגול זה, אתה:
  • התחלת שלושה תהליכים ברקע באמצעות פקודות sleep.
  • השתמשת בפקודה jobs כדי להציג את רשימת התהליכים ברקע.
  • הבאת משימה לרקע עם fg %מספר_משימה.
  • השעית את המשימה עם Ctrl+Z והעברתה חזרה לרקע עם bg %מספר_משימה.

השתמשת שוב בפקודה jobs כדי לוודא את מצב המשימות ברקע.

עכשיו אתה יודע כיצד לשלוט במשימות.

הוצאת תהליכים להורג

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

יש מספר אפשרויות נוספות בין לשימוש בפקט הkill.

kill -l
 1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
 6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) 
...terminated

# אפשרויות נוספות בשימוש בkill

  1. הנה כמה דוגמאות של הפקט הkill בלינוקס:
  2. הפקט הזה שולח את ההודעה הברירית SIGTERM אל תהליך עם מזהה 1234, בבקשה להפסיק.
  3. הפקט הזה שולח את ההודעה הברירית SIGTERM לכל התהליכים עם שם מסויים.
  4. הפקט הזה שולח את האותות SIGKILL אל תהליך עם PID 1234, ומסיר אותו באופן הכרחי.
  5. הפקט הזה שולח את האותות SIGSTOP אל תהליך עם PID 1234, ועוצר אותו.

הפקט הזה שולח את האותות הברירי SIGTERM אל כל התהליכים שמשלימים משתמש ספציפי.

אלה דוגמאות שמראות דרכים שונות לשימוש בפקודה kill במסגרת סביבת לינוקס.

הנה המידע על האפשרויות והאותות של הפקודה kill בצורה טבלאית: הטבלה הזו סיכמה את האפשרויות הכי נפוצות של הפקודה kill והאותות שבהם הם משמשים בלינוקס לניהול תהליכים. פקודה / אפשרות אותות
תיאור kill SIGTERM
בקשה לתהליך להסתיים בעדינות (האותות הברת הסטנדרט). kill -9 SIGKILL
מכריע לתהליך להסתיים מיד בלי ניקוי. kill -SIGKILL SIGKILL
מכריע לתהליך להסתיים מיד בלי ניקוי. kill -15 SIGTERM
שולח באופן ברור את אותות SIGTERM כדי לבקש הסתיים בעדינות. kill -SIGTERM SIGTERM
שולח באופן ברור את אותות SIGTERM כדי לבקש הסתיים בעדינות. kill -1 SIGHUP
בעיקרון אומר "התנתקות"; יכול להיות משמש כדי לרענן קבצי ההגדרות. kill -SIGHUP SIGHUP
מסורתית משמע "הירחף"; ניתן להשתמש בו כדי לרענן קבצי ההגדרות. kill -2 <pid> SIGINT
מבקש מהתהליך להפסיק (אותה פעולה כמו ללחוץ Ctrl+C בטרמינל). kill -SIGINT <pid> SIGINT
מבקש מהתהליך להפסיק (אותה פעולה כמו ללחוץ Ctrl+C בטרמינל). kill -3 <pid> SIGQUIT
גורם לתהליך להפסיק ולייצר הפלט של הלבן עבור בדיקה. kill -SIGQUIT <pid> SIGQUIT
גורם לתהליך להפסיק ולייצר הפלט של הלבן עבור בדיקה. kill -19 <pid> SIGSTOP
עוצר את התהליך. kill -SIGSTOP <pid> SIGSTOP
עוצר את התהליך. kill -18 <pid> SIGCONT
ממשיך את התהליך הפסק. kill -SIGCONT <pid> SIGCONT
ממשיך את התהליך הפסק. killall <name> שונה
שולח אותו ההתעקשות לכל התהליכים הקיימים עם שם נתנה. killall -9 <name> SIGKILL
מעברת התמונה לתוך התוכן המקורי של הערימה. pkill <תבנית> שונה
שולחת סיגנל לתהליכים בהתאמה לתבנית. pkill -9 <תבנית> SIGKILL
הכרזת התמונה לתוך התוכן המקורי של הערימה. xkill SIGKILL

שירות גרפי שמאפשר לחתוך על חלון ולהרוג את התהליך הנדרש.

8.5. הזרמים הסטנדרטיים לקלט ויוצאה בלינUX

  1. קריאה בקלט וכתיבה ביוצאה היא חלק עיקרי בהבנה של השולחן הציוני וסיסמה. בלינUX, לכל תהליך יש שלושה זרמים רגילים:
  2. המתקן הק
  3. פלט סטנדרטי (stdout): זהו הזרם המוצאי המוגדר כברירת מחדל שבו תהליך כתב את הפלט שלו. לפי ברירת מחדל, הפלט הסטנדרטי הוא הטרמינל. הפלט יכול גם להיות מופנה לקובץ או לתוכנית אחרת. מזהה הקובץ של stdout הוא 1.

שגיאת סטנדרט (stderr): זהו הזרם השגיאות המוגדר כברירת מחדל שבו תהליך כותב את הודעות השגיאה שלו. לפי ברירת מחדל, השגיאה הסטנדרטית היא הטרמינל, מאפשרת לראות את הודעות השגיאה גם אם stdout מופנה. מזהה הקובץ של stderr הוא 2.

הפנייה וצינורות

פנייה: ניתן להפנות את זרמי השגיאה והפלט אל קבצים או לפקודות אחרות. לדוגמה:
ls > output.txt

# מפנה את stdout לקובץ
ls non_existent_directory 2> error.txt

# מפנה את stderr לקובץ
ls non_existent_directory > all_output.txt 2>&1

# מפנה את stdout ואת stderr לקובץ

  • בפקודה האחרונה,
  • ls non_existent_directory: מרשם את התוכן של הארכיון non_existent_directory. מפני שאין ארכיון זה, הפעם של ls ייצר מסר שגיאה.
  • > all_output.txt: האקסקל הזה מעביר את היוצא הרגיל (stdout) של הפקודה ls אל הקובץ all_output.txt. אם הקובץ לא קיים, ייצר אותו. אם קיים, תוכניות יישמרו על הקובץ הקיים.

2>&1:: כאן, המספר 2 מייצג את הנתיב הקוד לשגיאה (stderr). המספר 1 מייצג את הנתיב הקוד ליוצא רגיל (stdout). האות המספר והאות ה& משמשים כדי לסמן שהמספר 1 אינו השם של הקובץ אלא נתיב הקוד.

כך, 2>&1 משמע "הפניית stderr (2) למקום בו stdout (1) נועד להגיע," שבמקרה זה הוא הקובץ all_output.txt. לכן, גם הפלט (אם היה כן) וההודעה של השגיאה מ-ls יתפרסמו ב-all_output.txt.

צינורות:

ls | grep image
ניתן להשתמש בצינורות (|) כדי להעביר את הפלט של פקודה אחת כקלט לאחרת:
image-10.png
image-11.png
image-12.png
image-13.png
... Output truncated ...

# פלט

8.6 אוטומציה בלינוקס – תזמונת משימות בעזרת עבודות Cron

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

דמון ה- crond (סוג של תוכנה שרצה ברקע) מאפשר את תכונות cron. ה-cron קורא את crontab (טבלאות cron) על מנת לרצות סקריפטים מוגדרים מראש.

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

<diy13מהן עבודות cron בלינוקס?

כל משימה שתוכננת דרך crons נקראת עבודת cron.

עכשיו, בואו נראה איך עבודות cron עובדות.

איך לשלוט בגישה לcrons

כדי להשתמש בעבודות cron, דמין צריך לא

אם תקבל הודעה כזו, זה אומר שאין לך הרשאה להשתמש ב-cron.

כדי לאפשר ל-John להשתמש ב-crons, כלול את שמו בקובץ /etc/cron.allow. צור את הקובץ אם הוא אינו קיים. זה יאפשר ל-John ליצור ולערוך משרות של cron.

משתמשים יכולים גם להימנע מגישה למשרות של cron על ידי הזנת שמות משתמשיהם בקובץ /etc/cron.d/cron.deny.

איך להוסיף משרות cron ב-Linux

לפני הכל, כדי להשתמש במשרות cron, עליך לבדוק את מצב שירות ה-cron. אם ה-cron אינו מותקן, תוכל להוריד אותו בקלות דרך מנהל החבילות. פשוט השתמש בזה כדי לבדוק:
sudo systemctl status cron.service

# בדוק שירות cron במערכת Linux

תחביר משרות cron

  • קרונטאבים משתמשים בדגלים הבאים להוספת ורישום משרות cron:
  • crontab -e: עורך רשומות crontab להוספה, מחיקה או עריכת משרות cron.
  • crontab -l: מפרט את כל משרות ה-cron של המשתמש הנוכחי.
  • crontab -u שם_משתמש -l: מפרט את משרותי ה-cron של משתמש אחר.

crontab -u שם_משתמש -e: עורך את משרותי ה-cron של משתמש אחר.

כאשר אתה מפרט משרות cron והן קיימות, תראה משהו דומה לזה:
* * * * * sh /path/to/script.sh

# דוגמה לקרון ג'וב

  • בדוגמה לעיל,
* מייצג דקה(ות) שעה(ות) יום(ים) חודש(ים) ימי שבוע(ות), בהתאמה. ראה פרטים על הערכים הללו למטה: ערך
תיאור דקות 0-59
הפקות פקודה בדקה הספציפית. שעות 0-23
הפקות פקודה בשעה הספציפית. ימים 1-31
פקודות תופסות בימים אלו של החודשים. חודשים 1-12
החודש בו יש להפעיל משימות. ימי שבוע 0-6
  • ימי השבוע שבהם תרוץ פקודות. כאן, 0 היא יום ראשון.
  • sh מייצג שהסקריפט הוא סקריפט bash וצריך להיות מופעל מתוך /bin/bash.

/path/to/script.sh מציין את הנתיב לסקריפט.

*   *   *   *   *  sh /path/to/script/script.sh
|   |   |   |   |              |
|   |   |   |   |      Command or Script to Execute        
|   |   |   |   |
|   |   |   |   |
|   |   |   |   |
|   |   |   | Day of the Week(0-6)
|   |   |   |
|   |   | Month of the Year(1-12)
|   |   |
|   | Day of the Month(1-31)  
|   |
| Hour(0-23)  
|
Min(0-59)

להלן תקציר של תחביר ה-cron job:

דוגמאות לקרון ג'וב

להלן כמה דוגמאות לקביעת זמני ריצה של קרון ג'ובים. לוח זמנים
ערך מתוזמן 5 0 * 8 *
ב-00:05 באוגוסט. 5 4 * * 6
ב-04:05 ביום שישי. 0 22 * * 1-5

ב-22:00 בכל יום שבוע מבשר יום דרך שישי.

זה בסדר אם לא תוכלו להיכנס לזה באותו הזמן. תוכלו למתן וליצור לוחות קרון עם האתר crontab guru.

איך להגדיר משימה קרונית

  1. בחלק זה, נסתכל על דוגמה לאיך לתת לסcriipt פשוט למשימה קרונית.
#!/bin/bash

echo `date` >> date-out.txt

יצירו סcriipt בשם date-script.sh שידפיס את תאריך וזמן המערכת וישלב אותו לקובץ. הסcriipt מוצג למטה:

chmod 775 date-script.sh

2. תעניקו לסcriipt הזכויות יצירה בעזרת פקינסים.

3. תוסיף את הסcriipt ללוח הקרון בעזרת crontab -e.

*/1 * * * * /bin/sh /root/date-script.sh

פה, אנחנו ארגנו אותו להריץ לדקה.

cat date-out.txt
4.  תבחנו את היוצא של הקובץ date-out.txt. לפי הסcriipt, תאריך המערכת צריך להיות דפיס בקובץ זה בכל דקה.
Wed 26 Jun 16:59:33 PKT 2024
Wed 26 Jun 17:00:01 PKT 2024
Wed 26 Jun 17:01:01 PKT 2024
Wed 26 Jun 17:02:01 PKT 2024
Wed 26 Jun 17:03:01 PKT 2024
Wed 26 Jun 17:04:01 PKT 2024
Wed 26 Jun 17:05:01 PKT 2024
Wed 26 Jun 17:06:01 PKT 2024
Wed 26 Jun 17:07:01 PKT 2024

# יוצא

איך לתיקון בעיות קרוניות

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

1. בדוקות את התוודעה.

ראשית, תוכלו לנסות לאשר את התוודעה שנתנו לקרון. אתם יכולים לעשות את זה עם הס

. בדוק יומני קרון.

ראשית, צריך לבדוק האם הקרון רץ בזמן המתוכנן או לא. באובונטו, ניתן לוודא זאת מתוך יומני הקרון הממוקמים ב/var/log/syslog.

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

1 Jun 26 17:02:01 zaira-ThinkPad CRON[27834]: (zaira) CMD (/bin/sh /home/zaira/date-script.sh)
2 Jun 26 17:02:02 zaira-ThinkPad systemd[2094]: Started Tracker metadata extractor.
3 Jun 26 17:03:01 zaira-ThinkPad CRON[28255]: (zaira) CMD (/bin/sh /home/zaira/date-script.sh)
4 Jun 26 17:03:02 zaira-ThinkPad systemd[2094]: Started Tracker metadata extractor.
5 Jun 26 17:04:01 zaira-ThinkPad CRON[28538]: (zaira) CMD (/bin/sh /home/zaira/date-script.sh)

להלן היומנים של משימת הקרון הדוגמה שלנו. שים לב לעמודה הראשונה שמראה את הזמן. הנתיב לסקריפט גם מופיע בסוף השורה. השורות מספרים 1, 3 ו-5 מראות שהסקריפט רץ ככל שתיארת.

3. הפנה את פלט הקרון לקובץ.

ניתן להפנות את פלט הקרון לקובץ ולבדוק בו אם קיימים שגיאות.
* * * * * sh /path/to/script.sh &> log_file.log

# הפנה פלט קרון לקובץ

8.7. בסיסי רשתות לינוקס

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

הצגת מנשקי רשת עם ifconfig

ifconfig

הפקודה ifconfig מספקת מידע על מנשקי רשת. הנה דוגמה לפלט:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::a00:27ff:fe4e:66a1  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:4e:66:a1  txqueuelen 1000  (Ethernet)
        RX packets 1024  bytes 654321 (654.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 512  bytes 123456 (123.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 256  bytes 20480 (20.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 256  bytes 20480 (20.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# פלט

הפלט של הפקודה ifconfig מראה את מנשקי הרשת המוגדרים על המערכת, יחד עם פרטים כמו כתובות IP, כתובות MAC, סטטיסטיקות פקטורים ועוד.

המנשקים הללו יכולים להיות מכשירים פיזיים או וירטואליים.

כדי להפיק כתובות IPv4 ו-IPv

צפייה בפעילות רשת בעזרתnetstat

הפקט הnetstat מראה את הפעילות והנתונים הבאים על הרשת:

  1. הנה כמה דוגמאות לשימוש בפקט netstat בשורת פקודות:
  2. הצג את כל הסיכות המקשיבות והלא מקשיבות:
  3. הצג רק את הפורטים המקשיבים:
  4. הצג את הנתונים הסטטיסטיים לרשת:
  5. הצג את טבלת הניווט:
  6. הצגת קישורי TCP:
  7. הצגת קישורי UDP:
  8. הצגת התקנים הרשתיים:
  9. הצגת PID ושמות התוכניות עבור הקישורים:
  10. הצגת סטטיסטיקות עבור הפרוטוקול (לדוגמה, TCP):

הצגת מידע מורחב:

בדיקת קישוריות רשת בין שני מכשירים בשימוש ב ping

ping google.com

ping משמש לבדיקת קישוריות רשת בין שני מכשירים. הוא שולח הערבות ICMP אל המכשיר המטרתי וממתין לתשובה.

ping google.com
PING google.com (142.250.181.46) 56(84) bytes of data.
64 bytes from fjr04s06-in-f14.1e100.net (142.250.181.46): icmp_seq=1 ttl=60 time=78.3 ms
64 bytes from fjr04s06-in-f14.1e100.net (142.250.181.46): icmp_seq=2 ttl=60 time=141 ms
64 bytes from fjr04s06-in-f14.1e100.net (142.250.181.46): icmp_seq=3 ttl=60 time=205 ms
64 bytes from fjr04s06-in-f14.1e100.net (142.250.181.46): icmp_seq=4 ttl=60 time=100 ms
^C
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 78.308/131.053/204.783/48.152 ms

ping בדוגמה בודק אם מקבל תשובה ללא התמהמה.

— google.com ping סטטיסטיקות —

ניתן לעצור את התגובות עם Ctrl + C.

בדיקת קישורים בעזרת הפקטיבית curl

  • curl מייצג "שם מקור ללקוח". הוא משמש לעבירת מידע אל שרת או מקבלת מידע משרת. הוא גם יכול לשתמש במסגרת בדיקות API שעוזרות בתיקון שגיאות במערכת וביישומים.
curl http://www.official-joke-api.appspot.com/random_joke
{"type":"general",
"setup":"What did the fish say when it hit the wall?","punchline":"Dam.","id":1}
curl -o random_joke.json http://www.official-joke-api.appspot.com/random_joke
הפקטיבית curl ללא אפשרויות משתמשת בשיטה GET באופן בר-מחשבה.
  • curl -o שומר את התוצאות בשם הקובץ המצוין.
curl -I http://www.official-joke-api.appspot.com/random_joke
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Vary: Accept-Encoding
X-Powered-By: Express
Access-Control-Allow-Origin: *
ETag: W/"71-NaOSpKuq8ChoxdHD24M0lrA+JXA"
X-Cloud-Trace-Context: 2653a86b36b8b131df37716f8b2dd44f
Content-Length: 113
Date: Thu, 06 Jun 2024 10:11:50 GMT
Server: Google Frontend

# שומר את התוצאות בשם random_joke.json

curl -I משך רק הראשים.

8.8. טיפול בבעיות בלינוקס: כלים וטכניקות

דוח פעילות מערכת עם sar

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

כדי להשתמש ב-sar צריך קודם להתקין את syssstat באמצעות sudo apt install sysstat.

לאחר ההתקנה, התחל את השירות עם sudo systemctl start sysstat.

וודא שהמצב פעיל עם sudo systemctl status sysstat.

sar [options] [interval] [count]

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

sar -u 1 3
פירוט הפקודה sar הוא כך:
Linux 6.5.0-28-generic (zaira-ThinkPad)     04/06/24     _x86_64_    (12 CPU)

19:09:26        CPU     %user     %nice   %system   %iowait    %steal     %idle
19:09:27        all      3.78      0.00      2.18      0.08      0.00     93.96
19:09:28        all      4.02      0.00      2.01      0.08      0.00     93.89
19:09:29        all      6.89      0.00      2.10      0.00      0.00     91.01
Average:        all      4.89      0.00      2.10      0.06      0.00     92.95

לדוגמה, sar -u 1 3 יציג סטטיסטיקות שימוש במעבדה כל שניה לפי שלוש פעמים.

# פלט

הנה כמה משימושים נפוצים ודוגמאות כיצד להשתמש בפקודה sar.

sar יכולה להשתמש למספר מטרות:

sar -r 1 3

Linux 6.5.0-28-generic (zaira-ThinkPad)     04/06/24     _x86_64_    (12 CPU)

19:10:46    kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
19:10:47      4600104   8934352   5502124     36.32    375844   4158352  15532012     65.99   6830564   2481260       264
19:10:48      4644668   8978940   5450252     35.98    375852   4165648  15549184     66.06   6776388   2481284        36
19:10:49      4646548   8980860   5448328     35.97    375860   4165648  15549224     66.06   6774368   2481292       116
Average:      4630440   8964717   5466901     36.09    375852   4163216  15543473     66.04   6793773   2481279       139

1. שימוש בזיכרון

כדי לבדוק שימוש בזיכרון (פנוי ומשומש), השתמשו ב:

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

sar -S 1 3

sar -S 1 3
Linux 6.5.0-28-generic (zaira-ThinkPad)     04/06/24     _x86_64_    (12 CPU)

19:11:20    kbswpfree kbswpused  %swpused  kbswpcad   %swpcad
19:11:21      8388604         0      0.00         0      0.00
19:11:22      8388604         0      0.00         0      0.00
19:11:23      8388604         0      0.00         0      0.00
Average:      8388604         0      0.00         0      0.00

2. שימוש במרחב ההחלפה

כדי להציג סטטיסטיקות שימוש במרחב ההחלפה, השתמשו ב:

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

sar -d 1 3

3. עומס המכשירי I/O

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

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

sar -n DEV 1 3
5. סטטיסטיקות רשת
sar -n DEV 1 3
Linux 6.5.0-28-generic (zaira-ThinkPad)     04/06/24     _x86_64_    (12 CPU)

19:12:47        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
19:12:48           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
19:12:48       enp2s0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
19:12:48       wlp3s0     10.00      3.00      1.83      0.37      0.00      0.00      0.00      0.00
19:12:48    br-5129d04f972f      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
.
.
.

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:       enp2s0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
...output truncated...

על מנת להביט בסטטיסטיקות רשת, כמו מספר הפקטים המקבלים (השדרים) על הממשקים הרשתיים:

# -n DEV מספר לסאר לדווח על ממשקים מכשירי רשת

זה מציג סטטיסטיקות רשת בכל שניה למשך שלושה שניות, וזה עוזר בניוון של תנועת הרשת.

  1. 6. נתונים היסטוריים
  2. # הם "true" ו"false". אל תשים ערכים אחרים, הם
  3. הגדרת מהירות אספי המידע: ערוך את ההגדרות של המשימה של cron כדי להגדיר את מהירות אספי המידע.
sar -u -f /var/log/sysstat/sa04
Linux 6.5.0-28-generic (zaira-ThinkPad)     04/06/24     _x86_64_    (12 CPU)

15:20:49     LINUX RESTART    (12 CPU)

16:13:30     LINUX RESTART    (12 CPU)

18:16:00        CPU     %user     %nice   %system   %iowait    %steal     %idle
18:16:01        all      0.25      0.00      0.67      0.08      0.00     99.00
Average:        all      0.25      0.00      0.67      0.08      0.00     99.00
החלף <DD> עם יום החודש שבעבורו רוצה להצגת הנתונים.

בפקודה הבאה, /var/log/sysstat/sa04 מעניקה נתונים עבור יום הרביעי של החודש הנוכחי.

sar -I SUM 1 3

7. הפרעות CPU בזמן אמת
Linux 6.5.0-28-generic (zaira-ThinkPad)     04/06/24     _x86_64_    (12 CPU)

19:14:22         INTR    intr/s
19:14:23          sum   5784.00
19:14:24          sum   5694.00
19:14:25          sum   5795.00
Average:          sum   5757.67

כדי להסתכל על הפרעות לשניה על ידי הCPU, השתמש בפקודה הבאה:

# ייצוג

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

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

8.9. אסטרטגית פתרון בעיות כללית לשרתים

למה אנחנו צריכים להבין ניטור?

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

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

[user@host ~]$ uptime 19:15:00 up 1:04, 0 users, load average: 2.92, 4.48, 5.20

מצא ממוצע עומס וזמן פעילות של המערכת

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

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

שים לב: תור ה־CPU האידיאלי הוא 0. זה יתכן רק במקרה שאין תור ממתין ל־CPU.

lscpu
ניתן לחשב את העומס לפי כל יחידת ה־CPU על ידי חילוק העומס הממוצע על מספר ה־CPU הכולל.
Architecture:            x86_64
  CPU op-mode(s):        32-bit, 64-bit
  Address sizes:         48 bits physical, 48 bits virtual
  Byte Order:            Little Endian
CPU(s):                  12
  On-line CPU(s) list:   0-11
.
.
.
output omitted

כדי למצוא את מספר ה־CPU, השתמש בפקודה lscpu.

# פלט

אם שיעור הטעינה נראה שהוא גדל ולא מוריד, הCPU-ים מותקעים. יש תהליך אחד שנעצר או יש דליקה זיכרון.

free -mh
מחשבת הזיכרון החופשי
               total        used        free      shared  buff/cache   available
Mem:            14Gi       3.5Gi       7.7Gi       109Mi       3.2Gi        10Gi
Swap:          8.0Gi          0B       8.0Gi

לפעמים, יש השתמשות גבוהה בזיכרון שעשויה להיות סיבת בעיה. כדי לבדוק את הזיכרון הזמיני והזיכרון בשימוש, משתמשים בפקודה free.

# הוצאה

מחשבת המקום על הדיסק

df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           1.5G  2.4M  1.5G   1% /run
/dev/nvme0n1p2  103G   34G   65G  35% /
tmpfs           7.3G   42M  7.2G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
efivarfs        246K   93K  149K  39% /sys/firmware/efi/efivars
/dev/nvme0n1p3  130G   47G   77G  39% /home
/dev/nvme0n1p1  511M  6.1M  505M   2% /boot/efi
tmpfs           1.5G  140K  1.5G   1% /run/user/1000

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

הפקודה df מעניקה מידע פרטי על המקום על הדיסק.

קבעת מצבי התהליכים

[user@host ~]$ ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
 runner         1  0.1  0.0 1535464 15576 ?       S  19:18   0:00 /inject/init
 runner        14  0.0  0.0  21484  3836 pts/0    S   19:21   0:00 bash --norc
 runner        22  0.0  0.0  37380  3176 pts/0    R+   19:23   0:00 ps aux

מצבי התהליכים יכולים להיות מנוטרדים על מנת לראות תהליך אחד שנעצר עם שימוש גבוה בזיכרון או בCPU.

ראינו קודם שפקודת ps מעניקה מידע שימושי על תהליך. הביטו בעמודי CPU ו MEM.

מעקבת מערכת בזמן אמת

מעקב בזמן אמת נותן חלון למצב המערכת האמתי.

אחד היישומים שאתה יכול להשתמש בו לעשות זאת היא הפקודה top.

הפקודה top מראה מבט דינמי של התהליכים במערכת, שמראה ראשון עם רשימת ס

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

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

תיאור היומן

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

ניתוח יציאות רשת

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

כדי לזהות בעיות כאלו, צריך להבין מצבי יציאות הרשת. כמה ממצבי היציאות מסודרים כאן בקצרה:
מצב תיאור
LISTEN מייצג יציאות שמחכות לבקשת חיבור מכל TCP מרוחק ומפתח יציאה.
ESTABLISHED מייצג חיבורים שפתוחים וניתן להעביר את המידע שהתקבל ליעדו.
TIME WAIT מייצג זמן המתנה לוודא שהבקשה לסיום החיבור שלו קיבלה אישור.

FIN WAIT2

מייצג המתנה לבקשת סיום חיבור מהTCP המרוחק.

[user@host ~]$ /sbin/sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 15000    65000

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

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

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

זיהוי איבוד פקטים

במעקב אחר מערכת, עלינו לוודא שהתקשורת הנכנסת והיוצאת ישירה.
[user@host ~]$ ping 10.13.6.113
 PING 10.13.6.141 (10.13.6.141) 56(84) bytes of data.
 64 bytes from 10.13.6.113: icmp_seq=1 ttl=128 time=0.652 ms
 64 bytes from 10.13.6.113: icmp_seq=2 ttl=128 time=0.593 ms
 64 bytes from 10.13.6.113: icmp_seq=3 ttl=128 time=0.478 ms
 64 bytes from 10.13.6.113: icmp_seq=4 ttl=128 time=0.384 ms
 64 bytes from 10.13.6.113: icmp_seq=5 ttl=128 time=0.432 ms
 64 bytes from 10.13.6.113: icmp_seq=6 ttl=128 time=0.747 ms
 64 bytes from 10.13.6.113: icmp_seq=7 ttl=128 time=0.379 ms
 ^C
 --- 10.13.6.113 ping statistics ---
 7 packets transmitted, 7 received,0% packet loss, time 6001ms
 rtt min/avg/max/mdev = 0.379/0.523/0.747/0.134 ms

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

# ping כתובת IP היעד

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

איסוף סטטיסטיקות לאחר-מוות של בעיה

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

מתחת נמצאים כמה מהשיטות ללכידת תמונת מערכת.

  • שמ

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

sudo tcpdump -i any -w

דיקוף TCP
דיקוף TCP (tcpdump) הוא תוכנה של שורת פעולה שמאפשרת לך לתפוס ולנתח את התקשורת הרשתית הכיצדת. היא בעיקר משמשת לעידן הבעיות של הרשת. אם אתה מאמין שהתקשורת במערכת מושפעת, קח את tcpdump באופן הבא:
# איפה,

# -i any תפוס את התקשורת מכל הממשקים
# -w מספר את השם הקובץ להוצאה

# עצור את הפקודה אחר מספר דקות מפני שהגודל של הקובץ עלה

# השתמש בסיום קובץ כ.pcap

אחרי שהתפוס tcpdump, ניתן להשתמש בכלים כמו Wireshark על מנת לנתח התקשורת באופן ויזואלי.

סיכום

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

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

  1. היו
  2. LinkedIn: אני משתף מאמרים ופוסטים על טכנולוגיה שם. תשאירו מומן על לינקדין ותאשר אותי על מיומנויות רלוונטיות.

קבלו גישה לתוכן מועבר: עבור עזרה אישית ותוכן מועבר בלבד, לכאן הליך.

קבלו גישה לתוכן מועבר: עבור עזרה אישית ותוכן מועבר בלבד, לכאן הליך.