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
.txt
w 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
,k
lubm
: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
h
don
: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,d
dla 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.txt
od 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