From b3e7d453efc1f9e817a613f38470cbf28bec40ba Mon Sep 17 00:00:00 2001 From: xf0r3m Date: Fri, 17 May 2024 13:32:44 +0200 Subject: [PATCH] =?utf8?q?Zako=C5=84czenie=20redagowania=20dodatku=20A.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- articles/terminallog/Linux.Podstawy.html | 134 ++++++++++++++--------- 1 file changed, 81 insertions(+), 53 deletions(-) diff --git a/articles/terminallog/Linux.Podstawy.html b/articles/terminallog/Linux.Podstawy.html index c8c025a..0f51b05 100644 --- a/articles/terminallog/Linux.Podstawy.html +++ b/articles/terminallog/Linux.Podstawy.html @@ -13374,12 +13374,12 @@ xf0r3m@vm-f99031d:~$

Wśród Uniksów mamy dostępne kilka rodzajów powłok. Najczęściej będą - to powłoki BASH oraz KSH (wykorzystywana w środowiska BSD). Obecnie + to powłoki BASH oraz KSH (wykorzystywana w środowiskach BSD). Obecnie w wielu dystrybucjach możemy spotkać się z ewolucją kwestii domyślnej powłoki a przynajmniej dla naszego domyślnego użytkownika. Co raz częściej możemy spotkać się z takimi powłokami jak ZSH oraz FISH są one następcami powłoki BASH, zawierającymi wiele udogodnień - pozwalających na łatwiejsze tworzenie poleceń powłoki. Obecnie na + pozwalających na łatwiejsze tworzenie poleceń. Obecnie na popularności zyskuje projekt o nazwie nu-shell jest to nowy rodzaj połoki zmieniający dotychczasowe doświadczenia z nią związane. Nie mniej jednak informacje przedstawione w tym rozdziale @@ -13397,7 +13397,7 @@ xf0r3m@vm-f99031d:~$ np. skrypt coś usuwa. Sprawdzenie tego czy nasze pomysły maja w ogóle sens, pozwala zaoszczędzić czas podczas debugowania skryptu. Może nam się wydawać, że pewne konstrukcje powłoki są cieżkie do - zapisania w postaci polecenie. Tak może faktycznie być, ale weźmy + zapisania w postaci polecenia. Tak może faktycznie być, ale weźmy pod uwagę to, że te konstrukcje mają szczególnie zaznaczony początek i koniec. Jeśli powłoka nie napotka odpowiedniego słowa kluczowego w wprowadzonym wierszu polecenie wówczas przejdzie w tryb wielolinii, @@ -13426,7 +13426,7 @@ xf0r3m@vm-f99031d:~$ skryptu jest klasyczna powłoka Bourne-a, albo autor zakłada, że domyślnym programem dostarczającym powłokę jest BASH, a plik /bin/sh jest tylko dowiązaniem symboliczym do - /bin/bash. W przypadku Debiana /bin/sh jest + /bin/bash. W przypadku Debiana, /bin/sh jest dowiązaniem do powłoki DASH bedąca tworem podobnym do KSH. Takie skrypty zazwyczaj wykorzysują proste polecenie oraz instrukcje bez specyficznych dla BASH mechanizmów. @@ -13471,7 +13471,7 @@ Hello, World!

Teraz jeśli odbiorę uprawnienia wykonywania dla tego pliku to i tak - będę wstanie go uruchomić. Poprzez uruchomienie pośrednie. + będę wstanie go uruchomić, poprzez uruchomienie pośrednie.

 $ chmod -x test.sh
@@ -13520,7 +13520,7 @@ Hello, World!
         

Głównym celem jaki przyświeca tworzeniu skryptów powłoki jest automatyzacja powtarzalnych zadań wykonywanych w powłoce dystrybucji - Linuxa. Zatem jej naprostszą oraz najbardziej złożoną instrukcją + Linuksa. Zatem jej najprostszą oraz najbardziej złożoną instrukcją będzie najzwyklejszy uruchamiany przez nią program. Możemy dla przykładu umieścić w skrypcie z poprzedniego podrozdziału polecenie ls. @@ -13557,7 +13557,7 @@ ls są zmienne - kontenery na dane, ułatwiające zapisanie toku myślenia w postaci algorytmu. W programowaniu ma to swoje odzwierciedlenie na pamięci, pozwalajac przypisać do - niewielkich obszarów pamięci, identyfikatory aby móc sie odwołać w + niewielkich obszarów pamięci, identyfikatory aby móc odwołać się, w kodzie źródłowym do ich zawartości.

