Ta lekcja ma na celu przypomnienie, takich trochę podstawowych poleceń stosowanych w Linuksie. Oczywiście zwrócę też uwagę na pliki konfiguracyjne, które odgrywają ważną rolę w funkcjonowaniu naszego systemu, a niejednokrotnie ich znajomość zdecydowanie ułatwia pracę.
Po zapoznaniu się z poleceniami służącymi do tworzenia użytkowników oraz sprawdzania adresacji sieciowej, warto przypomnieć sobie polecenie pwd. Wyświetla ono informację o bieżącym katalogu roboczym, czyli pełną ścieżkę lokalizacji, w której aktualnie się znajdujemy. Wykonujemy w konsoli polecenie:
$ pwd
Widzimy, że znajdujemy się w naszym katalogu domowym /home/administrator. Gdy przejdziemy do katalogu głównego systemu za pomocą polecenia:
$ cd /
i ponownie użyjemy pwd, system wyświetli ścieżkę katalogu głównego, czyli /.
Przebywając w katalogu głównym /, możemy wyświetlić jego zawartość. Służy do tego polecenie ls lub ls -l. Użycie tej drugiej opcji pozwala uzyskać uporządkowaną listę plików i katalogów wraz z informacjami o uprawnieniach, właścicielu, rozmiarze oraz dacie modyfikacji. Wpisujemy w konsoli:
$ ls -l
W rezultacie widzimy pełną zawartość katalogu głównego /.
Większość poleceń w systemie Linux oferuje dodatkowe parametry, które rozszerzają ich funkcjonalność. Aby je sprawdzić, możemy skorzystać z opcji pomocy --help lub z podręcznika systemowego man. W pierwszej kolejności używamy opcji pomocy:
$ ls --help
Wyświetlona lista parametrów jest jednak bardzo długa i nie mieści się w oknie terminala. Ponieważ nie mamy możliwości przewinięcia widoku do samego początku, musimy zastosować inne rozwiązanie.
W tym celu wykorzystujemy potok oraz program less, który pozwala na wygodne stronicowanie tekstu – klawiszem Enter przewijamy zawartość linia po linii, natomiast klawiszem Spacja strona po stronie. Wpisujemy polecenie:
$ ls --help | less
Teraz tekst zatrzymuje się na pierwszym ekranie, a my możemy swobodnie przeglądać pomoc systemową, nawigując również za pomocą strzałek w górę i w dół. Narzędzie less możemy połączyć z dowolnym poleceniem generującym długi strumień wyjściowy, na przykład:
$ ls -l | less
Aby wyjść z trybu przeglądania, naciskamy klawisz q.
Alternatywnym sposobem jest skorzystanie z podręcznika systemowego man. Wpisujemy polecenie:
$ man ls
Uzyskujemy w ten sposób dostęp do pełnej, oficjalnej dokumentacji polecenia. Nawigacja i przewijanie odbywają się w sposób identyczny jak w programie less, a wyjście z podręcznika realizujemy klawiszem q.
W systemie Linux jednym z najważniejszych katalogów jest /etc. Zawiera on większość plików konfiguracyjnych dotyczących działania systemu operacyjnego, sieci oraz zainstalowanych usług sieciowych. Dodatkowo znajdują się tam skrypty startowe uruchamiane podczas inicjalizacji systemu. W tym miejscu skupimy się na kilku kluczowych plikach, których znajomość jest niezbędna z punktu widzenia egzaminu zawodowego w kwalifikacji INF.02. Należą do nich:
Plik /etc/group został już omówiony szczegółowo w poprzedniej lekcji, dlatego w tym kroku zaczynamy od analizy pliku /etc/shells.
Aby wyświetlić zawartość pliku /etc/shells, otwieramy go w edytorze tekstowym za pomocą polecenia:
$ sudo nano /etc/shells
W pliku tym zdefiniowane są pełne ścieżki dostępu do powłok systemowych, z których mogą korzystać użytkownicy. Na zielono została zaznaczona powłoka, z której aktualnie korzystamy.
Kolejnym istotnym plikiem konfiguracyjnym jest /etc/fstab. W celu jego edycji lub podglądu wpisujemy:
$ sudo nano /etc/fstab
Plik ten składa się z wpisów, w których każdy wiersz odpowiada za jeden system plików i jest podzielony na 6 kolumn (pól). Prezentowany zrzut ekranu może nie być w pełni czytelny ze względu na specyfikę wirtualizacji w środowisku VMware, jednak na fizycznej stacji roboczej wpisy te mają bardzo uporządkowany układ.
Na zrzucie ekranu z maszyny fizycznej widzimy prawidłowo opisane dyski twarde oraz poszczególne partycje wraz z punktami ich montowania.
Następnym kluczowym plikiem systemowym jest /etc/passwd. Otwieramy go poleceniem:
$ sudo nano /etc/passwd
Możemy zauważyć, że w naszym systemie znajduje się trzech użytkowników posiadających dostęp do powłoki i możliwość logowania: root, administrator oraz user1 (zostali oni oznaczeni kolorem czerwonym). Każdy wpis w tym pliku składa się z pól oddzielonych dwukropkami, reprezentujących kolejno: nazwę konta użytkownika (kolor jasnozielony), informację o haśle (oznaczenie "x" oznacza, że hasło jest przechowywane w pliku cieni shadow – kolor różowy), unikalny identyfikator użytkownika UID (kolor żółty), identyfikator grupy podstawowej GID (kolor niebieski), pole informacyjne/komentarz (kolor ciemnozielony), katalog domowy użytkownika (kolor pomarańczowy) oraz domyślną powłokę systemową (kolor czerwony).
Przechodzimy do analizy pliku /etc/shadow, który zawiera poufne dane dotyczące haseł. Otwieramy go za pomocą polecenia:
$ sudo nano /etc/shadow
W pliku tym ponownie odnajdujemy wpisy dla użytkowników root, administrator oraz user1. Wszystkie parametry konta są rozdzielone dwukropkami. Znajdziemy tutaj następujące pola: nazwę użytkownika (kolor jasnozielony), zaszyfrowany skrót hasła (kolor niebieski), uniksową datę ostatniej zmiany hasła liczoną w dniach od 1 stycznia 1970 roku (kolor żółty), minimalną liczbę dni, jaka musi upłynąć przed kolejną zmianą hasła (kolor różowy), maksymalną liczbę dni ważności hasła (kolor fioletowy), liczbę dni wyprzedzenia, z jaką system zacznie ostrzegać o wygasaniu hasła (kolor pomarańczowy), liczbę dni po wygaśnięciu hasła, po których konto zostanie zablokowane, oraz datę wygaśnięcia konta (kolor biały).
Do zarządzania parametrami ważności i wygasania haseł w systemie służy dedykowane narzędzie chage. Aby sprawdzić składnię oraz opcje tego polecenia, korzystamy z pomocy systemowej:
$ chage --help
W rezultacie otrzymujemy przejrzyste zestawienie parametrów, które możemy zastosować podczas konfiguracji.
Na początku używamy parametru -l, który wyświetla szczegółowe informacje o statusie konta i ważności hasła. Sprawdzimy te parametry dla użytkownika user1. Wykonujemy polecenie:
$ sudo chage -l user1
Zwracamy uwagę na to, że odpytanie o te parametry wymaga uprawnień administratora, dlatego na początku polecenia musimy zastosować sudo. W przeciwnym razie system zablokuje operację i wyświetli komunikat o braku dostępu.
Używając parametru -E, możemy zdefiniować dokładną datę wygaśnięcia konta użytkownika. Domyślnie konto user1 ma ustawioną wartość określającą, że nigdy nie wygasa. Przyjmijmy założenie, że konto to powinno wygasnąć z dniem 22 marca 2027 roku. W tym celu wprowadzamy następującą komendę:
$ sudo chage -E 2027-03-22 user1
Gdy ponownie zweryfikujemy informacje o koncie za pomocą parametru -l, zauważymy, że nowa data wygaśnięcia została poprawnie zapisana w konfiguracji systemowej.
Narzędzie chage pozwala również na pracę w trybie interaktywnym, który uruchamiamy poprzez wywołanie polecenia z samą nazwą użytkownika, bez dodatkowych przełączników:
$ sudo chage user1
System przeprowadzi nas przez konfigurację, wyświetlając kolejne parametry, dla których możemy wprowadzić nowe wartości i zatwierdzić je klawiszem Enter. Pozostawienie pustego pola i wciśnięcie klawisza Enter zachowa dotychczasowe ustawienie, wskazane w nawiasie kwadratowym [ ]. Skonfigurujemy konto użytkownika user1, wprowadzając następujące wartości:
Na koniec sprawdzamy poprawność wprowadzonych zmian za pomocą polecenia sudo chage -l user1.
Jeżeli chcemy cofnąć ograniczenie czasowe i przywrócić domyślne ustawienie sprawiające, że konto nigdy nie wygaśnie, jako argument parametru -E przekazujemy wartość -1:
$ sudo chage -E -1 user1
Ponownie weryfikujemy status konta i widzimy, że ograniczenie zostało zniesione.
Możemy sprawdzić bezpośrednie odzwierciedlenie wprowadzonych zmian w pliku /etc/shadow. Otwieramy go za pomocą znanego już polecenia:
$ sudo nano /etc/shadow
Zauważamy, że wcześniej puste pola konfiguracyjne dla użytkownika user1 zostały uzupełnione o podane przez nas wartości. Warto pamiętać, że parametry te można modyfikować również poprzez bezpośrednią edycję tego pliku, jednak zalecaną i bezpieczniejszą metodą jest stosowanie polecenia chage.
Przechodzimy do drugiego istotnego narzędzia – passwd. Choć służy ono przede wszystkim do ustawiania i zmiany haseł, oferuje także dodatkowe opcje administracyjne. Aby zapoznać się z jego możliwościami, wyświetlamy pomoc systemową:
$ passwd --help
Na początku wykorzystujemy parametr -S, który pozwala sprawdzić skrócony status hasła danego użytkownika. Wykonujemy polecenie dla konta user1:
$ sudo passwd -S user1
Zastosowanie sudo jest tutaj obowiązkowe, ponieważ system nie zezwoli zwykłemu użytkownikowi na odczytanie tych informacji. Wynik polecenia składa się z 7 pól oznaczających kolejno od lewej strony: nazwę użytkownika, status hasła (L – zablokowane, NP – brak hasła, P – hasło aktywne), datę ostatniej modyfikacji hasła, minimalną liczbę dni przed kolejną zmianą, maksymalną liczbę dni ważności hasła, liczbę dni ostrzegania o wygasaniu oraz liczbę dni dopuszczalnego logowania po wygaśnięciu hasła.
W celu przetestowania zabezpieczeń zablokujemy możliwość logowania hasłem dla użytkownika user1. Wykorzystujemy do tego parametr -l (lock):
$ sudo passwd -l user1
Po wykonaniu polecenia sprawdzamy status hasła za pomocą przełącznika -S i widzimy oznaczenie L, które potwierdza pomyślne zablokowanie hasła. Przy próbie uwierzytelnienia się na zablokowane konto system odrzuci próbę logowania.
Aby odblokować konto i przywrócić możliwość logowania, stosujemy parametr -u (unlock):
$ sudo passwd -u user1
Ponownie weryfikujemy status konta i upewniamy się, że pojawiła się litera P, symbolizująca aktywne hasło. Dla ostatecznego potwierdzenia poprawności działania logujemy się na konto user1 i weryfikujemy, że proces przebiega bez zakłóceń.
W kolejnym kroku przyjrzymy się poleceniom monitorującym stan działania systemu. Rozpoczynamy od polecenia uptime, które wyświetla informacje o czasie nieprzerwanej pracy serwera. Wpisujemy w konsoli:
$ uptime
Podstawowy wynik dostarcza nam ogólnych danych diagnostycznych, ale możemy je wyświetlić w bardziej przystępnej formie. Zapoznajemy się z pomocą systemową:
$ uptime --help
Wykorzystując poznane przełączniki, możemy wyświetlić czas pracy w uproszczonym i bardziej czytelnym formacie:
$ uptime -p
Możemy także sprawdzić dokładną datę i godzinę uruchomienia systemu za pomocą polecenia:
$ uptime -s
Dzięki temu uzyskujemy precyzyjne i przejrzyste dane.
Następnym poleceniem jest date, które służy do wyświetlania oraz konfiguracji czasu systemowego. Wykonujemy polecenie bez dodatkowych parametrów:
$ date
Na ekranie pojawia się aktualna data i godzina. Aby poznać zaawansowane możliwości formatowania wyników, otwieramy pomoc systemową połączoną potokiem z programem less:
$ date --help | less
Pozwala to na wygodne przewijanie i analizowanie dostępnych opcji formatowania.
W dokumentacji pomocniczej odnajdujemy liczne parametry formatujące, które pozwalają dostosować wyświetlanie czasu i daty do własnych potrzeb. Na zrzucie ekranu zostały zaznaczone kluczowe opcje, które posłużą do stworzenia własnego szablonu prezentacji czasu.
Stosując wybrane opcje, przedstawimy bieżącą datę i godzinę w formacie: dzień-miesiąc-rok godziny:minuty:sekundy. W tym celu wpisujemy polecenie:
$ date '+%d-%m-%Y %H:%M:%S'
Uzyskujemy precyzyjnie sformatowany wynik. Kluczowym elementem składni jest umieszczenie znaku "+" bezpośrednio przed parametrami formatującymi oraz zastosowanie odpowiednich separatorów (np. myślników i dwukropków).
Za pomocą parametru --date możemy sprawdzić dzień tygodnia dla dowolnej daty z przeszłości lub przyszłości. Przykładowo sprawdzimy, jaki dzień tygodnia przypadał 5 grudnia 1968 roku:
$ date --date='1968-12-5' +%A
System zwraca nam informację, że był to czwartek. W analogiczny sposób możemy zweryfikować dzień tygodnia dla odległej daty przyszłej, na przykład 1 stycznia 2077 roku:
$ date --date='2077-01-01' +%A
W tym przypadku dowiadujemy się, że będzie to piątek.
Kolejnym przydatnym mechanizmem w powłoce Bash są aliasy, czyli skróty dla często wykonywanych poleceń. Przyjmijmy, że chcemy zdefiniować alias o nazwie adres, który będzie wyświetlał adresację kart sieciowych. Wiemy, że domyślnie odpowiada za to polecenie ip a, które zwraca szczegółowe dane sieciowe:
$ ip a
Tworzymy alias dla tego polecenia za pomocą komendy:
$ alias adres='ip a'
Od tej pory wystarczy wpisać w konsoli:
$ adres
Widzimy, że system zwraca dokładnie ten sam zestaw danych – skrót działa prawidłowo.
Innym, bardziej zaawansowanym przykładem jest utworzenie skrótu dla wcześniej omawianego polecenia wyświetlania sformatowanej daty i godziny:
$ date '+%d-%m-%Y %H:%M:%S'
Tworzymy alias o nazwie godzina:
$ alias godzina="date '+%d-%m-%Y %H:%M:%S'"
Wpisując komendę godzina, otrzymujemy oczekiwany rezultat. Należy jednak pamiętać, że aliasy tworzone bezpośrednio w wierszu poleceń mają istotną wadę – są tymczasowe i przestają działać po wylogowaniu użytkownika lub zrestartowaniu systemu.
Aby zachować aliasy na stałe, musimy wpisać je do pliku konfiguracyjnego .bashrc, który znajduje się w katalogu domowym użytkownika (w naszym przypadku /home/administrator). Ponieważ jest to plik ukryty, w celu jego wyświetlenia musimy użyć polecenia ls z parametrem -a:
$ ls -la
Następnie przechodzimy do edycji tego pliku za pomocą edytora nano:
$ nano .bashrc
Po otwarciu pliku .bashrc dopisujemy definicje naszych aliasów w dogodnym miejscu (najlepiej na samym końcu pliku). W naszym przypadku dodajemy trzy następujące wpisy:
$ alias dystrybucja='lsb_release -d' $ alias godzina="date '+%d-%m-%Y %H:%M:%S'" $ alias adres='ip a'
Po wprowadzeniu zmian zapisujemy plik i opuszczamy edytor. Aby nowo zdefiniowane aliasy stały się aktywne, musimy przeładować konfigurację powłoki. Możemy to zrobić, wylogowując się i logując ponownie, lub wykonując polecenie:
$ source .bashrc