Pisanie skryptów w systemie Linux to z pewnością przydatna umiejętność dla każdej osoby w świecie IT, z pewnością kluczowa dla uczniów techników informatycznych, studentów informatyki, czy dla przyszłych sysadminów. Może okazać się równie cenna dla „zwykłych” użytkowników. Umiejętność pisania skryptów w systemie Linux, pozwoli nam na wiele rzeczy, od automatyzacji nudnych i powtarzalnych zadań, aż po tworzenie własnych aplikacji!
Jeśli nie wiesz czym jest Linux i chcesz się dowiedzieć, zapraszamy do naszego artykułu: Linux – podstawowe informacje.
Na skróty:
- – Jak napisać skrypt w bashu?
- – Jak uruchamiać skrypt w bashu?
- – Tworzenie zmiennych w bashu
- – Tworzymy własny skrypt do kopii zapasowych!
- – Automatyzujemy nasz skrypt
- – Podsumowanie
Jak napisać skrypt w bashu?
Przede wszystkim potrzebujemy środowiska, w którym będziemy mogli te skrypty wykonywać. Jeśli nie jesteś użytkownikiem Linuxa – sprawdź nasz artykuł, w którym dowiesz się jak uruchamiać skrypty Linuxowe w systemie Windows!
Jeśli masz już swoje środowisko w którym możesz wykonywać linuxowe komendy, możemy zaczynać! Na samym początku tworzenia skryptu, otwórz wybrany przez siebie edytor tekstu, stwórz nowy plik i zapisz go pod nazwą np. skrypt.sh – ważnym jest, by rozszerzeniem Twojego pliku było .sh.
Teraz gdy mamy już gotowy plik, możemy zabrać się za pisanie skryptu. W pierwszej linijce, należy umieścić tzw. hashbang i zdefiniować powłokę, która będzie odpowiedzialna za wykonanie zawartych w skrypcie instrukcji.
#!/bin/bash
echo "Witaj świecie!"
Powyższy kod po uruchomieniu, wyświetli nam w konsoli tekst – „Witaj Świecie!”.
Jak uruchamiać skrypt w bashu?
Na początek uruchamiamy konsolę/terminal i komendą cd przechodzimy do katalogu, w którym zapisaliśmy nasz skrypt. W naszym przypadku zrobimy to komendą:
cd /home/user/Pulpit/skrypty/
Niektóre dystrybucje oferują również możliwość otworzenia konsoli z poziomu graficznego – np. Ubuntu – wystarczy otworzyć folder w którym jest nasz skrypt, kliknąć prawym przyciskiem myszy w pustym miejscu i wybrać pozycję Otwórz terminal tutaj – efekt końcowy jest taki sam, jak po wykonaniu powyższej komendy.
Gdy znajdziemy się już w katalogu, w którym znajduje się nasz skrypt, wystarczy wpisać komendę:
sh skrypt.sh
Analogicznie możesz nadać uprawnienia wykonywania dla swojego skryptu komendą:
chmod +x skrypt.sh
i od teraz, możesz skrypt uruchamiać po prostu wpisując w terminalu:
./skrypt.sh
Efekt końcowy jest taki sam, jak przy wykorzystaniu komendy sh skrypt.sh.
Tworzenie zmiennych w bashu
Jeśli nie miałeś nigdy styczności z programowaniem, to możesz nie wiedzieć, czym jest zmienna. Zmienną można opisać jako pudełko, które przechowuje jakąś wartość. Dla przykładu możemy utworzyć zmienne, które będą przechowywać Twoje imię i dzisiejszą datę.
#!/bin/bash
Imie="Dominik"
Data=`date`
echo "Cześć ${Imie}, dzisiejsza data to: ${Data}"
W powyższym przykładzie stworzyliśmy zmienną o nazwie „Imie„, która przechowuje wartość „Dominik”. Stworzyliśmy też zmienną „Data”, która przechowuje aktualną datę. Istotną różnicą jest sposób zapisu – „Imie”, czyli ciąg znaków jest zapisany w cudzysłowie – oznacza to wartość typu string, czyli po prostu tekst. Natomiast „Data” ma przypisaną zawartość pomiędzy znakiem, który nosi nazwę grawis (backtick). Oznacza to mniej więcej tyle, że do zmiennej „Data” zostanie przypisana zawartość, która zostanie zwrócona z komendy date.
Cześć Dominik, dzisiejsza data to: Wtorek 27, Wrzesień, 2022 | 9:15.45
Skrypt w systemie linux – tworzący kopię zapasową (backup) wybranego folderu
Znasz już podstawy tworzenia skryptów w systemie linux, teraz czas nabrać trochę doświadczenia i zrobić coś, co faktycznie może się przydać. Pracujesz nad jakimś projektem? Może piszesz jakąś pracę? A może chciałbyś mieć kopię zapasową swoich zdjęć, czy innych plików? Prosty skrypt zapewni Ci spokojny sen – gdy przez przypadek usuniesz jakiś plik lub naniesiesz jakieś zmiany (a opcja Cofnij, nie zadziała) i nie będziesz mógł ich przywrócić do pierwotnego stanu. Wtedy właśnie kopia zapasowa może okazać się najbardziej potrzebna. 😊
Przygotujemy prosty skrypt w bashu, który będzie tworzył kopię zapasową wybranego przez nas folderu, kompresował ją (dla zaoszczędzenia przestrzeni dyskowej) i zapisywał w wybranym przez nas miejscu.
#!/bin/bash
Data=`date +"%H:%M_%d-%m-%y"`
Pliki="/home/user/Pulpit/moje-pliki"
Lokalizacja_kopii="/home/user/Pulpit/backup"
tar -zcpf ${Lokalizacja_kopii}/kopia-${Data}.tar.gz -C ${Pliki} .
W zmiennej Pliki przechowujemy adres do folderu, którego kopię zapasową chcemy tworzyć. W moim przypadku nazwaliśmy ten folder moje-pliki. W zmiennej Lokalizacja_kopii, jak nazwa wskazuje, mamy adres folderu, w którym będzie przechowywana nasza kopia zapasowa. W ostatniej linijce natomiast mamy komendę, która jest odpowiedzialna za kompresowanie naszych plików oraz skopiowanie ich do odpowiedniego miejsca. Skrypt zapisze nasz folder w skompresowanym archiwum o nazwie kopia-(aktualna_data).tar.gz.
Wskazówka: Warto jako lokalizację naszej kopii zapasowej wybrać np. zewnętrzny dysk podłączony do komputera – wtedy nawet w przypadku awarii naszego komputera / dysku, nasz backup będzie bezpieczny.
Automatyzacja tworzenia kopii zapasowych w systemie linux
Teraz gdy mamy już stworzony skrypt, który stworzy nam kopię zapasową ważnych dla nas plików, warto byłoby go zautomatyzować. Dzięki temu, nie będziemy musieli pamiętać o stworzeniu kopii ręcznie – linux zrobi to za nas. Do tego celu wykorzystamy jedno z najpotężniejszych i najważniejszych narzędzi dostępnych w systemie Linux (przynajmniej tak często określają go wykładowcy IT) – czyli Crona (crontab). Pozwala on cyklicznie wykonywać różne komendy – np. komendę uruchamiającą nasz skrypt. Aby dodać zadanie do harmonogramu crontaba, należy edytować jego plik konfiguracyjny. Najprościej zrobić to komendą:
crontab -e
W konsoli uruchomi nam się edytor crontaba w którym możemy dopisać zadania, które ma on dla nas wykonać. Cron korzysta z własnego sposobu określania ram czasowych, w których ma się uruchamiać.
- pierwsza kolumna oznacza minutę uruchomienia polecenia – [0-59],
- druga to godzina – [0-23],
- trzecia to dzień miesiąca – [1-31],
- czwarta to miesiąc – [1-12],
- piąta to dzień tygodnia – [0-7], 0 i 7 oznaczają niedzielę.
Najprościej zrozumieć crontaba na przykładzie.
Skrypt.sh uruchomi się co pół godziny: 11:30, 12:00…
*/30 * * * * sh /home/user/Pulpit/skrypt.sh
Skrypt uruchomi się co zegarową godzinę: 12:00, 13:00…
0 * * * * sh /home/user/Pulpit/skrypt.sh
Skrypt uruchomi się co trzy godziny: 12:00, 15:00…
* */3 * * * sh /home/user/Pulpit/skrypt.sh
Jest również narzędzie, które pomoże Ci przygotować bardziej skomplikowane ramy czasowe dla Twojego crontaba – Crontab.guru.
Miejsca w których znajdują się gwiazdki lub liczby oznaczają po kolei:
– minutę (dowolna liczba z przedziału 0-59)
– godzinę (dowolna liczba z przedziału 0-23)
– dzień miesiąca (dowolna liczba z przedziału 1-31)
– miesiąc (dla przykładu: 8 – będzie oznaczać „w sierpniu”)
– dzień tygodnia (dla przykładu: 1 – będzie oznaczać „w poniedziałek”)
Podsumowanie
Po utworzeniu skryptu i podpięcia go do crontaba, mamy prosty system automatycznych kopii zapasowych, który tworzy się cyklicznie – w zależności od naszych potrzeb.
System ten można rozbudować na wiele różnych sposobów. Możesz stworzyć drugi skrypt, który będzie kasował pliki kopii zapasowej, starsze niż np. 7-14 dni. Dzięki temu zaoszczędzisz miejsce na dysku. Innym sposobem będzie wrzucanie plików naszej kopii na serwer w chmurze – np. po utworzeniu kopii, uruchamianie transferu FTP i upload na serwer! W ten sposób Twój backup będzie jeszcze lepiej zabezpieczony przed awarią. 😊