@@ -13631,7 +13631,7 @@ cat /etc/passwd | grep 'xf0r3m' | sed 's,/bin/bash,/bin/sh,'

Powyższy przykład ma duży potencjał optymalizacyjny swoją drogą, - ponieważ pierwsze polecenie można pominąć i podać pliki odrazu + ponieważ pierwsze polecenie można pominąć i podać pliki od razu poleceniu grep.

18.2.4. Podstawienie polecenia

@@ -13657,7 +13657,26 @@ var=$(grep 'xf0r3m' | sed 's,/bin/bash,/bin/sh,'); # lub: var=`grep 'xf0r3m' | sed 's,/bin/bash,/bin/sh,'`;
-

18.2.5. Znaki cytowania

+

18.2.5. Wyrażenie nawiasów okrągłych

+

+ Wyrażenie nawiasów okrągłych lub podstawienie podpowłoki, umożliwia + nam oddzielenie wykonania pewnych poleceń od głównego procesu + podpowłoki wykonującego skrypt. Użycie tego mechinizmu sprawdza się + do zapisania, poleceń w zwykłym nawiasie okrągłym. +

+
+(cd ytfzf && make install doc)
+
+

+ Jest to szczególnie przydane, gdy musimy trzymać kurczowo jakiś + lokalizacji w systemie plików, a niektóre czynności tak jak + instalacja projektu pokazana na powyższym przykładzie wymaga + zmiany tej + ścieżki. Ścieżka może zostać zmieniona w podpowłoce i wykonanie + czynności + również. Nie będzie to miało wpływu na główny nurt działania skryptu. +

+

18.2.6. Znaki cytowania

Jak było prawdopodobnie wspomniane o znakach cytowania w drugim rozdziale. W BASH-u do dyspozycji mamy 3 rodzaje cudzysłowów: @@ -13680,7 +13699,7 @@ var=`grep 'xf0r3m' | sed 's,/bin/bash,/bin/sh,'`; różne funkcje. Szczególnie może mieć to znaczenie przy takich poleceniach jak sed czy grep.

-

18.2.6. Parametry pozycyjne

+

18.2.7. Parametry pozycyjne

Przekazanie do skryptu informacji jest jak najbardziej możlwe, oczywiście możemy zrobić to jak przypadku innych języków - podczas @@ -13721,7 +13740,7 @@ $ ./test.sh foo bar wówczas wszysktie paramety są jednym elementem. Dostęp do parametrów w ten sposób osiągamy poprzez - $*.

-

18.2.7. Wyrażenie parametru

+

18.2.8. Wyrażenie parametru

Wyrażenie parametru posiada w BASH-u kilka funkcji. Jednak chyba najważniejszą oraz tą, która wymaga zapamiętania jest separacja @@ -13738,21 +13757,22 @@ wget https://ftp.server.com/example/${ARCH}/${VERSION}/file.tgz

Oczywiście poza funkcją separacyjną wyrażenie parametru kilka innych zastosowań, jedno już zostało tutaj wymienione, jest to dostęp do - parametrów pozycyjnych powyżej 10-tej pozycji. + parametrów pozycyjnych powyżej 10-tej pozycji. Pozostałe są dostępne + na stronie podręcznika powłoki BASH.

-

18.2.7. Exitcode - wartość zwracana przez program

+

18.2.7. Exitcode - wartość zwracana przez program

Niektóre narzędzie wykorzystywane przez nas do pracy w dystrybucjach Linuksa, zostają przez nas uruchomione i zaraz po tym zostaje nam zwrócony znak zachęty. I tak naprawdę to nie wiemy czy program wykonał swoje zadanie pomyślnie czy też nie. Nie mniej jednak - większość programów działających na Uniksa zwraca takzwany kod + większość programów działających na Uniksach zwraca takzwany kod wyjścia.

@@ -13768,7 +13788,7 @@ wget https://ftp.server.com/example/${ARCH}/${VERSION}/file.tgz

Rozpoczynając omawianie wyrażeń warunkowych, warto sobie wyjaśnić, że w BASH-u nie operujemy na wartościach logicznych. Na wartościach - logicznych operują polecenie wykonujące sprawdzenie danego wyrażenia + logicznych operują polecenia wykonujące sprawdzenie danego wyrażenia warunkowego. Na podstawie wyniku tego wyrażnia narzędzia te generują kod wyjścia: 0 - dla prawdy i 1 - dla fałszu. @@ -13810,11 +13830,12 @@ wget https://ftp.server.com/example/${ARCH}/${VERSION}/file.tgz plikiem.

