oh my zsh

מה זה CLI, למה אנחנו משתמשים בו ואיך אנו יכולים להתקין מערכת שממש מקילה על השימוש בו.

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

חשיבות ה-CLI

אחד הדברים הראשונים שמפתח ווב לומד הוא שימוש ב-CLI. ראשי תבות של Command Line Interfacce. מה זה אומר? כשאנו עובדים מול תוכנה כמשתמש (למשל וורד) אנו רגילים להשתמש ב-GUI. ממשק גרפי. ליצור מסמך בוורד זה קל – לוחצים על קובץ, שמירה בשם ואז נוצר לנו קובץ בתיקיה לפי בחירתנו. כל האינטראקציה הזו היא גרפית – יש לנו עכבר, אנו מזיזים אלמנטים ורואים את התוצאה בעיניים. כך גם במערכות הפעלה גרפיות. בחלונות או באובונטו אנו יוצרים תיקיות, קבצים, מזיזים אותם ועושים פעולות שונות באמצעות file explorer או כל מנגנון אחר. זה גם GUI. אבל לא לכל התוכנות יש ממשק גרפי של תפריטים ויזואלים שנעים ביניהן עם העכבר. חלק מהתוכנות עובדות עם ממשק טקסטואלי – כלומר פקודות טקסטואליות בלבד. רואים את זה בnpm של Node.js למשל. כדי להפעיל אותה אני נדרש להכנס לטרמינל (cmd בחלונות) ולהקליד: npm init. או npm install. בתוכנה כמו wpscan למשל אני נדרש להכנס לטרמינל ולכתוב wpscan https://example.com. בתוכנה כמו nmap אני נדרש להכנס לטרמינל ולכתוב nmap IPADDRESS. ההפעלה הזו, באמצעות טרמינל, היא בעצם עבודה דרך CLI. פקודות שמקלידים בטרמינל.

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

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

הסינטקס שבו אנו משתמשים בטרמינל תלוי ב-shell שלנו. כשיש הבדל בין ה-shell של חלונות לבין ה-shell של לינוקס ומק. ה-shell של לינוקס ומק נקרא BASH. הוא דומה לזה של חלונות אבל יש הבדלים וגם יש לו הרבה יותר אפשרויות. בשנים האחרונות ניתן להשתמש ב-BASH גם בחלונות באמצעות git bash. תוכנה קטנה שמתקינים אותה על החלונות וכשפותחים אותה אפשר להשתמש ב-bash על חלונות. זה כמו cmd – אבל עם הסינטקס המקובל. אם אתם לא מכירים, אני ממליץ מאוד להתנסות. מורידים, מתקינים ובכל פעם שרוצים לעבוד על הטרמינל פותחים וזהו.

BASH ו-zsh

BASH היא הסביבה הטבעית למפתחים – בלינוקס ובמק וגם בחלונות (עם git bash). אבל אפשר להעשיר אותה עם zsh. ראשי תבות של Z Shell. גם הוא shell שעובד מעולה בדומה ל BASH ובנוי לפי אותם עקרונות אבל יש לו כמה יתרונות – במיוחד auto complete. אם אני רוצה להגיע לתיקיה מסוימת, אני מקליד cd ואז יכול ללחוץ טאב ויש לי רשימה של כל התיקיות. תיקוני שגיאות כתיב בשמות של תיקיות, צבעים, היסטוריה מתוחכמת וכו' וכו'. יש להם גם יכולת לפלגינים. ופה נכנס oh my zsh.

oh my zsh

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

דוגמה של oh my zsh. צבעים, השלמה אוטומטית.

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

יש גם שפע של פקודות מעבר לגרפיקה ולהשלמה האוטומטית – יש ל oh my zsh יותר ממאתיים פלגינים עם פקודות שונות שאם זוכרים אותן זה מאוד מסייע. למשל ggp היא פקודה שלוקחת את כל מה שיש בבראנץ' הנוכחי ודוחפת אותו כבראנץ' מרוחק (לא צריך ליצור אותו מרחוק). מאוד שימושי. בדוקומנטציה של הפלגינים יש דוגמאות רבות נוספות.

התקנת oh my zsh

כמובן שבמק או בלינוקס זה הכי קל. אם יש לכם מק או לינוקס אז:

$ sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

זה גם כתוב באתר הרשמי של oh my zsh.

אם יש לכם חלונות זה טיפה יותר מסובך. את ההוראות האלו ניסיתי וזה עובד על חלונות 10 יחד עם git bash. מעבר על ההוראות האלו יגרום ל git bash שלכם להכיל את oh my zsh ופיתוח שממש מקל עליכם.

לסיכום

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

פוסטים נוספים שכדאי לקרוא

תמונה מצוירת של רובוט שמנקה HTML
יסודות בתכנות

סניטציה – למה זה חשוב

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

גלילה לראש העמוד