Systemy Operacyjne: Linux – Laboratorium 2
Wprowadzenie
Podczas pierwszych zajęć zapoznaliśmy się z podstawowymi operacjami w wierszu poleceń systemu Linux, takimi jak przenoszenie plików, zarządzanie ścieżkami oraz kopiowanie danych. Osoby, które potrzebują przypomnienia, odsyłam do skryptu z Laboratorium 1.
Na dzisiejszych zajęciach skupimy się na bardziej zaawansowanych technikach pracy z terminalem. Omówimy nadawanie uprawnień do plików i katalogów, zastosowanie znaków specjalnych (wildcards), wykorzystanie filtrów oraz operacje na tekście.
Znaki specjalne (Wildcards)
Często zachodzi potrzeba wykonania operacji na wielu plikach, które mają wspólny element w nazwie, na przykład logi aplikacji, przepisy kulinarne czy pliki o określonym rozszerzeniu. W takich sytuacjach pomocne są tzw. wildcards – znaki specjalne umożliwiające zastępowanie jednego lub wielu znaków w nazwach plików.
Podstawowe znaki specjalne to:
*– zastępuje dowolny ciąg znaków (w tym pusty),?– zastępuje dokładnie jeden dowolny znak,[]– pozwala określić zestaw lub zakres dopuszczalnych znaków.
Przykłady zastosowania:
Wyświetlenie wszystkich plików z rozszerzeniem
.txtw bieżącym katalogu:1
ls *.txt
Wyświetlenie wszystkich plików, których nazwa zaczyna się od “Lasagne”:
1
ls Lasagne*
Należy pamiętać, że system Linux rozróżnia wielkość liter (jest case-sensitive). Aby uwzględnić pliki, których nazwa zaczyna się zarówno od “Lasagne”, jak i “lasagne”, możemy użyć znaku zapytania:
1
ls ?asagne*
To polecenie wyszuka pliki, które na pierwszej pozycji nazwy mają dowolny znak, po którym następuje ciąg “asagne”, a następnie dowolny ciąg znaków.
Przykłady użycia nawiasów kwadratowych:
Wyświetlenie plików, których nazwa zaczyna się od litery
j,klubm:1
ls [jkm]*
Wyświetlenie plików, które w nazwie zawierają cyfry od 0 do 5:
1
ls *[0-5]*
Wyświetlenie plików, których nazwa nie zaczyna się od liter z zakresu
hdon:1
ls [^h-n]*
Znak ^ wewnątrz nawiasów kwadratowych oznacza negację.
Uwaga: Wildcards są interpretowane przez powłokę systemową (shell), a nie przez konkretne polecenia czy programy. Oznacza to, że możemy je stosować w połączeniu z dowolnymi poleceniami w terminalu.
Przykład zastosowania w praktyce:
Przeniesienie wszystkich przepisów na lasagne z katalogu Obiady do katalogu Przepisy:
1
mv Obiady/?asagne* Przepisy/
Ćwiczenie 1
Utwórz dwa katalogi o dowolnych nazwach (w tym przykładzie będą to Katalog1 i Katalog2). W katalogu Katalog1 utwórz następujące pliki:
1
touch list.txt lost last.txt tost.txt ticket.txt post.txt
Twoim zadaniem jest przekopiowanie plików list.txt, lost oraz tost.txt do katalogu Katalog2, używając jednego polecenia i odpowiednich znaków specjalnych.
Uprawnienia plików i katalogów
System Linux umożliwia precyzyjne zarządzanie uprawnieniami do plików i katalogów. Każdy plik i katalog posiada zestaw uprawnień dla trzech kategorii użytkowników:
- Właściciel (user) – zazwyczaj twórca pliku,
- Grupa (group) – grupa użytkowników, do której należy plik,
- Pozostali (others) – wszyscy inni użytkownicy systemu.
Każda z tych kategorii może posiadać następujące uprawnienia:
- r (read) – prawo do odczytu,
- w (write) – prawo do zapisu (modyfikacji),
- x (execute) – prawo do wykonania (dla plików wykonywalnych) lub wejścia do katalogu.
Aby wyświetlić listę plików wraz z ich uprawnieniami, użyjemy polecenia:
1
ls -l
Pierwsza kolumna wyjścia tego polecenia zawiera informacje o typie pliku oraz uprawnieniach, w postaci 10 znaków:
- Pierwszy znak określa typ pliku (
-dla pliku zwykłego,ddla katalogu), - Kolejne 9 znaków podzielone są na trzy grupy po trzy znaki, reprezentujące uprawnienia dla właściciela, grupy i pozostałych.
Przykład:
1
-rwxr-xr--
rwx– uprawnienia właściciela (odczyt, zapis, wykonanie),r-x– uprawnienia grupy (odczyt, brak zapisu, wykonanie),r--– uprawnienia pozostałych (odczyt, brak zapisu, brak wykonania).
Zmiana uprawnień
Do modyfikacji uprawnień służy polecenie chmod. Składnia polecenia:
1
chmod [kogo][znak][uprawnienia] [plik/katalog]
Gdzie:
- kogo – określa, do kogo odnoszą się zmiany:
u– właściciel (user),g– grupa (group),o– pozostali (others),a– wszyscy (all).
- znak – określa operację:
+– dodanie uprawnień,-– odebranie uprawnień,=– ustawienie dokładnych uprawnień.
- uprawnienia – zestaw uprawnień do zmiany (
r,w,x).
Przykład:
Nadanie pozostałym użytkownikom prawa do zapisu do pliku obiad.txt:
1
chmod o+w obiad.txt
Po wykonaniu polecenia możemy sprawdzić aktualne uprawnienia:
1
ls -l obiad.txt
Filtry
Filtry to programy, które przetwarzają dane wejściowe (zwykle tekstowe) i zwracają wynik przetworzenia. Są one często używane w połączeniu z innymi poleceniami za pomocą potoków (|). Poniżej przedstawiamy kilka podstawowych filtrów:
head – wyświetla początkowe linie pliku (domyślnie 10):
1
head [-n liczba_linii] [plik]
tail – wyświetla końcowe linie pliku (domyślnie 10):
1
tail [-n liczba_linii] [plik]
sort – sortuje linie w pliku lub danych wejściowych:
1
sort [opcje] [plik]
Przykładowe opcje:
-n– sortowanie numeryczne,-r– sortowanie w porządku odwrotnym,-k– sortowanie według określonej kolumny.
nl – numeruje linie w pliku:
1
nl [plik]
Dodatkowe filtry o zaawansowanych możliwościach:
sed (stream editor) – edytor strumieniowy umożliwiający wykonywanie operacji na tekście, takich jak zamiana, wstawianie czy usuwanie linii:
1
sed 'polecenia' [plik]
Przykład: Zamiana wszystkich wystąpień słowa “jabłka” na “gruszki” w pliku
lista_zakupow.txt:1
sed 's/jabłka/gruszki/g' zakupy.txt
cut – wycina określone pola lub kolumny z danych wejściowych:
1
cut [opcje] [plik]
Opcje:
-d 'separator'– określa separator pól (domyślnie tabulator),-f pola– wskazuje, które pola wyciąć.
Przykład: Wycięcie pierwszej kolumny (np. nazwy sklepu) z pliku
lista_zakupów.txt:1
cut -d ' ' -f 1 lista_zakupów.txt
uniq – eliminuje powtarzające się linie (działa poprawnie na posortowanych danych):
1
uniq [opcje] [plik]
Opcje:
-c– wyświetla liczbę wystąpień każdej unikalnej linii.
Przykład: Zliczenie liczby wystąpień każdej unikalnej linii w pliku
lista_zakupów.txt:1
sort lista_zakupów.txt | uniq -c
tac – wyświetla zawartość pliku w odwrotnej kolejności (od ostatniej linii do pierwszej):
1
tac [plik]
Przykład: Wyświetlenie pliku
notatki.txtod końca:1
tac notatki.txt
Ćwiczenie 2
Utwórz plik o nazwie
lista_zakupów.txt, zawierający co najmniej 15 pozycji w formacie:1
[Sklep] [Produkt] [Ilość]
Przykład pliku lista_zakupów.txt :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Lidl ogórki 7 Lidl jajka 10 Auchan Coca-Cola 12 E.Leclerc piwo 128 Biedronka chleb 5 Carrefour masło 3 Lidl mleko 6 Auchan ser 2 Biedronka cukier 4 E.Leclerc kawa 1 Carrefour herbata 2 Lidl pomidory 8 Auchan woda 20 Biedronka mąka 2 E.Leclerc sól 1
Korzystając z odpowiednich filtrów, wyświetl tylko te pozycje, które dotyczą zakupów w sklepie “Lidl”.
@Skrypt przygotowany na bazie pracy mgr inż. Michała Hyli. http://mhyla.com