Powłoka
Wprowadzenie¶
Podczas tego kursu będziemy pracować w systemie Linux
.
W pracowni, po zalogowaniu mamy dostęp do konta wydziałowego.
Do danych z tego konta możemy również dostać się zdalnie za pomocą serwera student.tcs.uj.edu.pl
(w katalogu /afs
na serwerze).
Aby zalogować się na serwer, należy w wierszu poleceń (terminalu) użyć komendy:
Po otwarciu konsoli (lub udanym zalogowaniu), użytkownik ma dostęp do powłoki systemowej (ang. shell).
Powłoka to program będący pośrednikiem pomiędzy systemem operacyjnym a użytkownikiem.
Użytkownik wydaje polecenia dla systemu poprzez wpisywanie komend, powłoka zaś interpretuje kolejne polecenia i uruchamia odpowiednie programy.
W systemach uniksowych najpopularniejszą powłoką jest bash
(Bourne-Again SHell).
Gdy powłoka oczekuje kolejnej komendy, wyświetlany jest command prompt.
Typowy wiersz składa się z podstawowej informacji o systemie, zakończonej znakiem $
, po którym możemy wpisać komendę i otrzymać wynik.
Przykładowo komenda whoami
zwróci nam nazwę naszego użytkownika:
Typowe dystrybucje Linuxa wyposażone są w graficzny interfejs użytkownika (ang. GUI -- Graphical User Interface). Taki interfejs pozwala na bardziej intuicyjne wydawanie poleceń przy pomocy myszki, np. poprzez klikanie w ikonki i ich przesuwanie. Większość takich operacji jest jednak tłumaczona na polecenia powłoki.
Dla programisty pracującego w systemie Linux, bezpośrednie korzystanie z powłoki zamiast GUI jest często wygodniejsze:
- GUI pozwala jedynie na podstawowe operacje, często zorientowane na pracownika biurowego niezwiązanego z programowaniem.
- Shell daje znacznie większy wachlarz możliwości, udostępniając bardziej nietypowe polecenia, np. związane z programowaniem i kompilacją.
- Shell pozwala na łączenie komend w bardziej skomplikowane polecenia.
- Komendy powłoki mogą być zapisane w pliku celem ich późniejszego, lub wielokrotnego wykonania. Tak powstałe skrypty pozwalają na automatyzację pracy.
- Komendy powłoki z łatwością mogą być udostępniane innym użytkownikom. Różne dystrybucje Linuxa posiadają inne interfejsy graficzne, ale podstawowe komendy shella pozostają takie same.
- Tutoriale i instruktaże (np. jak zainstalować daną aplikację) często korzystają z poleceń shella, ze względu na ich precyzję i uniwersalność.
Z tych powodów na tym kursie skupiamy się właśnie na poleceniach powłoki - podstawowym środowisku programisty. Wiedza tu zdobyta pozwoli na sprawne posługiwanie się systemem i ułatwi pracę nad każdym projektem, nad którym przyjdzie Wam pracować.
Pomoc¶
Powłoka systemu Linux standardowo jest wyposażona w bardzo wiele instrukcji. Każda z komend posiada swoje parametry, modyfikujące efekt jej użycia. Często są one bardzo rozbudowane.
Gdy chcemy poznać możliwości danego polecenia, z pomocą spieszy nam wywołanie
Tam znajdziemy szczegółowy opis komendy i jej parametrów. Przykładowo:gutowski@student:~$ man whoami
(...)
NAME
whoami - print effective user name
SYNOPSIS
whoami [OPTION]...
DESCRIPTION
Print the user name associated with the current effective user ID. Same as id -un.
--help display this help and exit
--version
output version information and exit
(...)
whoami
działa w jeden sposób, ale jest też komenda id
o większych możliwościach.
Żeby dowiedzieć się więcej o niej, możesz wykonać:
Nie trzeba więc spamiętywać wszystkich przypadków użycia. Często wystarcza ogólna intuicja co robi dana komenda, a przy konkretnej potrzebie szukamy szczegółów w manualu. Często okaże się, że ta albo podobna komenda z odpowiednim parametrem wykona właśnie to czego potrzebujemy.
Poruszanie się po systemie plików¶
Ważnym elementem każdego systemu operacyjnego jest możliwość przechowywania danych. Dane są przechowywane w postaci niezależnych plików (ang. file), dzielących wspólną pamięć (przeważnie dyskową, ale nie tylko). Ze względu na dużą liczbę plików, są one zorganizowane w drzewo katalogów (ang. directory).
Pliki użytkownika w typowym systemie linuksowym znajdują się w katalogu /home/<login>
, gdzie <login>
to nazwa użytkownika.
Przykładowo, dla użytkownika gutowski
, katalog domowy to /home/gutowski
.
- pierwsze
/
oznacza korzeń drzewa katalogów (ang. root directory), wszystkie pliki obsługiwane przez system znajdują się w tym katalogu, home
to nazwa katalogu (znajdującego się bezpośrednio w korzeniu), w którym przechowywane są pliki wszystkich użytkowników systemu,gutowski
to podkatalog kataloghome
, w którym znajdują się pliki użytkownikagutowski
.
Podczas pracy z bashem, w każdej chwili użytkownik znajduje się w jakimś katalogu.
Komenda pwd
pozwala szybko określić aktualny katalog (ang. current/working directory):
Polecenie ls -al
wyświetla zawartość bieżącego katalogu wraz z dodatkowymi informacjami na temat plików i folderów (znaczenie kolumn zostanie wyjaśnione później).
gutowski@student:~$ ls -al
total 204
drwx--x--- 16 gutowski www-data 4096 Oct 14 10:07 .
drwxr-xr-x 444 root root 12288 Oct 9 16:00 ..
lrwxrwxrwx 1 gutowski gutowski 44 Oct 8 2012 afs -> /afs/matinf.uj.edu.pl/usr/staff/tcs/gutowski
lrwxrwxrwx 1 gutowski gutowski 25 Oct 12 2017 apache_log -> /var/log/apache2/gutowski
-rw------- 1 gutowski gutowski 30062 Oct 14 00:32 .bash_history
-rw-r--r-- 1 gutowski gutowski 220 Feb 25 2020 .bash_logout
-rw-r--r-- 1 gutowski gutowski 3858 Nov 15 2022 .bashrc
drwxrwxr-x 3 gutowski gutowski 4096 Oct 24 2023 .byobu
drwx------ 10 gutowski gutowski 4096 Mar 5 2024 .cache
drwx------ 9 gutowski gutowski 4096 Mar 11 2024 .config
-rw-r--r-- 1 gutowski gutowski 807 Feb 25 2020 .profile
drwxr-xr-x 3 gutowski gutowski 4096 Jan 22 2019 public_html
drwxr-x--- 2 gutowski gutowski 4096 Oct 14 09:45 .ssh
lrwxrwxrwx 1 gutowski gutowski 27 Feb 13 2010 storage -> /mnt/storage/users/gutowski
drwx------ 1 gutowski gutowski 13 Dec 19 2022 Sync
drwx------ 2 gutowski gutowski 4096 Oct 17 2023 srodowisko
-rw------- 1 gutowski gutowski 38256 Oct 13 22:18 .viminfo
-rw------- 1 gutowski gutowski 450 Oct 14 09:45 .Xauthority
W kolejnych kolumnach wyświetlane są następujące informacje:
- Pierwszy znak odpowiada za typ pliku:
-
to zwykły plik,d
katalog,l
link (skrót) do pliku,b
alboc
oznaczają urządzenie np. dysk twardy. Pozostałe 9 znaków odpowiada za prawa dostępu do pliku/katalogu/zasobu. Pierwsze 3 odpowiadają za prawa aktualnego użytkownika, następne 3 za prawa grupy, ostatnie 3 za prawa wszystkich użytkowników. Istnieją 3 podstawowe prawa, kolejno:r
(read) prawo odczytu,w
(write) prawo zapisu,x
(execute) prawo wykonania, natomiast-
oznacza, że użytkownik nie ma danego prawa. - Liczba w kolumnie oznacza ile bloków pamięci zajmuje dany plik/katalog (dla pliku jest to 1, dla folderu ilość folderów znajdujących się bezpośrednio w nim)
- Właściciel pliku/katalogu.
- Grupa do której należy właściciel pliku/katalogu.
- Rozmiar pliku/katalogu w bajtach (rozmiar katalogu jest zawsze taki sam, nie są w niego wliczone rozmiary plików i katalogów które zawiera).
- Data utworzenia/zmodyfikowania pliku/katalogu.
- Nazwa pliku/katalogu.
Plik/katalog jest ukryty gdy jego nazwa zaczyna się od kropki. Zwróć uwagę na dwa pierwsze katalogi w przykładzie .
i ..
reprezentują one odpowiednio aktualny katalog i katalog nadrzędny. Takie dwa ukryte katalogi znajdują się w każdym katalogu.
Szczególny przypadek to katalog główny /, który sam dla siebie jest katalogiem nadrzędnym, a więc .
i ..
reprezentują tam ten sam katalog.
Ponadto, katalog ~
w dowolnym kontekście oznacza katalog domowy danego użytkownika.
Przydatne polecenia:
pwd
- podaje pełną ścieżkę dostępu do aktualnego kataloguls
- wyświetla zawartość podanego katalogucd
- zmienia aktualny katalogtouch
- uaktualnienia czas ostatniej modyfikacji pliku lub tworzy nowy plikmkdir
- tworzy katalogrmdir
- usuwa pusty katalogrm
- usuwa plikicp
- kopiuje plikimv
- przenosi plikichmod
- zmienia prawa dostępudu
- wyświetla zużycie dyskufind
- wyszukuje pliki z zaawansowanymi filtrami
Praca z plikami¶
Podstawowym rodzajem pliku jest plik tekstowy, składa się on ze znaków czytelnych dla człowieka. Poniższe podstawowe komendy pozwalają na przeglądanie i edycję takich plików:
cat
- kopiuje zawartość pliku (lub standardowego wejścia) na standardowe wyjścietac
- podobnie, ale odwracając kolejność linijeksort
- podobnie, ale sortuje linijki zgodnie z zadanym kluczemuniq
- podobnie, ale usuwa powtórzone linijkihead
- podobnie, ale tylko początkowe linijkitail
- podobnie, ale tylko końcowe linijkiless
- podobnie, ale z interkatywnym podglądemwc
- zlicza linijki, słowa i znaki w pliku (lub standardowym wejściu)
Anatomia polecenia¶
Powyżej przedstawiliśmy kilkanaście podstawowych poleceń powłoki. Mimo różnic w działaniu można wyszczególnić kilka cech wspólnych.
Każde polecenie składa się z nazwy i list argumentów. Można wyszczególnić trzy rodzaje argumentów:
- Flaga -- zmienia działanie polecenia samym faktem że jest wymieniona.
Na przykład komenda
ls
działa inaczej gdy wywołujemy bez argumentów, a inaczej gdy zaistnieje flaga-l
lub flaga-s
. Flagi typowo rozpoczynają się pojedynczym znakiem-
i pojedynczą literą. Gdy występuje wiele flag, można je połączyć razem, np.ls -a -l
oznacza to samo cols -al
.
Poza jednoliterowymi flagami, mogą być też ich dłuższe wersje. Wtedy rozpoczynamy podwójnym --
i pełną nazwą, n.p. ls -a
oznacza to samo co ls --all
.
Flag wieloznakowych nie można łączyć, każda zaczyna się od osobnego --
.
Uwaga: niektóre instrukcje używają pojedynczego -
także do argumentów wieloznakowych.
- Wartości -- wymagają podania konkretnej liczby lub nazwy by dany argument miał sens.
Takie argumenty przekazuje się bezpośrednio po nazwie argumentu.
Na przykład dla komendy
find
możemy przekazać-size 20c
by znaleźć pliki o wielkości 20 znaków. Przekazanie samego-size
tak jakby to była flaga nie miałoby sensu.
Czasami komenda wymaga znaku =
pomiędzy nazwą argumentu a jego wartością.
- Argument pozycyjny -- argumenty dla których nie podaje się nazwy tylko samą wartość. Znaczenie danego argumentu zależy od jej pozycji w liście argumentów.
Na przykład dla
cp
komenda traktuje wszystkie argumenty pozycyjne poza ostatnim jako źródła, a ostatni jako punkt docelowy. Na przykładcp A B K
skopiuje dwa plikiA
iB
to kataloguK
.
Działanie komendy często nie zależy tylko od argumentów.
Wiele komend czyta dłuższe dane ze standardowego wejścia, czyli domyślnie z klawiatury.
Działanie komendy może zależeć też od ogólnego stanu systemu.
Np. to co wypisze komenda pwd
zależy od katalogu w którym ją wywołujemy.
Komenda wypisuje wynik na standardowe wyjście, którym domyślnie jest ekran terminala. Komenda może też zmienić coś w systemie, np. dodać lub usunąć pliki, bądź zmienić aktualny katalog.
Przekierowanie strumieni¶
Dla niektórych komend domyślne działanie jest mało praktyczne.
Na przykład, po co komu komenda sort
czytająca tekst z klawiatury (zakończony Ctrl+D) i sortująca go alfabetycznie z wynikiem wyświetlonym ponownie na ekranie?
Operacje takie mają większy sens gdy standardowe wejście lub wyjście zostanie przekierowane.
Wejściem lub wyjściem wcale nie musi być klawiatura czy ekran, ale dowolny plik.
komenda > plik
-- przekierowuje standardowe wyjście komendy do nowego pliku o podanej nazwie. Jeśli plik już istniał, jego stara wersja zostanie skasowana.komenda >> plik
-- przekierowuje standardowe wyjście komendy do pliku. Jeśli ów plik już istniał, dopisuje wynik do jego końca.komenda < plik
-- wczytujeplik
jako standardowe wejście do komendy.
Na przykład polecenie
sprawdzi w systemie jaka jest zawartość aktualnego katalogu i wypisze wynik do plikuout.txt
.