Na zajęciach nauczymy się podstaw poruszania się po konsoli systemu GNU/Linux. Dowiemy się jak poruszać się w środowisku tekstowym, poznamy najważniejsze polecenia i uruchamiać programy działające w trybie tekstowym.
Systemy Linuksowe, a ściślej mówiąc, różne dystrybucje systemu GNU/Linux są najpopularniejszymi systemami operacyjnymi w środowisku serwerowym. W przypadku najpopularniejszych stron internetowych, możemy mówić o dominacji, gdyż ponad 95% serwerów, które na co dzień dostarczają nam treści do czytania, czy oglądania działają na Linuksie[1]. O ile na naszych komputerach najczęściej pracujemy na programach wykorzystujących Graficzny Interfejs Użytkownika (ang. GUI), to w systemach serwerowych najlepiej sprawdzają się środowiska tekstowe. Powody są dwa: rysowanie graficznego interfejsu wymaga zasobów obliczeniowych, które lepiej przeznaczyć na szybsze działanie żądanej usługi (np. strony WWW), po drugie, łatwiej jest napisać i utrzymać automatyzację pewnych czynności. Obrazując, skopiowanie pliku opis.txt
z jednego folderu do drugiego, to wywołanie polecenia:
cp /sciezka/do/pliku/opis.txt /nowe/miejsce/opis.txt
W trybie graficznym algorytm wyglądałby mniej więcej tak:
Powyższy opis zakłada, że program do automatyzacji wie, co klika w okienku, a nie operuje na poszczególnych pikselach ekranu. Jak widać, gdy wiemy, co chcemy zrobić, nawet samodzielne wpisanie polecenia w Terminalu1) może być szybsze niż sekwencja poleceń. A teraz wyobraźmy sobie, że musimy skopiować więcej plików, np. wszystkie z rozszerzeniem .txt
. Między innymi dlatego administratorzy i tzw. power userzy chętnie korzystają z tego magicznego okienka.
“Przed wyruszeniem w drogę, należy zebrać drużynę”[2], tj. przygotować sobie środowisko pracy. Z racji różnych form i miejsc prowadzenia zajęć, dokładny instruktaż przedstawi prowadzący zajęcia.
Poza zajęciami jest kilka możliwości, żeby kontynuować przygodę z Linuksem. Jeśli korzystasz z systemu Windows 10 lub 11 najłatwiej jest rozpocząć od WSL-a (Windows Subsystem for Linux). W skrócie, jest to funkcja systemu Windows, która udostępnia nam gotowe do użycia środowisko Linuksowe w ramach systemu Windows, łącząc niejako dwa odmienne światy. [3].
Studenci Wydziału Informatyki i Telekomunikacji mogą także skorzystać z dostępu zdalnego do serwera instytutowego. Logowanie odbywa się przez program ssh
lub PuTTY
. Dokładnych instrukcji udzieli prowadzący zajęcia.
Trzecia opcja to zainstalowanie Linuksa na maszynie wirtualnej2), np. VirtualBox. W ten sposób można zapoznać się z procesem instalacji systemów z rodziny GNU/Linux oraz bezpiecznie eksperymentować, nie narażając naszych danych na skasowanie. Na początek możesz zainteresować się dystrybucją Ubuntu, która ma najszersze wsparcie społeczności skupionej wokół Linuksa.
Czwarta opcja to instalacja Linuksa obok (lub zamiast :P) obecnego systemu operacyjnego. Tę opcję zostawiam dla odważnych.
Początki bywają trudne, a nasze wyglądają mniej więcej tak:
Cóż, program który mamy uruchomiony to Terminal, jest to nasze okienko na świat Linuksa. Wygląd i treść może się nieco różnić od zaprezentowanej powyżej, ale jedno jest pewne, ostatnia linijka tekstu. To jest prompt, w wolnym tłumaczeniu “znak zachęty”. Zachęty, rzecz jasna, do wpisania polecenia, bo komputer nie może się już doczekać, żeby coś dla nas zrobić.
W tym momencie możemy spróbować wydać pierwsze polecenie. Niech to będzie ls
, spróbuj teraz wpisać te dwie literki w to czarne okienko i naciśnij klawisz Enter. Zobaczysz prostą listę plików i folderów w katalogu, w którym się aktualnie znajdujesz. Co to znaczy? To, czemu wydajemy polecenia, nazywa się powłoką systemową (ang. shell), u nas jest to program bash
. Na razie wystarczy, że wiesz, że bash
analizuje to, co wpisujesz i próbuje wykonać żądane polecenie. Oprócz tego, powłoka przechowuje kilka dodatkowych informacji, a jedną z nich jest aktualny folder. W systemach z rodziny Linuksowej, najczęściej, na początku znajdziemy się w naszym folderze domowym (czyli miejscem na nasze osobiste dane). Na dysku to będzie ścieżka podobna do tej: /home/twoj_uzytkownik
. Zauważmy, że nie mamy tutaj dysków C:, D:, E:
, itd., ot to nieco inna filozofia pracy - mamy tylko jedno drzewo folderów. Na dokładniejsze omówienie tej sprawy przyjdzie czas, my skupmy się na podstawach. Reasumując, ls
wypisał nam zawartość naszego folderu domowego.
Zanim przejdziemy dalej, muszę powiedzieć o najważniejszym poleceniu, tj. man
(skrót od manual, czyli podręcznik). Jest to główne narzędzie dokumentacji podstawowych narzędzi w Linuksie. Być może nie jest to najbardziej porywająca lektura na świecie, ale zazwyczaj bardzo rzeczowa. To polecenie wywołuje się według wzoru: man [rozdział] polecenie
3), np. man ls
wyświetli nam szczegółową pomoc dla programu wypisującego zawartość folderu. Najczęściej dokumentacja jest w języku angielskim. Tylko od czasu do czasu możemy natrafić na przetłumaczony dokument.
Muszę wspomnieć, że sporą część dokumentacji można wygodnie przeglądać w przeglądarce internetowej. Przykładową stroną, której możemy używać jest https://linux.die.net/ - na start mamy wyszukiwarkę, co może nam pomóc. W większości poleceń warto też próbować uruchamiać je z parametrem -h
lub --help
, np. mkdir --help
.
Czas zrobić coś więcej. W tej sekcji zostawię Ci zbiór poleceń do uruchomienia i poeksperymentowania (nie bój się manuala!). Wszystkie wykorzystamy w późniejszym zadaniu.
cd
- zmiana folderucd ..
- przechodzi do folderu nadrzędnegocd
- wraca do folderu domowegocd jakis_folder
- przechodzi do folderu jakis_folder, o ile taki istniejemkdir
- stworzenie nowego folderurmdir
- usunięcie pustego folderutouch
- tworzy nowy plikcat
- wypisuje zawartość pliku na ekrancp
- kopiuje plikmv
- przenosi lub zmienia nazwę plikurm
- usuwa plik (ostrożnie, nie mamy Kosza)echo
- wypisuje na ekran to, co podamy jako argumentyJako wprawka spróbuj zrobić te zadania:
nowe
.nowe
.
Polecenia w Linuksie możemy sobie wyobrazić jako pudełka, które coś przyjmują i coś zwracają. Na schemacie będzie to wyglądało tak:
Typowo standardowym wejściem jest nasza klawiatura, a wyjściem jest nasz terminal. Na diagramie jest jeszcze wskazane standardowe wyjście komunikatów o błędach, domyślnie jest to też nasz terminal. Różnica jest w buforowaniu, czyli tym, jak szybko informacje z danego strumienia trafią do nas.
stderr
nie jest buforowane, więc cokolwiek tam trafi, od razu pojawi się na naszym ekranie (kosztem mniejszej kontroli nad ostatecznym wyglądem komunikatów).
Powyższe strumienie mają dwa zastosowania. Po pierwsze, możemy je przekierowywać, tj. poprosić system aby stdout
zamiast na ekran trafił do pliku. Wykonaj poniższe zadania, zobaczmy na przykładzie.
echo ala ma kota > plik.txt
cat plik.txt
Drugie zastosowanie to tzw. potoki, czyli łączenie poleceń. Na schemacie będzie to wyglądało tak:
Potoki wykonuje się według schematu: polecenie1 | polecenie2 | … | polecenieN
Oznacza to, że polecenie1
przekaże swój wynik na wejście polecenie2
, i tak dalej, aż do ostatniego polecenieN
, które swój wynik wypisze na ekran. Dodatkowo, polecenie1
może, lecz nie musi, przyjąć dane, które wpiszemy ręcznie na klawiaturze. Warto zauważyć, że nie wszystkie polecenia można lub jest sens łączyć ze sobą. Dane przekazywane są sekwencyjnie.
Jako przykład użyjemy polecenia tr
, które “tłumaczy” znaki, czyli je zamienia według podanego przepisu. Wykonaj poniższe polecenie, aby zobaczyć to na własne oczy.
echo ala ma kota | tr a-z d-za-c
Właśnie stworzyliśmy prosty potok szyfrujący wpisany tekst szyfrem Cezara [4]. Możliwości tutaj są dużo większe, ale na ten moment wystarczy, bo czas przejść do zadania.
Nasz administrator zostawił otwartego laptopa na stole w barze i poszedł do kolejki zamówić zapiekankę. Niesforni studenci Zbychu i Krycha zauważyli to i postanowili nieco napsocić. Jako, że kolejka była długa, a nasz kolega był zapatrzony w filmiki ze śmiesznymi kotkami, niczego nie zauważył. Pech chciał, że admin był zalogowany na naszym serwerze i Zbychu z Krychą usunęli nam naszą stronę zastępując czymś takim.
Studenci byli jednak na tyle mili, że zostawili nam kopię naszej strony, ale zabezpieczyli ją hasłem! Dodatkowo, porozrzucali niektóre pliki po trzech kontach na serwerze i teraz musimy się w tym odnaleźć. Chyba chcą się z nami zabawić i zostawili nam poszlaki, to miłe, pewnie liczą na ułaskawienie przez Dziekana. No zobaczymy. Aha, byłbym zapomniał, nasz administrator zauważył, że coś jest nie tak, ale tak był głodny, że skupił się na swojej zapiekance i o sprawie zapomniał. Gdy już wszyscy się dowiedzieli, że “ADMIN PUPA”, nasz admin znikł. To pewnie ta niezdrowa zapiekanka mu zaszkodziła. Tyle razy mu mówiłem, żeby nie jadł tego badziewia codziennie i teraz ma za swoje.
Jako, że nie możemy na niego liczyć, to musimy działać niekonwencjonalnie. Udało nam się ustalić hasła do kont stworzonych przez nasz psotliwy duet (zapisali je na kartce, którą zostawili w barze), ale ktoś teraz musi pociągnąć ten temat dalej. Liczę na waszą pomoc, bo sam trochę cykam się tej konsoli. Wiem tylko, że musicie się zalogować na te konta, porozglądać i przywrócić naszą stronę! A jak jeszcze ustalicie nr albumów tych studentów, to w ogóle będzie super. Skoro zostawili nam poszlaki, to pewnie się tam podpisali bardziej niż z imion. Nasz admin to raczej specjalista, ale myślimy, że trzech studentów 1. roku da radę.
Adres serwera, nazwy kont i hasła przekażę wam ustnie, takich rzeczy na papierze podobno nie wolno zostawiać. Tak przynajmniej mówił administrator.
W skrócie, zalogujcie się na serwerze, zobaczcie, co tam jest, podążajcie za poszlakami i rozwiążcie nasz problem! I pamiętajcie, macie cały zasób Internetu do wykorzystania. Kiedyś admin mi się zwierzył, że połowa jego pracy to umiejętne korzystanie z wyszukiwarek internetowych.
Numery albumów podajcie w tym linku: https://docs.google.com/forms/d/e/1FAIpQLScWLXc3eUA1-_QQ3AzPl3lC-yhtu6sAzU4O9Buv1ftCevyObw/viewform?usp=sf_link.
Przydatne komendy:
unzip
tr
Nasza strona powinna znajdować się w folderze /home/webquest<grupa>u1/strona
, w naszej kopii jest tylko jeden plik index.html, po prostu go podmieńcie, jak już znajdziecie jak.
man
oraz polecenie
musi się znaleźć w wywołaniu, natomiast rozdział
jest opcjonalny.