תוציאו את המיטב מהטרמינל שלכם

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

תמונת היום

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

Bing

משיכת כתובת ה - URL של תמונת היום מ - bing:

$ printf "http://bing.com/az/hprichbg/rb/" \
 && curl bing.com -Ls | grep -oE "\w+.jpg" | head -n1

אפשר להגדיל לעשות, ולהגדיר את התמונה כרקע עם feh:

$ url=$(printf "http://bing.com/az/hprichbg/rb/" \
  && curl bing.com -Ls | grep -oE "\w+.jpg" | head -n1)
$ feh --bg-scale --no-fehbg "$url"

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

set-wallpaper() {
  name=$(curl bing.com -Ls | grep -oE "\w+.jpg" | head -n1)
  path="/home/$USER/Pictures/${name}"
  if [ -f "$path"  ];then
    feh --bg-scale --no-fehbg "$path"
  else
    curl -o "$path" -Ls "http://bing.com/az/hprichbg/rb/${name}"
    feh --bg-scale --no-fehbg "$path"
  fi
}

Nasa

מדי פעם אני נכנס לאתר של Nasa, יש שם אחלה תמונות (: כל יום מתפרסמת תמונה שנקראת “Astronomy Picture of the Day”.
למזלי, החבר’ה בנאסא עשו לי את החיים קלים עם API שמאפשר למשוך את ה - URL של התמונה בקלות.

$ curl -s https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY \
  | python -c "import sys, json; print(json.load(sys.stdin)['url'])"

אני משתמש ב - feh על מנת להגדיר את תמונת הרקע שלי, במידה ואתם משתמשים ב - gnome תשתמשו ב - gsettings, על xfce תשתמשו ב - xfconf וכן הלאה.

השוואת תאריכים

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

datediff() {
  day_1=$(date -d "$1" +%s)
  day_2=$(date -d "$2" +%s)
  echo $(( (day_1 - day_2) / 86400   )) days | sed 's/-//g'
}

כשתצטרכו לבדוק כמה זמן עבר מאז שהזמנתם את ה - Raspberry pi שלכם, תריצו:

$ datediff '01 aug' '20 aug'
19 days

איתור חבילה בארץ

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

def parse(data):
    data = json.loads(data)['itemcodeinfo']
    tags = re.findall(r'<tr>(.*?)</tr>', data)
    try:
        header = tags.pop(0) # remove header
    except Exception as e:
        sys.stdout.write("error: invalid tracking number.\n")
        sys.exit(0)

    for tag in tags[::-1]:
        col = re.findall(r'<td>(.*?)</td>', tag)
        for item in col:
            if col[-1] == item:
                sys.stdout.write("%s." % (item))
                break
            if item:
                sys.stdout.write("%s -> " % (item))
        sys.stdout.write("\n")

def track(tracking_number=None):
    url = "%s" % (URL % (tracking_number))
    data = http_get_request(url)
    parse(data)

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

$ trackpkg 0011223344551
01/01/2017 -> Received from some country.
02/01/2017 -> Awaiting customs inspection.
03/01/2017 -> Released from customs and forwarded for sorting.

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

בדיקת דואר-אלקטרוני

אחד הפיצ’רים היותר שימושים ב - Gmail, הוא הפיד URL שמאפשר לבדוק האם התקבלו הודעות חדשות, מבלי להתחבר לממשק.
חשוב לזכור: הרצת הפקודה מהטרמינל אינה מומלצת עם שם משתמש וסיסמא חשופים! תשתמשו בסקריפט עם קובץ pgp מוצפן.

$ data=$(curl -s -u "USER:PASSWORD" https://mail.google.com/mail/feed/atom)
$ printf "$data" | grep -oPm1 "(?<=<title>)[^<]+" | wc -l
12

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

$ data=$(curl -s -u "USER:PASSWORD" https://mail.google.com/mail/feed/atom)
$ printf "$data" | grep -oPm1 "(?<=<title>)[^<]+"
Hello, World
Email from x.

אם אתם משתמשים באימות דו-שלבי, תיצרו “App password” ספציפי לפיד.

תהליכים לבני-אדם

הפקודה ps מציגה את התהליכים הרצים במערכת, אם תרצו ליצור פליט קריא יותר, תריצו את הפקודה:

$ ps ax --sort -pcpu,-%mem -o pcpu,comm,%mem \
| grep -v 0.0 | grep -v ps

%CPU COMMAND         %MEM
 6.0 bash             0.2
 3.0 bash             0.1
 1.2 vim              0.2
 0.9 Xorg             0.7

בדיקת יתרה בארנק Bitcoin

שימוש ב - Blockchain API בכדי לקבל את מצב היתרה של ארנק ביטקוין.

$ curl -sL blockchain.info/q/addressbalance/1PC9aZC4hNX2rmmrt7uHTfYAS3hRbph4UN \
| python -c 'import sys;print("%.09f BTC" % (int(sys.stdin.read()) / 100000000))'
0.011884400 BTC

כתובת ה - bitcoin בדוגמא היא של ה - FSF, שנו אותה בהתאם. תשתדלו לא לנצל את ה - API כי אתם תיחסמו די מהר.

כלים למפתחים

קיצור כתובת URL

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

gitio() {
  if [ -z "${1}" -o -z "${2}"  ]; then
    echo "Usage: gitio [url] ...";
    return 1;
  fi;
  curl -i http://git.io/ -F "url=${2}" -F "code=${1}";
}

העלאת קבצים

הדרך הכי מהירה להעלאת קבצים מהטרמינל היא transfer.sh. לא הייתי ממליץ על העברת קבצים עם תוכן רגיש, אבל לשאר זה מעולה. את קוד המקור של השרת תוכלו למצוא פה (נכתב ב - Go)

upload-file() {
  if [ -z ${1} -o -z "${2}" ];then
    echo "Usage: upload-file [file] [name]"
    return 1
  fi
  curl --upload-file "${1}" "https://transfer.sh/${2}"
}

גילוי כתובת IP

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

$ curl  ifconfig.io
0.0.0.0
$ curl httpbin.org/ip
{
  "origin": "127.0.0.1"
}

בדיקת גרסת הפיתוח האחרונה של לינוקס

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

$ curl -Ls https://github.com/torvalds/linux/releases \
| grep -oPm1 "(?<=<pre class=\"text-small text-gray\">)[^<]+"
Linux 4.14-rc3

הורדת חבילה - AUR

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

aur-dl() {
  if [ -z "$1" ];then
    echo "Usage: aur-dl [package name] ..."
    return 1
  fi

  pkg_name="${1}"
  curl -O -L "http://aur.archlinux.org/cgit/aur.git/snapshot/${pkg_name}.tar.gz" -s -f
  if [ $? -eq 22  ];then
    echo "${pkg_name} not found."
    # rm "${pkg_name}.tar.gz"
    return 1
  fi
}

הסוף.

לא באמת הסוף, כי הפוסט יתעדכן באופן קבוע.

Email Facebook Google LinkedIn Print Twitter
)