2.1 Lekcja 1
Certyfikat: |
Linux Essentials |
---|---|
Wersja: |
1.6 |
Temat: |
2 Poruszanie się po systemie Linux |
Cel nauki: |
2.1 Podstawy wiersza poleceń |
Lekcja: |
1 z 2 |
Wstęp
Nowoczesne dystrybucje Linuxa posiadają szeroką bardzo gamę graficznych interfejsów użytkownika, ale administrator zawsze musi wiedzieć, jak pracować z wierszem poleceń, znanym również jako powłoka. Powłoka to program umożliwiający komunikację tekstową między systemem operacyjnym a użytkownikiem. Zwykle jest to program w trybie tekstowym, który odczytuje dane wejściowe użytkownika i interpretuje je jako polecenia systemu.
W systemie Linux istnieje wiele różnych powłok, oto tylko kilka z nich:
-
Powłoka Bourne-again (Bash)
-
Powłoka C (csh lub tcsh, rozszerzona csh)
-
Powłoka Korn (ksh)
-
Powłoka Z (zsh)
W systemie Linux najpopularniejszą powłoką jest powłoka Bash, która jest również używana w poniższych przykładach i ćwiczeniach.
Podczas korzystania z powłoki interaktywnej, użytkownik wprowadza polecenia w tak zwanym wierszu poleceń. W każdej dystrybucji Linuxa domyślny wiersz poleceń może wyglądać nieco inaczej, ale zwykle ma następującą strukturę:
username@hostname current_directory shell_type
W systemie Ubuntu lub Debian GNU / Linux wiersz polecenia dla zwykłego użytkownika będzie wyglądał podobnie do poniższego:
carol@mycomputer:~$
A wiersz polecenia superużytkownika będzie wyglądał następująco:
root@mycomputer:~#
W systemie CentOS lub Red Hat Linux wiersz poleceń dla zwykłego użytkownika będzie wyglądał następująco:
[dave@mycomputer ~]$
A wiersz poleceń superużytkownika będzie wyglądał następująco:
[root@mycomputer ~]#
Wyjaśnijmy znaczenie poszczególnych elementów tej struktury:
username
(nazwa użytkownika
)-
Nazwa użytkownika, który uruchamia powłokę
hostname
(nazwa hosta
)-
Nazwa hosta, na którym działa powłoka. Istnieje również polecenie
hostname
, które służy do wyświetlania lub zmiany nazwy hosta w systemie. current_directory
(bieżący_katalog
)-
Katalog, w którym obecnie znajduje się powłoka. Tylda (
~
) oznacza, że powłoka znajduje się w katalogu domowym bieżącego użytkownika. shell_type
(typ_powłoki
)-
$
wskazuje, że powłoka jest uruchamiana przez zwykłego użytkownika.#
wskazuje, że powłoka jest uruchamiana przez superużytkownika z uprawnieniami administratoraroot
.
Ponieważ nie potrzebujemy żadnych specjalnych uprawnień, w poniższych przykładach użyjemy nieuprzywilejowanego znaku zachęty. Ze względu na przejrzystość, po prostu użyjemy znaku zachęty $
.
Struktura wiersza poleceń
Większość poleceń w wierszu poleceń ma tę samą podstawową strukturę:
polecenie [opcja(e)/parametr(y)...] [argument(y)...]
Rozważmy następujące polecenie jako przykład:
$ ls -l /home
Wyjaśnijmy przeznaczenie każdego elementu polecenia:
- Command (Polecenie)
-
Przykład programu
ls
uruchomionego przez użytkownika w powyższym przykładzie. - Option(s)/Parameter(s) (Opcja(e)/parametr(y))
-
“Przełącznik” (“switch”) w pewien sposób modyfikuje zachowanie polecenia, na przykład
-l
w powyższym przykładzie. Dostęp do opcji można uzyskać w postaci krótkiej i długiej. Na przykład-l
jest identyczne z zapisem--format=long
.Można również łączyć kilka opcji, a w przypadku krótkiej formy litery można zwykle pisać razem. Na przykład następujące polecenia robią to samo:
$ ls -al $ ls -a -l $ ls --all --format=long
- Argument(s) (Argument(y))
-
Dodatkowe informacje wymagane przez program, takie jak nazwa pliku lub ścieżka, na przykład
/home
w powyższym przykładzie.
Jedyną obowiązkową częścią tej struktury jest samo polecenie. Ogólnie wszystkie inne elementy są opcjonalne, ale program może wymagać określenia pewnych opcji, parametrów lub argumentów.
Note
|
Większość poleceń wyświetla krótki przegląd dostępnych opcji, gdy są uruchamiane z parametrem |
Typy poleceń
Powłoka obsługuje dwa typy poleceń:
- Polecenia wewnętrzne (wbudowane)
-
Te polecenia są częścią samej powłoki, a nie samodzielnymi programami. Takich poleceń jest około 30. Ich głównym celem jest wykonywanie zadań wewnątrz powłoki (np.
cd
,set
,export
). - Polecenia zewnętrzne
-
Te polecenia znajdują się w poszczególnych plikach. Zwykle są to programy binarne lub skrypty. Kiedy uruchamiane i wykonywane jest polecenie, które nie jest poleceniem wbudowanym w powłokę, powłoka używa zmiennej
PATH
w celu wyszukania pliku wykonywalnego o tej samej nazwie co polecenie. Oprócz programów, które są instalowane za pomocą menedżera pakietów, użytkownicy mogą również tworzyć własne polecenia zewnętrzne.
Polecenie type
pokazuje, jakiego typu jest dane polecenie:
$ type echo echo is a shell builtin $ type man man is /usr/bin/man
Quoting (znaki cudzysłowu)
Jako użytkownik Linuxa będziesz musiał tworzyć lub manipulować plikami lub zmiennymi na wiele różnych sposobów. Jest to łatwe podczas pracy z krótkimi nazwami plików i pojedynczymi wartościami. Sytuacja staje się jednak bardziej skomplikowana, gdy wykorzystywane są m.in. spacje, znaki specjalne i zmienne. Powłoki zapewniają funkcję zwaną “Quoting”, która zawiera takie dane w różnych typach cudzysłowów (" ", ' '). W Bashu istnieją trzy rodzaje cudzysłowów:
-
Podwójne cudzysłowy
-
Pojedyncze cudzysłowy
-
Znaki ucieczki
Na przykład, następujące polecenia nie zachowują się w ten sam sposób z powodu róznych cudzysłowów:
$ TWOWORDS="two words" $ touch $TWOWORDS $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words $ touch "$TWOWORDS" $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:58 'two words' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words $ touch '$TWOWORDS' $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 15:00 '$TWOWORDS' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:58 'two words' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words
Note
|
Linia z |
Podwójne cudzysłowy
Podwójne cudzysłowy informują powłokę, że tekst między cudzysłowami ("...") jest traktowany jako zwykłe znaki. Wszystkie znaki specjalne tracą znaczenie, z wyjątkiem $
(znak dolara), \
(backslash - ukośnik odwrotny) i `
(backquote - cudzysłów odwrotny), dzięki czemu można nadal używać zmiennych, podstawiania poleceń i funkcji arytmetycznych.
Na przykład podwójne cudzysłowy nie mają wpływu na podstawienie zmiennej $USER
:
$ echo I am $USER I am tom $ echo "I am $USER" I am tom
Z drugiej strony znak spacji traci znaczenie jako separator argumentów:
$ touch new file $ ls -l -rw-rw-r-- 1 tom students 0 Oct 8 15:18 file -rw-rw-r-- 1 tom students 0 Oct 8 15:18 new $ touch "new file" $ ls -l -rw-rw-r-- 1 tom students 0 Oct 8 15:19 new file
Jak widać, polecenie touch
w pierwszym przykładzie tworzy dwa oddzielne pliki, ponieważ polecenie interpretuje dwa ciągi jako oddzielne argumenty. W drugim przykładzie, polecenie interpretuje oba ciągi jako jeden argument, czyli tylko jedną nazwę pliku, dlatego tworzy tylko jeden plik. Najlepszą praktyką jest jednak unikanie znaku spacji w nazwach plików. Zamiast tego można użyć podkreślenia (_
) lub kropki (.
).
Pojedyncze cudzysłowy
Pojedyncze cudzysłowy nie mają wyjątków takich jak podwójne cudzysłowy. Unieważniają one jakiekolwiek specjalne znaczenie każdego znaku. Weźmy jeden z powyższych przykładów:
$ echo I am $USER I am tom
Po zastosowaniu pojedynczych cudzysłowów zobaczysz inny wynik:
$ echo 'I am $USER' I am $USER
Polecenie wyświetla teraz dokładny ciąg znaków bez zastępowania zmiennej.
Znaki ucieczki
Możemy użyć znaków ucieczki, aby usunąć specjalne znaczenie znaków z Basha. Wracając do zmiennej środowiskowej $USER
:
$ echo $USER carol
Widzimy, że domyślnie zawartość zmiennej jest wyświetlana w terminalu. Jeśli jednak poprzedzimy znak dolara znakiem backslasha (\
), to specjalne znaczenie znaku dolara zostanie anulowane. To z kolei nie pozwoli Bashowi rozwinąć wartości zmiennej w celu uwzględnienia nazwy użytkownika osoby wykonującej polecenie, zatem zamiast tego Bash zinterpretuje nazwę zmiennej dosłownie:
$ echo \$USER $USER
Jeśli pamiętasz, podobny wynik możemy osiągnąć za pomocą pojedynczych cudzysłowów, ponieważ zapewniają one, że treść zawarta między cudzysłowami jest dokładnie taka, jaka znajduje się między tymi pojedynczymi cudzysłowami. Jednak znak ucieczki działa inaczej, mówiąc Bashowi, aby zignorował jakiekolwiek specjalne znaczenie, jakie może mieć znak po nim.
Ćwiczenia z przewodnikiem
-
Podziel poniższe wiersze na poszczególne elementy: polecenia, opcje / parametry i argumenty:
-
Przykład:
cat -n /etc/passwd
Polecenie:
cat
Parametr(y):
-n
Argument(y):
/etc/passwd
-
ls -l /etc
Polecenie:
Parametr(y):
Argument(y):
-
ls -l -a
Polecenie:
Parametr(y):
Argument(y):
-
cd /home/user
Polecenie:
Parametr(y):
Argument(y):
-
-
Sprawdź, jakiego typu są następujące polecenia:
Przykład:
pwd
Wbudowane w powłokę
mv
Polecenie zewnętrzne
cd
cat
exit
-
Pokaż wynik następujących poleceń, które używają cudzysłowów:
Przykład:
echo "$HOME is my home directory"
echo /home/user is my home directory
touch "$USER"
touch 'touch'
Ćwiczenia eksploracyjne
-
Utwórz 5 plików ponumerowanych od 1 do 5 z prefiksem
game
(game1
,game2
, …) za pomocą jednego polecenia i używając rozszerzenia nawiasów klamrowych w Bash (patrz strona podręcznika Bash). -
Usuń wszystkie 5 plików, które właśnie utworzyłeś jednym poleceniem, używając innego znaku specjalnego (przejrzyj Rozwijanie nazw plików na stronach podręcznika Bash).
-
Czy istnieją inne sposoby, aby dwa polecenia współdziałały ze sobą? Jakie to są sposoby?
Podsumowanie
W tym laboratorium nauczyłeś się:
-
Pojęcia dotyczące powłoki systemu Linux
-
Co to jest powłoka Bash
-
Struktura wiersza poleceń
-
Wprowadzenie do cudzysłowów (Quoting)
Komendy wykorzystywane w ćwiczeniach:
bash
-
Najpopularniejsza powłoka na komputerach z systemem Linux.
echo
-
Wyświetla tekst w terminalu.
ls
-
Wyświetla zawartość katalogu.
type
-
Wskazuje sposób wykonania określonego polecenia.
touch
-
Tworzy pusty plik lub aktualizuje datę modyfikacji istniejącego pliku.
hostname
-
Pokazuje lub zmienia nazwę hosta systemu.
Odpowiedzi do ćwiczeń z przewodnikiem
-
Podziel poniższe wiersze na poszczególne elementy: polecenia, opcje / parametry i argumenty:
-
ls -l /etc
Polecenie:
ls
Parametr(y):
-l
Argument(y):
/etc
-
ls -l -a
Polecenie:
ls
Parametr(y):
-l -a
Argument(y):
-
cd /home/user
Polecenie:
cd
Parametr(y):
Argument(y):
/home/user
-
-
Sprawdź, jakiego typu są następujące polecenia:
cd
Wbudowane w powłokę
cat
Polecenie zewnętrzne
exit
Wbudowane w powłokę
-
Pokaż wynik następujących poleceń, które używają cudzysłowów:
touch "$USER"
tom
touch 'touch'
Tworzy plik o nazwie
touch
Odpowiedzi do ćwiczeń eksploracyjnych
-
Utwórz 5 plików ponumerowanych od 1 do 5 z prefiksem
game
(game1
,game2
, …) za pomocą jednego polecenia i używając rozszerzenia nawiasów klamrowych w Bash (patrz strona podręcznika Bash).Za pomocą zakresów można wyrazić liczby od 1 do 5 w ramach jednego polecenia:
$ touch game{1..5} $ ls game1 game2 game3 game4 game5
-
Usuń wszystkie 5 plików, które właśnie utworzyłeś jednym poleceniem, używając innego znaku specjalnego (przejrzyj Rozwijanie nazw plików na stronach podręcznika Bash).
Ponieważ wszystkie pliki zaczynają się od
game
i kończą pojedynczym znakiem (w tym przypadku liczbą od 1 do 5), można użyć?
jako znaku specjalnego dla ostatniego znaku w nazwie pliku:$ rm game?
-
Czy istnieją inne sposoby, aby dwa polecenia współdziałały ze sobą? Jakie to są sposoby?
Tak, jedno polecenie może na przykład zapisać dane do pliku, który jest następnie przetwarzany przez inne polecenie. Linux może również zbierać dane wyjściowe jednego polecenia i używać ich jako danych wejściowych dla innego polecenia. Nosi to nazwę potoku (piping) i zostanie omówione w późniejszej lekcji.