Message of the day - MOTD
Message Of The Day (MOTD)
Co to jest MOTD?
Message Of The Day (MOTD) to tekst wyświetlany po zalogowaniu do systemu, zazwyczaj zawiera powitanie lub najważniejsze informacje o systemie. W systemach Unix/Linux plik /etc/motd jest prostym plikiem tekstowym, który nie interpretuje poleceń, wyświetla jedynie statyczną zawartość.
Dlaczego plik /etc/motd nie może wykonywać poleceń?
Plik /etc/motd jest tylko zwykłym plikiem tekstowym i nie jest interpretowany jako skrypt ani polecenie. Aby mieć dynamiczne i kolorowe wiadomości, tworzymy osobny skrypt Bash, który jest wywoływany podczas logowania przez plik startowy powłoki.
Skrypt motd – sekcje i wyjaśnienia poleceń
#!/bin/bash
#!/usr/local/bin/bash
Wyjaśnienie: Ścieżka do interpretera bash w systemach, gdzie bash jest zainstalowany w /usr/local/bin.
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
CYAN='\033[36m'
RESET='\033[0m'
Wyjaśnienie: Definiujemy zmienne reprezentujące kody ANSI do kolorowania tekstu na terminalu.
echo -e "${CYAN} __ __ _____ ____ ____ ______ __"echo -e "| \\/ |_ _|___ \\/ ___|| _ \\ \\ / /"echo -e "| |\\/| | | | __) \\___ \\| |_) \\ \\ / / "echo -e "| | | | | | / __/ ___) | _ < \\ V / "echo -e "|_| |_| |_| |_____|____/|_| \\_\\ \\_/ ${RESET}"
Wyjaśnienie: Wyświetlamy kolorowy napis ASCII art symbolizujący nazwę serwera w stylu retro. Polecenie echo -e interpretuje kody ucieczki dla kolorów, a instrukcje formatowania nadają kolor i resetują go po wyświetleniu.
LOAD=$(sysctl -n vm.loadavg | awk '{print $2, $3, $4}')
Wyjaśnienie: Pobieramy średnie obciążenie CPU (load average) korzystając z sysctl, a awk wyciąga drugą, trzecią i czwartą wartość z wyniku (odpowiednio 1-, 5- i 15-minutowy load).
MEM_TOTAL=$(sysctl -n hw.physmem)
MEM_TOTAL_MB=$((MEM_TOTAL / 1024 / 1024))
PAGE_SIZE=$(sysctl -n hw.pagesize)
FREE_PAGES=$(sysctl -n vm.stats.vm.v_free_count)
MEM_FREE_BYTES=$((FREE_PAGES * PAGE_SIZE))
MEM_FREE_MB=$((MEM_FREE_BYTES / 1024 / 1024))
Wyjaśnienie: Pobieramy całkowitą pamięć RAM i wyliczamy jej wartość w megabajtach. Następnie obliczamy ilość wolnej pamięci na podstawie liczby wolnych stron pamięci i rozmiaru strony. Wynik również jest konwertowany na megabajty.
echo -e "${YELLOW}Aktualne obciążenie CPU:${RESET} ${GREEN}${LOAD}${RESET}"
echo -e "${YELLOW}Pamięć całkowita:${RESET} ${GREEN}${MEM_TOTAL_MB} MB${RESET}"
echo -e "${YELLOW}Wolna pamięć:${RESET} ${GREEN}${MEM_FREE_MB} MB${RESET}"
Wyjaśnienie: Wyświetlamy pobrane wartości obciążenia CPU i pamięci RAM z kolorami, nadając nagłówkom i wartościom różne kolory dla czytelności.
df -h | awk -v CYAN="${CYAN}" -v GREEN="${GREEN}" -v RESET="${RESET}" '
NR>1 {
free_perc = 100 - gensub(/%/, "", "g", $5)
printf "%s%s%s: %s%d%%%s ", CYAN, $6, RESET, GREEN, free_perc, RESET
}
END {print ""}'
Wyjaśnienie: Polecenie df -h pokazuje rozmiary systemów plików w czytelnej formie. Za pomocą awk zliczamy procent wolnego miejsca (100 minus procent użycia z kolumny 5) i wyświetlamy punkt montowania (kolumna 6) razem z procentem wolnego miejsca, kolorując je odpowiednio.
count_process() {
ps aux | grep -w "$1" | grep -v grep | wc -l
}
COUNT_GAME=$(count_process "game")
COUNT_DB=$(count_process "db")
COUNT_AUTH=$(count_process "auth")
Wyjaśnienie: Definiujemy funkcję, która liczy liczbę procesów zawierających podany ciąg znaków w pełnej nazwie procesu. Następnie zliczamy liczbę obecnie działających procesów: "game", "db" oraz "auth".
color_status() {
if [ "$1" -gt 0 ]; then
echo -e "${GREEN}RUNNING (${1})${RESET}"
else
echo -e "${RED}NOT RUNNING${RESET}"
fi
}
echo -e "${YELLOW}Status procesów gry MT2SRV:${RESET}"
echo -e "game: $(color_status $COUNT_GAME)"
echo -e "db: $(color_status $COUNT_DB)"
echo -e "auth: $(color_status $COUNT_AUTH)"
Wyjaśnienie: Funkcja color_status przyjmuje liczbę procesów i zwraca tekst z informacją, czy procesy są uruchomione (zielony napis) lub nie (czerwony napis). Następnie wypisujemy status każdej aplikacji gry.
echo -e "${YELLOW}Szczegóły procesów game/db/auth:${RESET}"
ps aux | grep -E 'game|db|auth' | grep -v grep | awk -v GREEN="${GREEN}" -v RESET="${RESET}" '{print GREEN $0 RESET}'
Wyjaśnienie: Pokazujemy szczegóły działających procesów o nazwach zawierających "game", "db" lub "auth". Wynik jest kolorowany na zielono dla lepszej czytelności w terminalu.
Jak używać tego skryptu?
Skrypt zapisujemy jako plik wykonywalny, np. /etc/motd.sh. Nadajemy mu uprawnienia wykonania (chmod +x /etc/motd.sh) i wywołujemy go z pliku startowego powłoki, np. ~/.bash_profile lub globalnie w /etc/profile, dodając w nich linię:
/etc/motd.sh
Dzięki temu podczas każdego logowania do powłoki pojawi się dynamiczny i kolorowy Message Of The Day z najważniejszymi informacjami o systemie i stanie procesów.