Certyfikat: |
Linux Essentials |
---|---|
Wersja: |
1.6 |
Temat: |
2 Poruszanie się po systemie Linux |
Cel nauki: |
2.1 Podstawy wiersza poleceń |
Lekcja: |
2 z 2 |
Wstęp
Wszystkie powłoki przechowują zestaw informacji o swoim stanie podczas danej sesji. Sesje powłoki mogą mogą się zmieniać w trakcie sesji i wpływać na zachowanie powłoki. Te dane są również używane przez programy do określania aspektów konfiguracji systemu. Większość tych danych jest przechowywana w tak zwanych zmiennych, które omówimy w tej lekcji.
Zmienne
Zmienne to fragmenty pamięci przeznaczone na dane, takie jak tekst lub liczby, do których można uzyskać dostęp w późniejszym czasie. Zmienne mają nazwę, która jest używana do uzyskiwania do nich dostępu, nawet jeśli zmieni się ich zawartość. Są również bardzo popularnym narzędziem w większości języków programowania.
W większości powłok Linuxa istnieją dwa typy zmiennych:
- Zmienne lokalne
-
Te zmienne są dostępne tylko dla bieżącego procesu (sesji) powłoki. Jeśli utworzysz zmienną lokalną, a następnie uruchomisz inny program z tej powłoki, zmienna nie będzie już dostępna dla innego programu. Ponieważ zmienne lokalne nie są dziedziczone przez procesy podrzędne (podprocesy), zatem zmienne te nazywane są zmiennymi lokalnymi.
- Zmienne środowiskowe
-
Te zmienne są dostępne zarówno w określonej sesji powłoki, jak i w podprocesach uruchomionych z tej sesji powłoki. Te zmienne mogą służyć do przekazywania danych konfiguracyjnych do uruchamianych poleceń. Ponieważ programy te mają dostęp do tych zmiennych, zmienne te nazywane są zmiennymi środowiskowymi. Większość zmiennych środowiskowych jest zapisana wielkimi literami (np.
PATH
,DATE
,USER
). Zestaw domyślnych zmiennych środowiskowych zawiera m.in. informacje o katalogu osobistym użytkownika, typie terminala użytkownika itd. Czasami pełny zestaw wszystkich zmiennych środowiskowych jest nazywany środowiskiem.
Note
|
Zmienne nie są trwałe. Jeśli powłoka, w której zostały ustawione, zostanie zamknięta, wszystkie zmienne i ich zawartość zostaną utracone. Większość powłok dostarcza pliki konfiguracyjne ze zmiennymi, które są ustawiane za każdym razem, podczas uruchamiania nowej powłoki. Zmienne, które mają być ustawione na stałe, należy dodać do jednego z tych plików konfiguracyjnych. |
Manipulowanie zmiennymi
Jako administrator systemu będziesz musiał tworzyć, modyfikować lub usuwać zarówno zmienne lokalne, jak i środowiskowe.
Praca ze zmiennymi lokalnymi
Możesz ustawić zmienną lokalną za pomocą operatora =
(znak równości). Proste przypisanie utworzy zmienną lokalną:
$ greeting=hello
Note
|
Nie umieszczaj spacji ani przed operatorem |
Możesz wyświetlić dowolną zmienną za pomocą polecenia echo
, które zwykle wyświetla tekst w sekcji argumentów:
$ echo greeting greeting
Aby uzyskać dostęp do wartości zmiennej, musisz umieścić znak $
(znak dolara) przed nazwą zmiennej.
$ echo $greeting hello
Jak widać, zmienna została utworzona. Teraz otwórz inną powłokę i spróbuj wyświetlić zawartość tej utworzonej zmiennej.
$ echo $greeting
Nic nie jest wyświetlane. Pokazuje to wyraźnie, że zmienne lokalne zawsze istnieją tylko w określonej powłoce.
Aby sprawdzić, czy zmienna jest w rzeczywistości zmienną lokalną, uruchom nowy proces i sprawdź, czy ten proces ma dostęp do tej zmiennej. Aby to zrobić, uruchom inną powłokę i wykonaj w niej polecenie echo
. Ponieważ nowa powłoka jest uruchamiana w nowym procesie, nie będzie dziedziczyć zmiennych lokalnych z procesu nadrzędnego:
$ echo $greeting world hello world $ bash -c 'echo $greeting world' world
Note
|
Upewnij się, że w powyższym przykładzie używasz pojedynczych cudzysłowów (tzw. apostrofów). |
Aby usunąć zmienną, użyj polecenia unset
:
$ echo $greeting hey $ unset greeting $ echo $greeting
Note
|
Polecenie |
Praca ze zmiennymi globalnymi
Aby udostępnić zmienną podprocesom, należy przekształcić ją ze zmiennej lokalnej w zmienną środowiskową. Odbywa się to za pomocą polecenia export
. Jeśli jest wywoływana z nazwą zmiennej, wówczas ta zmienna jest dodawana do środowiska powłoki:
$ greeting=hello $ export greeting
Note
|
Ponownie, upewnij się, że nie używasz znaku |
Łatwiejszym sposobem utworzenia zmiennej środowiskowej jest połączenie obu powyższych metod, poprzez przypisanie wartości zmiennej w argumentowej części polecenia.
$ export greeting=hey
Sprawdźmy jeszcze raz, czy zmienna jest dostępna dla podprocesów:
$ export greeting=hey $ echo $greeting world hey world $ bash -c 'echo $greeting world' hey world
Inne zastosowanie zmiennych środowiskowych to umieszczenie ich przed poleceniami. Przetestujmy to za pomocą zmiennej środowiskowej TZ
, która przechowuje dane dotyczące strefy czasowej. Używamy tej zmiennej TZ
, aby wskazać poleceniu date
, której strefy czasowej ma używać:
$ TZ=EST date Thu 31 Jan 10:07:35 EST 2019 $ TZ=GMT date Thu 31 Jan 15:07:35 GMT 2019
Użyj polecenia env
, aby wyświetlić wszystkie zmienne środowiskowe.
Zmienna PATH
(Ścieżka
)
Zmienna PATH
jest jedną z najważniejszych zmiennych środowiskowych w systemie Linux. Przechowuje ona listę rozdzielonych dwukropkami katalogów z programami wykonywalnymi, które mogą być poleceniami powłoki Linuxa.
$ echo $PATH /home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Aby dołączyć nowy katalog do zmiennej, będziesz musiał użyć znaku dwukropka (:
).
$ PATH=$PATH:new_directory
Oto przykład:
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $ PATH=$PATH:/home/user/bin $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/user/bin
Jak widać, zmienna $PATH
jest używana z nową wartością przypisaną do PATH
. Zmienna ta jest rozpoznawana podczas wykonywania polecenia i zapewnia zachowanie oryginalnej zawartości zmiennej. Możesz oczywiście przypisać to również innym zmiennym.
$ mybin=/opt/bin $ PATH=$PATH:$mybin $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/user/bin:/opt/bin
Do zmiennej PATH
należy podchodzić ostrożnie, ponieważ jest ona kluczowa do pracy z wierszem poleceń. Rozważmy następującą zmienną PATH
:
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Aby dowiedzieć się, w jaki sposób powłoka wywołuje określone polecenie, można uruchomić polecenie which
z nazwą polecenia jako argumentem. W ten sposób dowiadujemy się, gdzie jest przechowywany np. edytor tekstu nano
:
$ which nano /usr/bin/nano
Jak widać, plik wykonywalny nano
znajduje się w katalogu /usr/bin
. Usuńmy katalog ze zmiennej i sprawdźmy, czy polecenie nadal działa:
$ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games
Poszukajmy ponownie polecenia nano
:
$ which nano which: no nano in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games)
Oczywiście polecenie nie zostało znalezione, dlatego nie może być wykonane. Komunikat o błędzie określa również przyczynę, dla której polecenie nie zostało znalezione oraz w jakich lokalizacjach było wyszukiwane.
Dodajmy z powrotem katalogi i spróbujmy ponownie uruchomić polecenie.
$ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $ which nano /usr/bin/nano
Teraz nasze polecenie ponownie działa poprawnie.
Tip
|
Kolejność elementów w |
Ćwiczenia z przewodnikiem
-
Utwórz zmienną lokalną
number
. -
Utwórz zmienną środowiskową
ORDER
, używając jednej z dwóch wymienionych metod. -
Wyświetl zarówno nazwy zmiennych, jak i zawartość tych zmiennych.
-
Jakie są zakresy wcześniej utworzonych zmiennych?
Ćwiczenia eksploracyjne
-
Utwórz zmienną lokalną
nr_files
i przypisz jej liczbę wierszy znalezionych w pliku/etc/passwd
. Wskazówka: zajrzyj do poleceniawc
i podstawiania poleceń oraz nie zapomnij o cudzysłowach. -
Utwórz zmienną środowiskową
ME
. Przypisz do niej wartość zmiennejUSER
. -
Dołącz wartość zmiennej
HOME
doME
, wykorzystując separator:
. Następnnie wyświetl zawartość zmiennejME
. -
Korzystając z powyższego przykładu daty, utwórz zmienną o nazwie
today
i przypisz datę dla jednej ze stref czasowych. -
Utwórz inną zmienną o nazwie
today1
i przypisz do niej datę systemową.
Podsumowanie
W tym laboratorium nauczyłeś się:
-
Jakie są rodzaje zmiennych
-
Jak tworzyć zmienne
-
Jak manipulować zmiennymi
Komendy wykorzystywane w ćwiczeniach:
env
-
Wyświetla bieżące środowisko.
echo
-
Wyświetla tekst wyjściowy.
export
-
Udostępnia zmienne lokalne dla podprocesów.
unset
-
Usuwa zmienną.
Odpowiedzi do ćwiczeń z przewodnikiem
-
Utwórz zmienną lokalną
number
.$ number=5
-
Utwórz zmienną środowiskową
ORDER
, używając jednej z dwóch wymienionych metod.$ export ORDER=desc
-
Wyświetl zarówno nazwy zmiennych, jak i zawartość tych zmiennych.
$ echo number number $ echo ORDER ORDER $ echo $number 5 $ echo $ORDER desc
-
Jakie są zakresy wcześniej utworzonych zmiennych?
-
Zakres zmiennej lokalnej
number
obejmuje tylko bieżącą powłokę. -
Zakres zmiennej środowiskowej
ORDER
to bieżąca powłoka i wszystkie wygenerowane przez nią podpowłoki.
-
Odpowiedzi do ćwiczeń eksploracyjnych
-
Utwórz zmienną lokalną
nr_files
i przypisz jej liczbę wierszy znalezionych w pliku/etc/passwd
. Wskazówka: zajrzyj do poleceniawc
i podstawiania poleceń oraz nie zapomnij o cudzysłowach.$ nr_files=`wc -l /etc/passwd`
-
Utwórz zmienną środowiskową
ME
. Przypisz do niej wartość zmiennejUSER
.$ export ME=$USER
-
Dołącz wartość zmiennej
HOME
doME
, wykorzystując separator:
. Następnnie wyświetl zawartość zmiennejME
.$ ME=$ME:$HOME $ echo $ME user:/home/user
-
Korzystając z powyższego przykładu dla daty, utwórz zmienną o nazwie
today
i przypisz datę do jednej ze stref czasowych.The following use the GMT and EST time zones as an example, but any time zone selection is valid.
$ today=$(TZ=GMT date) $ echo $today Thu 31 Jan 15:07:35 GMT 2019
or
$ today=$(TZ=EST date) $ echo $today Thu 31 Jan 10:07:35 EST 2019
-
Utwórz inną zmienną o nazwie
today1
i przypisz do niej datę systemową.Zakładając, że jesteś w strefie czasowej GMT:
$ today1=$(date) $ echo $today1 Thu 31 Jan 10:07:35 EST 2019