- Warunki które wymagają dwóch operatorów, to zazwyczaj takie jakie + Warunki, które wymagają dwóch operatorów, to zazwyczaj takie jakie znamy z lekcji matematyki: a > b, d <= e itd. Przyczym tutaj warto przypomnień, że zapis instrukcji warunkowych (warunków), jest jednocześnie zapisem polecenia, tak więc nie można użyć znaków - mniejszości (<) czy większości (>), + mniejszości (<) czy większości + (>), zamiast nich musimy używać specjalnie przygotowanych na tę okazję zamienników:

@@ -13837,12 +13858,12 @@ wget https://ftp.server.com/example/${ARCH}/${VERSION}/file.tgz

Instukcje warunkowe na podstawie przekazanych przez programistę warunków, zwracaja kod wyjscia, który najczęściej interpretowany jest - przez konstrukcje warnukowe. + przez konstrukcje warunkowe.

18.3.2. Konstrukcje warunkowa - if

Konstrukcje warunkowe są elementem kontrolnym w programowaniu. - Ich zadaniem jest wykonanie określonych instrukcji w determinowanych + Ich zadaniem jest wykonanie określonych instrukcji determinowanych na podstawie przekazanej instrukcji warunkowej. I najprostszym tego typu konstrukcją jest if-then-else.

@@ -13867,7 +13888,7 @@ fi zwrócić kod wyjścia. Po warunku obowiązkowo występuje średnik, następnie słowo kluczowe then otwierające blok kodu dla sytuacji, w której warunek zwrócił kod - wyjścia równy 0 (potocznie nazwywany prawdą). Po + wyjścia równy 0 (potocznie nazywany prawdą). Po tym bloku występuje słowo kluczowe else otwierając tym samym blok kodu dla każdej innej wartości kodu wyjścia, która nie jest zerem. @@ -13876,10 +13897,10 @@ fi oraz całą konstrukcję.

- Konstrukcję if-then-else można rozszerzyć od dodatkowy + Konstrukcję if-then-else można rozszerzyć o dodatkowy blok warunkowy elif. W momencie interpretacji takiej konstrukcji BASH sprawdzi na początek warunek przy if - następnie przy elif i jeśli oba te warunki oba te warunki + następnie przy elif i jeśli oba te warunki zwrócą niezerowy kod wyjścia, wtedy zostaną wykonane instrukcje zapisane w bloku else. Warto dodać, że nie ma limitu w ilości dodatkowych warunków (elif) tworząc przy tym całą @@ -13907,7 +13928,7 @@ fi tego przypadku.

-case $alphabet; in
+case $alphabet in
   'a') echo "A";;
   'b') echo "B";;
 esac
@@ -13922,13 +13943,13 @@ esac
           pominięcie spowoduje błąd powłoki.
         

- Konstrukcja Case posiada przypadek uniwersalny + Konstrukcja case posiada przypadek uniwersalny wykorzystywany gdy zmienna nie pasuje, do żadnego z przypadków. Wartość takiego przypadku zapisuje się symbolem gwiazdki (*).

-case $alphabet; in
+case $alphabet in
   'a') echo "A";;
   'b') echo "B";;
    *) echo "To nie jest litera alfabetu";;
@@ -13942,7 +13963,7 @@ esac
           ograniczać do pojednczej wartości, ale może zawierać warianty.
         

-case $alphabet; in
+case $alphabet in
   'a'|'A') echo "A";;
   'b') echo "B";;
    *) echo "To nie jest litera alfabetu";;
@@ -13958,11 +13979,11 @@ esac
         

Pętle w programowaniu służa wykonywaniu powtarzalnych czynności pod pewnym warunkiem. W bloku pętli element warunku - (najprawdopodobniej) ulega zmiania, tak aby pętla zakończyła się + (najprawdopodobniej) ulega zmianie, tak aby pętla zakończyła się i interpretacja programu wróciła na właściwy tor. Jeśli tak się nie dzieje, to wówczas mamy doczynienia z nieskończoną pętlą, tego typu - konstrukcje nie zawsze muszą oznaczać pełnego wykorzystania zasobów - komputera, w zależności co znajduje się w ich bloku kodu. W BASH-u + konstrukcje nie zawsze muszą oznaczać błąd programisty, mogą być one + pożądne, w zależności co znajduje się w ich bloku kodu. W BASH-u dość często wykorzystywane są dwa rodzaje pętli.

