Forwarded from Deleted Account
בטעות נתקלתי בזה ולא ברור אם זה עובד בכל הטרמינלים
לעיתים אנו צריכים להזין מספר מסויים של תווים ולא משנה לנו מהם, משתמשי פייתון ישר עושים
והופ יש 50 תווים
אפשר לבצע משהו דומה בטרמינל על ידי לחיצה על אלט + מספר (בדוגמה שלנו 50), לאחר מכן התו שתלחצו עליו יוכפל ב50 או במספר אותו הזנתם
הקשה על התו המדובר תכפיל אותו במספר הערך שהכנסנו
#terminal_tips
לעיתים אנו צריכים להזין מספר מסויים של תווים ולא משנה לנו מהם, משתמשי פייתון ישר עושים
print "f" * 50
והופ יש 50 תווים
אפשר לבצע משהו דומה בטרמינל על ידי לחיצה על אלט + מספר (בדוגמה שלנו 50), לאחר מכן התו שתלחצו עליו יוכפל ב50 או במספר אותו הזנתם
(arg: 50)
הקשה על התו המדובר תכפיל אותו במספר הערך שהכנסנו
#terminal_tips
👍1
Forwarded from Deleted Account
טיפ חביב שלמדתי היום
במידה ונרצה לשנות בפלט בצורה קבועה של חלק המחרוזת נוכל להשתמש בסוגריים מסולסלות בצורה הבאה
עכשיו כל מקום שהפלט מכיל את המחרוזת pdf יהפוך להיות jpg
הרעיון המקורי היה להריץ את זה מתוך לולאה, זה נראה כך
אצלי בקוד הכנסתי את המשתנים לגרשיים כדי להתגבר על בעיית רווחים בשמות קבצים
#terminal_tips
במידה ונרצה לשנות בפלט בצורה קבועה של חלק המחרוזת נוכל להשתמש בסוגריים מסולסלות בצורה הבאה
$ export a=some_file.pdf
$ echo "${a/pdf/jpg}"
some_file.jpg
עכשיו כל מקום שהפלט מכיל את המחרוזת pdf יהפוך להיות jpg
הרעיון המקורי היה להריץ את זה מתוך לולאה, זה נראה כך
for file in *.pdf
do
convert -density 300x300 $file ${file/pdf/jpg}
done
אצלי בקוד הכנסתי את המשתנים לגרשיים כדי להתגבר על בעיית רווחים בשמות קבצים
#terminal_tips
👍1
בעקבות הטיפ הקודם הסתבר שיש עוד הרבה קיצורים כאלו, הנה משהו חביב ישר מהתיעוד, יעבוד מגרסה 4+ ותודה על ההערה
לצורך העניין שם הקובץ הוא bash_hackers.txt
Case modification
תודה לירון שהרבני על התוספת
#terminal_tips
לצורך העניין שם הקובץ הוא bash_hackers.txt
Get name without extension
${FILENAME%.*}
⇒ bash_hackers
Get extension
${FILENAME##*.}
⇒ .txt
Get directory name
${PATHNAME%/*}
⇒ /home/bash/
Get filename
${PATHNAME##*/}
⇒ bash_hackers.txt
Case modification
array=(This is some Text)
echo "${array[@],}"
⇒ this is some text
echo "${array[@],,}"
⇒ this is some text
echo "${array[@]^}"
⇒ This Is Some Text
echo "${array[@]^^}"
⇒ THIS IS SOME TEXT
echo "${array[2]^^}"
⇒ TEXT
תודה לירון שהרבני על התוספת
#terminal_tips
👍1
סקריפט קצת ישן שבניתי אותו לפני כמה שנים:
#terminal_tips
#!/bin/bash
# Script to extract files
# Kiewicz
# GPL - 2011
if [ "$#" -lt 1 ]; then
echo -ne "\n\tUsage:"
echo -e "\n\t$(basename $0) <file> (.tar, .rar, .bz2...)"
echo ""
exit 1
fi
if [ -f $1 ] ; then
case $1 in
*.tar.bz2 | *.tbz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted" ;;
esac
else
echo "'$1' is not a valid parameter"
fi
#terminal_tips
👍1
משהו מעניין שגיליתי הרגע: אפשר ליצור שקע בבאש בעזרת הפקודה
ואז לקרוא בעזרת
cat <&3
ולכתוב בעזרת
printf "text" >&3
מקור: http://hacktux.com/bash-socket
קרדיט @BnK970
#terminal_tips
exec 3<>/dev/tcp/server/port
ואז לקרוא בעזרת
cat <&3
ולכתוב בעזרת
printf "text" >&3
מקור: http://hacktux.com/bash-socket
קרדיט @BnK970
#terminal_tips
👍1
לאלו שרוצים לדבג עבודה עם curl הרצה עם פרטר -v תציג את הערכים שנשלחו בבקשה ומה התשובה שחזרה.
#terminal_tips
$ curl -v ifconfig.io
* Rebuilt URL to: ifconfig.io/
* Trying 102.27.123.121...
* TCP_NODELAY set
* Connected to ifconfig.io (102.27.123.121) port 80 (#0)
> GET / HTTP/1.1
> Host: ifconfig.io
> User-Agent: curl/7.52.1
> Accept: */*
...
#terminal_tips
👍1
Forwarded from ToCode
# טיפ Bash - איך למחוק קבצים בלי נקודה
הרבה אנשים יודעים איך למחוק מהתיקיה את כל הקבצים שיש להם סיומת, ומסתבר שהרבה פחות מכירים את הטריק הבא שימחק דווקא את אלה שאין להם.
קודם כל נוודא שה bash שלנו תומך ב extglob עם הפקודה:
אם הפלט אצלכם הוא off יש להפעיל את התמיכה באמצעות:
ועכשיו נזכור שהפקודה הבאה מוחקת את כל הקבצים שיש להם סיומת:
ולכן כל מה שצריך זה להוסיף סימן קריאה לפני ה glob כדי למחוק את כל הקבצים שאין להם סיומת:
הרבה אנשים יודעים איך למחוק מהתיקיה את כל הקבצים שיש להם סיומת, ומסתבר שהרבה פחות מכירים את הטריק הבא שימחק דווקא את אלה שאין להם.
קודם כל נוודא שה bash שלנו תומך ב extglob עם הפקודה:
$ shopt extglob
extglob on
אם הפלט אצלכם הוא off יש להפעיל את התמיכה באמצעות:
$ shopt -s extglob
ועכשיו נזכור שהפקודה הבאה מוחקת את כל הקבצים שיש להם סיומת:
$ rm *.*
ולכן כל מה שצריך זה להוסיף סימן קריאה לפני ה glob כדי למחוק את כל הקבצים שאין להם סיומת:
$ rm !(*.*)
אפשר להדפיס תוכן כל קובץ על ידי פקודת cat
במידה ונרצה להדפיס קובץ מהסוף להתחלה אפשר להשתמש בפקודת
$ cat myfilecat
one
two
three
הפקודה מאפשרת לשרשר כמה קבצים לקובץ אחד על ידי $ cat file1 file2 > file3
אופציית שירשור הקבצים עובדת על עוד פורמטים כמו zip ו mp3.במידה ונרצה להדפיס קובץ מהסוף להתחלה אפשר להשתמש בפקודת
tac
(כן, למישהו יש הומור)$ cat myfilecat
one
two
three
$ tac myfilecat
three
two
one
עכשיו לחלק המעניין, מה לדעתכם יקרה אם נשתמש בtac
על קובץ mp3?פקודת
הקובץ שלי מכיל את הטקסט הפשוט הבא
בדוגמה הבאה אני מחליף את המילה
זה נראה כך
במקום לסבול אפשר להשתמש בסינטקס הבא שמחליף את תווי הבקרה בתו אחר
sed
להשתמש ב !
במקום \
פקודה מוכרת בעולם הלינוקס היא sed
פקודה שמאפשרת לבצע מניפולציות על טקסט מבלי לפתוח עורך טקסטהקובץ שלי מכיל את הטקסט הפשוט הבא
$ cat test.txtשימוש בsed מאפשר להחליף טקסט קיים בקובץ ולשמור אותו.
my path is /tmp/test/hello
בדוגמה הבאה אני מחליף את המילה
hello
ב aaa
זה נראה כך
$ sed 's/hello/aaa/g' test.txtהסינטקס פשוט וקריא, בתחילה אני אומר איזה מילה אני בוחר ולאיזה מילה אני רוצה להחליף. הבעיה מתחילה כשרוצים להחליף תווים מיוחדים למשל אני רוצה להחליף את תו
my path is /tmp/test/aaa
/
ל //
זה נראה משהו כזה$ sed 's/\//\/\//g' test.txt
my path is //tmp//test//hello
לא כיףבמקום לסבול אפשר להשתמש בסינטקס הבא שמחליף את תווי הבקרה בתו אחר
$ sed 's!/!//!g' test.txt
my path is //tmp//test//hello
אז מה היה פה בעצם? החלפנו את השימוש בתו הבקרה /
לתו !
, הסינקטס קריא יותר וניתן להבנה בקלות גם לבני אנושForwarded from Yuval Meshorer
יש לי עוד אחד חמוד שלא ראיתי פה:
כתבתם קובץ ושכחתם להוסיף לו סיומת? בטח תשתמשו ב-mv, אז תעשו את זה נכון:
מה שזה עושה זה "מפרק" את הארגומנט למה שבא לפני עם התוספת ובלי:
כתבתם קובץ ושכחתם להוסיף לו סיומת? בטח תשתמשו ב-mv, אז תעשו את זה נכון:
$ touch file
$ mv file file.txt
OR
$ touch file
$ mv file{,.txt}
מה שזה עושה זה "מפרק" את הארגומנט למה שבא לפני עם התוספת ובלי:
$ echo a{,b}
a ab
$ echo a{,b,c}
a ab ac
$ echo a{b,}
ab a
$ echo {b,}a
ba a
$ echo {,b}a
a ba
פקודת
רוצים לדבג סקריפט ולראות מה type של משתנה מסויים?
ניתן לעשות זאת על ידי שימוש בפקודת
לפקודה יש שימוש עיקרי בהגדרת type של משתנים לפני השימוש בהם ואת זה תקראו בהרחבה בגוגל.
דבר נחמד שהפקודה מאפשרת לעשות הוא לחפש ערכים בתוך משתנים שקיימים במערכת או כאלו שכבר יצרנו, זה נראה כך
declare
לחיפוש משתנים וערכים במערכתרוצים לדבג סקריפט ולראות מה type של משתנה מסויים?
ניתן לעשות זאת על ידי שימוש בפקודת
declare -p
$ text='some text here'כפי ששמתם לב התשובה שחוזרת כוללת את התווים
$ echo $text
some text here
$ declare -p text
declare -- text="some text here"
$ arr=($text)
$ declare -p arr
declare -a arr=([0]="some" [1]="text" [2]="here")
declare --או
declare -a, זוהי הדרך בה הפקודה מחזירה את היצוג של הערך,
—
אומר שאין הגדרה מסויימת לערך (בבאש אין ערך מוגדר למשתנה על פי תוכן) סימון -a
אומר לנו שמדובר על arrayלפקודה יש שימוש עיקרי בהגדרת type של משתנים לפני השימוש בהם ואת זה תקראו בהרחבה בגוגל.
דבר נחמד שהפקודה מאפשרת לעשות הוא לחפש ערכים בתוך משתנים שקיימים במערכת או כאלו שכבר יצרנו, זה נראה כך
$ declare | grep some
arr=([0]="some" [1]="text" [2]="here")
text='some text here'
$ declare | grep snap
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
XDG_DATA_DIRS=/usr/share/plasma:/usr/local/share:/usr/share:/var/lib/snapd/desktop
להחסיר מידע לא רלוונטי בפקודת
המידע שהפקודה מחזירה הינו בביטים שפה שפחות בהירה לרובנו, בכדי להציג את נפח האחסון בצורה דבורה אנו מוסיפים את הדגל
בלינוקס כמו בלינוקס יש עוד אפשרויות להגדיר כוננים, גם כאלו שאינם פיזיים אלא מזוהים על ידי המערכת כפיזיים, למשל משתמשי סנאפ יופתעו לראות את שפע הכוננים הוירטואלים שנוצרו יש מאין, כל התקנה יוצרת loop משלה.
פקודת
בתמונה אחרי ולפני.
df
פקודת df
מאפשרת לנו להציג מידע על כונני האחסון שקיימים במערכת, כמה נפח הם לאיפה הם מעוגנים וכמה נפח נותר בכל כונן.המידע שהפקודה מחזירה הינו בביטים שפה שפחות בהירה לרובנו, בכדי להציג את נפח האחסון בצורה דבורה אנו מוסיפים את הדגל
df -h
והתוצאות חוזרות ב mb / gb וכו' איזי פיזי עד כאן כולנו מכירים.בלינוקס כמו בלינוקס יש עוד אפשרויות להגדיר כוננים, גם כאלו שאינם פיזיים אלא מזוהים על ידי המערכת כפיזיים, למשל משתמשי סנאפ יופתעו לראות את שפע הכוננים הוירטואלים שנוצרו יש מאין, כל התקנה יוצרת loop משלה.
פקודת
df
מאפשרת להחסיר מידע מהתוצאות על ידי דגל -x
ומתן שם ה filesystems של הכונן, אם נמשיך עם הדוגמה של סנאפ במידה ונגדיר שלא יוצג תוכן ממערכת קבצים squashfs
(מערכת הקבצים שסנאפ משתמשת בה) הפקדה תציג את כל הכוננים מלבד אלו של סנאפ.בתמונה אחרי ולפני.
להחזיר פלט של פקודה כאילו הוא קובץ
ישנן פקודות שעובדות רק על קבצים, למשל פקודת
פקודת
בכדי להעביר פלט של פקודה כאילו הוא קובץ כל שיש לעשות הוא להריץ את הפקודה בצורה הבאה
אותו רעיון יעבוד לנו גם עם פקודת
ישנן פקודות שעובדות רק על קבצים, למשל פקודת
diff
פקודת
diff
מאפשרת לקבל שני קבצים ולהציג אלו חלקים שונים בין הקבצים, לעיתים נרצה להעזר בפקודת diff
כדי להציג הבדלים בפלט של פקודות אחרות ולא בין קבצים.בכדי להעביר פלט של פקודה כאילו הוא קובץ כל שיש לעשות הוא להריץ את הפקודה בצורה הבאה
(some_command)>
, הסוגריים תוחמות את הפקודה והאופרטור >
מעביר את הפלט (stdout) של הפקודה בסוגריים כקלט (stdin) לפקודה שהורצה, למשל הפקודה הלא שימושית הבאה שפשוט תעביר קלט לפקודת cat
cat <(df -h)
אותו רעיון יעבוד לנו גם עם פקודת
diff
במידה ונעביר את הפלט של הפקודות שלנו כאילו הן קלט/קריאה מקובץ נוכל להשתמש ב diff
להשוואות תוצאות של פקודות diff <(df -h -x ext4) <(df -h)
נעים להכיר Zsh (Z Shell) המוכר בפי העם זיש.
למי שלא מכיר את Zsh מדובר על מעטפת ללינוקס מקבילה ל Bash.
מה היתרון של Zsh? זיש פשוט ידידותי יותר למשתמש ומתיימר להיות כלי עבודה יעיל יותר.
רגע רק שניה זה ערוץ טיפים לבאש איך הגענו לזיש?
אז כך מסתבר שלZsh יש תמיכה מלאה בכל מה שקשור לבאש. פקודות, סקריפטים, קיצורי דרך, בקיצור כל מה שיש לבאש להציע קיים גם בזיש וזה חוץ משאר הצעצועים תוספים ערכות נושא שזיש מאפשרת.
הנה מה שהולך אצלי לאחרונה
סקריפטים: באש
טרמינל: זיש
לסיכום צעצוע נחמד לעבודה כזה שעשוי לחסוך לכם זמן, עם תאימות מלאה לאחור בכל הקשור לBash
נ.ב. קיימת מעטפת נוספת בשם Fish שנוחה ויעילה יותר מזיש ובאש, לא המלצתי עליה כי היא לא תואמת לבאש ועל כן היא פחות רלוונטית.
למי שלא מכיר את Zsh מדובר על מעטפת ללינוקס מקבילה ל Bash.
מה היתרון של Zsh? זיש פשוט ידידותי יותר למשתמש ומתיימר להיות כלי עבודה יעיל יותר.
רגע רק שניה זה ערוץ טיפים לבאש איך הגענו לזיש?
אז כך מסתבר שלZsh יש תמיכה מלאה בכל מה שקשור לבאש. פקודות, סקריפטים, קיצורי דרך, בקיצור כל מה שיש לבאש להציע קיים גם בזיש וזה חוץ משאר הצעצועים תוספים ערכות נושא שזיש מאפשרת.
הנה מה שהולך אצלי לאחרונה
סקריפטים: באש
טרמינל: זיש
לסיכום צעצוע נחמד לעבודה כזה שעשוי לחסוך לכם זמן, עם תאימות מלאה לאחור בכל הקשור לBash
נ.ב. קיימת מעטפת נוספת בשם Fish שנוחה ויעילה יותר מזיש ובאש, לא המלצתי עליה כי היא לא תואמת לבאש ועל כן היא פחות רלוונטית.
ניתוח בעיות בעזרת journalctl --follow
הפקודה הראשונה
הפקודה השניה
הבעיה עם הפקודה הזאת היא שכל הזמן נטען מידע לחדש ללוגים ולגלול מטה כל הזמן לא הכי נח שיש, לכבוד כך ישנה אפשרות שמקלה על העניין ומזרימה את המידע בזמן אמת.
קורה לא פעם שאנו מנסים לחבר התקן למערכת והוא לא עובד, ניסיון לקבל עזרה ברשת בדרך כלל מגיע לכך שצריך פלט של שתי הפקודות הבאותהפקודה הראשונה
lsusb
פקודה המציגה את כל חיבורי ה usb שמזוהיים על ידי לינוקס, בדרך כלל חיבור שלא מזוהה על ידי lsusb
מציג בעיה מורכבת יותר, במידה והוא אכן מזוהה על ידי lsusb עוברים לפקודה הבאה כדי לנסות להבין למה בכל אופן המערכת לא משתמשת בהתקן החדש.הפקודה השניה
journalctl
מדובר על פקודה שמציגה את הרישומים של המערכת לגבי מה שקורה בה, איזה חיבורים נכנסים ואלו תהליכים קרו בעקבות כך, זוהי בעצם הדרך שלנו לנסות להבין למה התקן שזוהה על ידי המערכת בכל אופן איזה פעיל בה.הבעיה עם הפקודה הזאת היא שכל הזמן נטען מידע לחדש ללוגים ולגלול מטה כל הזמן לא הכי נח שיש, לכבוד כך ישנה אפשרות שמקלה על העניין ומזרימה את המידע בזמן אמת.
journalctl --follow
ברגע שמשתמשים בדגל --follow
כל מידע שמערכת רושמת מוצג מיד למסך בלי צורך לגלול, זה סתם נחמד לראות איך דברים באמת עובדים במערכת אבל זה בהחלט נח יותר לעבודה בזמן פתרון בעיות.להרחיב את יכולות Bash על ידי shopt
לBash יש לא מעט אפשרויות מובנות במעטפת שאינן מופעלות ברירת מחדל, אנו לא מדברים על הוספת פונקציות לbashrc. או הוספת פלאגינים אלא על פקודת
באש שומרת לעצמה כלי הגדרה הקרוי shopts, הרצה של הפקודה תציג לכם רשימה נאה של אפשרויות שרובן אינן מאופשרות.
ההרצה הבאה תפעיל את הפיצ'ר הגאוני
למשל פקודה כמו זאת
.
דיברנו בעבר על מעטפות (Shells) שונות ללינוקס כאלו שנותנות יותר יכולות ופרודוקטיביות, במידה והחלטתם שבאש זאת המעטפת שלכם עדין ישנם כמה דברים שעשויים לשפר לכם את החוויה והשימוש בו.לBash יש לא מעט אפשרויות מובנות במעטפת שאינן מופעלות ברירת מחדל, אנו לא מדברים על הוספת פונקציות לbashrc. או הוספת פלאגינים אלא על פקודת
shopts
.באש שומרת לעצמה כלי הגדרה הקרוי shopts, הרצה של הפקודה תציג לכם רשימה נאה של אפשרויות שרובן אינן מאופשרות.
ההרצה הבאה תפעיל את הפיצ'ר הגאוני
autocd
שמאפשר כניסה לתיקיות רק על ידי רישום השם שלהם בלי להקיש cd
כל פעם (s like set-).shopt -s autocd
והפקודה הבאה שתשלול מהפיצ'ר את החירות שלו (u like unset-)shopt -u autocd
תיעוד לכל האפשרויות תוכלו למצוא בלינק הבא, הנה כמה שתרצו להכירautocd
- כניסה אוטומטית לתיקיותhistappend
- שמירת פקודות להיסטוריה מכל חלונות הטרמינל שפתוחותglobstar
- הפעלת פקודות גם בתתי היררכיה למשל פקודה כמו זאת
ls **/*.py
תעלה תוצאות גם מתיקיות בעומק 5 בהיררכיה.
www.gnu.org
The Shopt Builtin (Bash Reference Manual)
Previous: The Set Builtin, Up: Modifying Shell Behavior [Contents][Index]
Deleted Account
טיפ שימושי נוסף שהיה צריך להישלח מזמן בעבר דברנו על אפשרות להריץ את הפקודה האחרונה שהרצנו על ידי שימוש ב!! ישנה אפשרות להעביר את הפרמטר האחרון שהעברנו לפקודה על ידי !$ דוגמה >> /tmp$ mkdir test >> /tmp$ cd !$ cd test >> /tmp/test$ במקום להכניס את השם של…
לקבל את כל הפרמטרים עם
הבעיה מתחילה כשיש רשימה של פרמטרים במידה ונריץ
והחלק שבאמת כיף הוא שאפשר להכניס את זה כחלק מפרמטרים אחרים
*!
בעבר כתבתי על שימוש ב $!
כדי להעביר את הפרמטר האחרון שהשתמשתי בו בפקודה מסוימת לפקודה חדשה.הבעיה מתחילה כשיש רשימה של פרמטרים במידה ונריץ
$!
נקבל רק את הפרמטר האחרון ולא את כל רשימת הקבצים שהזנו$ touch app.js index.html internal.css
$ echo !$
internal.css
במידה ונרצה לקבל את כל הפרמטרים נוכל להריץ *!
והחלק שבאמת כיף הוא שאפשר להכניס את זה כחלק מפרמטרים אחרים
$ touch app.js index.html internal.css
$ zip test.zip !*
zip test.zip app.js index.html internal.css
updating: app.js (stored 0%)
updating: index.html (stored 0%)
updating: internal.css (stored 0%)