18.4.1. Pętla while

@@ -13976,8 +13997,8 @@ esac zmiana jest użależniona od określonego warunku. Ze względu na to, iż warunek pętli musi być prawdą, aby mogła ona w ogóle rozpocząć działanie - licznik musi zostać zdefiniowany przed pętlą. Poniżej - znajduje się przykładowa konstrukcja pętli while wyświetlająca - kwadraty pierwszych 10 dodatnich liczb. + znajduje się przykładowa konstrukcja pętli while + wyświetlająca kwadraty pierwszych 10 dodatnich liczb.

 count=1
@@ -14019,7 +14040,7 @@ for i in 1 2 3 4 5 6 7 8 9 10; do
 done
 

- W tym przypadku list została zapisana z ręki (hardcoded). + W tym przypadku lista została zapisana z ręki (hardcoded). Jednak tutaj panuje duża elastyczność, listę możemy przekazać zmienną lub w postaci podstawienia polecenia. Wykonanie zadania zostało skompresowane do pojedynczej linii. @@ -14031,15 +14052,18 @@ done wykona się co najmniej raz, ponieważ sprawdzanie warunku występuje poniżej bloku kodu pętli, kiedy zostaną wykonane jej instrukcje wówczas będzie można określić czy warunek zwraca kod wyjścia 0 czy - też inny. Kolejną z pętli jest pętla select, która na + też inny. +

+

+ Kolejną z pętli jest select, która na podstawie listy wyświetla menu, oddając wykonanie programu pod interaktywną decyzję użytkownika. Użytkownik wybierając odpowiedni numer ustawia wartość przedstawioną w tym przypadku do zmiennej, - do której można się odwołać w bloku kodu pętli. Powtarzalność tej + do której można się odwołać w bloku pętli. Powtarzalność tej konstrukcji, polega na tym, że będzie ona ciągle pytać użytkownika o wybór do momentu, aż nie przerwiemy wykonania całego skryptu lub - w bloku kodu funkcji zaimplementujemy warunek, że jeśli została - wybrana powiedzmy litera 'q', to zakończ pętlę. Poniższy przykład + w kodzie pętli zaimplementujemy warunek, że jeśli została + wybrana powiedzmy litera 'q', to zakończ pętle. Poniższy przykład wyświetla nazwy kolorów dostępnych do wyświetlenia w powłoce, po wybraniu koloru, zostanie wyświetlona jego próbka.

@@ -14114,7 +14138,7 @@ square 4; Korzystając z możliwości tworzenia funkcji może się okazać, że jest ich całkiem spora ilość i dużo lepszym sposobem na zarządzanie nimi jest przeniesienie do innego pliku. Wówczas aby móc dalej korzystać - z tych funkcji muszą być one dostępne dla skryptu w którym będą + z tych funkcji muszą być one dostępne dla skryptu, w którym będą wywoływane. W BASH-u nie mamy takich poleceń jak include czy import. Tutaj musimy posłużyć się wywołaniem skryptu w tym samym proces powłoki, dzięki temu obszar pamięci @@ -14134,7 +14158,7 @@ source functions.sh . functions.sh

- Drugi sposób nie jest tożamy z takim zapisem jak: + Drugi sposób nie jest tożsamy z takim zapisem jak: ./functions.sh. Tym przypadku kropka została użyta jako element ścieżki. My będziemy wykorzystywać ją jako polecenie. @@ -14169,15 +14193,17 @@ source functions.sh Samo narzędzie AWK jest języka programowania operującym na tekstach. Nie mniej jednak, nie będziemy skupiać się na szczegółach tego narzędzia. Wykorzystamy jedną z jego funkcjonalności. Wspomniane - wcześniej ma jedną zasadniczą wadę, możemy miec problem z określeniem + wcześniej rozwiązanie związane z poleceniem cut + ma jedną zasadniczą wadę, możemy miec problem z określeniem żądanego pola, w momencie gdy znak ogranicznika występuje po sobie kilka razy. Najczęściej jest tak z białymi znakami (spacją oraz znakami tabulacji). Wówczas możemy skorzystać z pól prezentowanych przez narzędzie AWK, pola tego narzędzia są tak - naprawdę kolumnami, więc zadbać o odseparowanie konkretnej linii. + naprawdę kolumnami, więc należy zadbać o odseparowanie konkretnej + linii. Tutaj podział jest prosty, każda kolumna rozpoczyna się od każdego innego znaku nie będącego tabulatorem lub spacją. Numer kolumny - po znaku dolara, tak jak na poniższym przykładzie. + podajemy po znaku dolara, tak jak na poniższym przykładzie.

 ... | awk '{printf $1}' | ...
@@ -14201,16 +14227,16 @@ source functions.sh
           strumieniu danych wejściowych. 
         

- W plikach może zajść taka potrzeba aby zmienić pewien zapis tylko - w jedenej linii, to wskazanie tej wybranej linii może odbyć się na + W plikach może zajść taka potrzeba, aby zmienić pewien zapis tylko + w jednej linii, to wskazanie tej wybranej linii może odbyć się na dwa sposoby: za pomocą wyrażenia regularnego lub podając konkretny - numer linii. Wyrażenie regularne sprawdzi sie przy kilku liniach, w + numer linii. Wyrażenie regularne sprawdzi się przy kilku liniach, w przypadku jednej konkretnej, wystarczy podać jej numer.

Przy początkach naszej pracy ze skryptami, najczęściej będziemy wykorzystywać raczej opcje find and replace, nie mniej - jednak specyficzna składania polecenia sed wymaga aby + jednak specyficzna składania polecenia sed wymaga, aby chociażby pokazać jak wyglądają polecenia insert, append czy print.

@@ -14232,13 +14258,15 @@ $ sed '21i Lorem ipsum dolor sit amet, consectetur adipiscing elit' plik.txt

Polecenie to domyślnie zwrócić na standardowe wyjście całą zawartość pliku z podmienioną linią, ponieważ jest to edytor strumienia to - musi on otwrzyć plik i działać na nim w pamięci. Aby nasze zamiany - faktycznie miały jakiś skutek musimu dodać opcję -i. + musi on otworzyć plik i działać na nim w pamięci. Aby nasze zamiany + faktycznie miały jakiś skutek musimy dodać opcję -i.

Podobnie jest poleceniem append - a, również wymaga ono opcji -i. Składania tego polecenia - jest podobna nie mniej jednak zasada działania jest trochę inna. + jest identyczna z insert, zmianie ulega tylko literka + wskazująca polecenie, nie mniej jednak zasada działania jest + trochę inna. Otóż to polecenie dopisze pod wskazaną linią, podaną wartość. W przypadku naszego przykładu, podana wartość znalazła by się w 22 linii. @@ -14246,7 +14274,7 @@ $ sed '21i Lorem ipsum dolor sit amet, consectetur adipiscing elit' plik.txt

Polecenie sed - print

Za polecenie print odpowiedzialna jest litera p - nie ma w tym nic dziwnego, nie mniej jednak warto zaznaczyć, że + nie ma w tym nic dziwnego, warto jednak zaznaczyć, że polecenie to przyjmuje zakres linii do wyświetlania np. jesli chcemy wyświetlić linie od 1 do 12, to wówczas możemy skorzystać z poniższego polecenia: @@ -14255,9 +14283,9 @@ $ sed '21i Lorem ipsum dolor sit amet, consectetur adipiscing elit' plik.txt $ sed '1,12p' test.txt

- Tutaj istotną role pełni cytowanie. Jeśli checielibyśmy wyświetlić + Tutaj istotną rolę pełni cytowanie. Jeśli checielibyśmy wyświetlić linie od 100 do końca pliku, to polecenie sed mogło by - wyglądac w ten sposób: '100,$p'. + wyglądać w ten sposób: '100,$p'. No dobrze, a jeśli początek zakresu jest zapisany w zmiennej to polecenie powinno wyglądać mniej więcej tak "$a,$p". Problem w tym, że dolna @@ -14285,7 +14313,7 @@ $ sed "1,${a}p" test.txt $ sed "s/ala/ola/" test.txt

- Po polecenie s występuje separator, + Po poleceniu s występuje separator, następnie wartość poszukiwana, znów separator oraz nowa wartość, która zastąpi wartość poszukiwania, na końcu polecenia znów występuje separator. Polecenie zamieni pierwsze wystąpienie ciągu -- 2.39.5