Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00115 004792 19012605 na godz. na dobę w sumie
Skrypty powłoki systemu Linux. Receptury. Wydanie III - książka
Skrypty powłoki systemu Linux. Receptury. Wydanie III - książka
Autor: , , Liczba stron: 480
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-4031-2 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> systemy operacyjne >> linux
Porównaj ceny (książka, ebook (-35%), audiobook).

Obecnie systemy uniksowe wyposaża się w intuicyjne GUI, a pojawiające się dystrybucje Linuksa stają się coraz łatwiejsze w obsłudze i administracji. Wciąż jednak jednym z najważniejszych narzędzi administratora i użytkownika systemu uniksowego pozostaje opracowana w zeszłym stuleciu powłoka Bourne, czyli bash. Umiejętność pisania i używania skryptów powłoki jest bezcenna: można w ten sposób automatyzować monotonne zadania, monitorować stan i działanie systemu, włączając w to identyfikację problematycznych procesów. Łatwiejsze też stają się operacje na plikach, optymalizacje wydajności czy dostosowanie systemu do specyficznych potrzeb.

Niniejsza książka przyda się zarówno użytkownikom, jak i administratorom systemów uniksowych. Znalazły się tu receptury opisujące wykonywanie prostych czynności, takich jak wyszukiwanie plików, a także złożonych zadań administracyjnych, w tym monitorowania i dostosowywania systemu, obsługi sieci, bezpieczeństwa i korzystania z chmury. Nie zabrakło receptur ułatwiających rozwiązywanie złożonych problemów, takich jak tworzenie kopii zapasowych, kontroli wersji i śledzenie pakietów, a także korzystanie z kontenerów, maszyn wirtualnych oraz chmury. Znalazły się tu także receptury przydatne dla programistów, którzy nauczą się analizy aplikacji systemowych i korzystać z takich narzędzi, jak git i fossil.

W tej książce:

Skrypty powłoki - najlepsze wsparcie admina!


Clif Flynt ma kilkadziesiąt lat doświadczenia jako programista i administrator systemów Linux i Unix. Jego aplikacje były wykorzystywane m.in. przez Marynarkę Wojenną USA. W wolnym czasie gra na gitarze i bawi się z kotami swojej żony.

Sarath Lakshman jest programistą w firmie Zynga w Indiach. Entuzjasta systemu GNU/Linux, jest szeroko znany jako jeden z twórców dystrybucji SLYNUX. Jego pasją są skalowalne systemy rozproszone.

Shantanu Tushar jest programistą i uczestniczy w projektach związanych z oprogramowaniem KDE. Pracuje też nad projektami Calligra, Gluon i Plasma.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Linux Shell Scripting Cookbook – Third Edition Tłumaczenie: Joanna Zatorska ISBN: 978-83-283-4031-2 Copyright © Packt Publishing 2017 First published in the English language under the title „Linux Shell Scripting Cookbook - Third Edition – (9781785881985)” Polish edition copyright © 2018 by Helion SA All rights reserved. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/sposy3 Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/sposy3.zip Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis tre(cid:258)ci Przedmowa Rozdzia(cid:239) 1. Poznanie mo(cid:285)liwo(cid:258)ci pow(cid:239)oki Wprowadzenie Wy(cid:258)wietlanie w oknie terminalu U(cid:285)ywanie zmiennych i zmiennych (cid:258)rodowiskowych Funkcja do(cid:239)(cid:200)czaj(cid:200)ca warto(cid:258)(cid:202) na pocz(cid:200)tku zmiennych (cid:258)rodowiskowych Wykonywanie oblicze(cid:241) matematycznych za pomoc(cid:200) pow(cid:239)oki Eksperymentowanie z deskryptorami plików i przekierowywaniem Tablice zwyk(cid:239)e i tablice asocjacyjne Korzystanie z aliasów Uzyskiwanie informacji o terminalu Uzyskiwanie i ustawianie dat oraz opó(cid:283)nienia Debugowanie skryptu Funkcje i argumenty Przekazywanie danych wyj(cid:258)ciowych do drugiego polecenia Odczytywanie n znaków bez naciskania klawisza Enter Wykonywanie polecenia a(cid:285) do osi(cid:200)gni(cid:218)cia zamierzonego celu Separatory pól i iteratory Porównania i testy Dostosowywanie pow(cid:239)oki za pomoc(cid:200) plików konfiguracyjnych Rozdzia(cid:239) 2. Dobre polecenie Wprowadzenie (cid:146)(cid:200)czenie za pomoc(cid:200) polecenia cat Rejestrowanie i odtwarzanie sesji terminalowych Znajdowanie plików i wy(cid:258)wietlanie ich listy Eksperymentowanie z poleceniem xargs Przekszta(cid:239)canie za pomoc(cid:200) polecenia tr Suma kontrolna i weryfikowanie Narz(cid:218)dzia kryptograficzne i funkcje mieszaj(cid:200)ce 13 17 18 18 24 29 30 32 38 40 42 43 47 49 53 55 56 58 60 64 67 68 68 71 72 82 88 92 97 Poleć książkęKup książkę Spis tre(cid:286)ci Sortowanie, unikatowo(cid:258)(cid:202) i duplikaty Liczby losowe i nadawanie nazw plikom tymczasowym Podzia(cid:239) plików i danych Podzia(cid:239) nazw plików na podstawie rozszerzenia Zmiana nazw plików i przenoszenie ich w trybie wsadowym Sprawdzanie pisowni i przetwarzanie s(cid:239)ownika Automatyzowanie interaktywnego wprowadzania danych Przyspieszanie wykonywania polece(cid:241) poprzez uruchamianie procesów równoleg(cid:239)ych Analizowanie katalogu oraz zawartych w nim plików i podkatalogów 98 103 104 107 110 112 114 117 119 Rozdzia(cid:239) 3. Plik na wej(cid:258)ciu, plik na wyj(cid:258)ciu 121 122 Wprowadzenie 122 Generowanie plików dowolnej wielko(cid:258)ci 124 Cz(cid:218)(cid:258)(cid:202) wspólna i ró(cid:285)nica zbiorów (A–B) w przypadku plików tekstowych 127 Znajdowanie i usuwanie duplikatów plików 130 Uprawnienia plików, prawo w(cid:239)a(cid:258)ciciela pliku i bit lepko(cid:258)ci 135 Zapewnianie niezmienno(cid:258)ci plików 136 Masowe generowanie pustych plików 137 Znajdowanie dowi(cid:200)zania symbolicznego i jego obiektu docelowego 139 Wyliczanie statystyk dotycz(cid:200)cych typów plików 141 Korzystanie z plików p(cid:218)tli zwrotnej 145 Tworzenie plików ISO i hybrydowych plików ISO Znajdowanie ró(cid:285)nicy mi(cid:218)dzy plikami oraz stosowanie poprawek 148 Korzystanie z polece(cid:241) head i tail w celu wy(cid:258)wietlenia 10 pierwszych lub ostatnich wierszy 150 Wy(cid:258)wietlanie wy(cid:239)(cid:200)cznie katalogów — inne metody 153 154 Szybka nawigacja na poziomie wiersza polece(cid:241) za pomoc(cid:200) polece(cid:241) pushd i popd 155 Okre(cid:258)lanie liczby wierszy, s(cid:239)ów i znaków w pliku 157 Wy(cid:258)wietlanie drzewa katalogów Przetwarzanie plików wideo i graficznych 158 Rozdzia(cid:239) 4. Przetwarzanie tekstu i sterowanie Wprowadzenie U(cid:285)ywanie wyra(cid:285)e(cid:241) regularnych Wyszukiwanie tekstu wewn(cid:200)trz pliku za pomoc(cid:200) polecenia grep Oparte na kolumnach wycinanie zawarto(cid:258)ci pliku za pomoc(cid:200) polecenia cut Stosowanie polecenia sed w celu zast(cid:218)powania tekstu Korzystanie z polecenia awk w celu zaawansowanego przetwarzania tekstu Cz(cid:218)sto(cid:258)(cid:202) wyst(cid:200)pie(cid:241) s(cid:239)ów u(cid:285)ywanych w danym pliku Kompresowanie i dekompresowanie kodu JavaScript Scalanie wielu plików jako kolumn Wy(cid:258)wietlanie n-tego s(cid:239)owa lub n-tej kolumny pliku lub wiersza Wy(cid:258)wietlanie tekstu mi(cid:218)dzy wierszami o okre(cid:258)lonych numerach lub mi(cid:218)dzy wzorcami Wy(cid:258)wietlanie wierszy w odwrotnej kolejno(cid:258)ci Analizowanie adresów e-mail i URL zawartych w tek(cid:258)cie Usuwanie z pliku zdania zawieraj(cid:200)cego dane s(cid:239)owo Zast(cid:218)powanie wzorca tekstem we wszystkich plikach znajduj(cid:200)cych si(cid:218) w katalogu Podzia(cid:239) tekstu i operacje na parametrach 163 164 164 169 175 178 182 188 190 193 194 195 196 197 199 200 201 4 Poleć książkęKup książkę Spis tre(cid:286)ci Rozdzia(cid:239) 5. Zagmatwany internet? Wcale nie! Wprowadzenie Pobieranie ze strony internetowej Pobieranie strony internetowej jako zwyk(cid:239)ego tekstu Narz(cid:218)dzie cURL — wprowadzenie Uzyskiwanie dost(cid:218)pu do nieprzeczytanych wiadomo(cid:258)ci e-mail us(cid:239)ugi Gmail z poziomu wiersza polece(cid:241) Analizowanie danych z witryny internetowej Przegl(cid:200)darka obrazów i narz(cid:218)dzie do ich pobierania Generator internetowego albumu ze zdj(cid:218)ciami Klient wiersza polece(cid:241) serwisu Twitter Dost(cid:218)p do definicji s(cid:239)ów za po(cid:258)rednictwem serwera sieci Web Znajdowanie uszkodzonych (cid:239)(cid:200)czy w witrynie internetowej (cid:165)ledzenie zmian w witrynie internetowej Wysy(cid:239)anie danych do strony internetowej i wczytywanie odpowiedzi Pobieranie wideo z internetu Tworzenie podsumowania tekstu za pomoc(cid:200) OTS T(cid:239)umaczenie tekstu za pomoc(cid:200) wiersza polece(cid:241) Rozdzia(cid:239) 6. Zarz(cid:200)dzanie repozytorium Wprowadzenie Korzystanie z systemu Git Tworzenie nowego repozytorium Git Klonowanie zdalnego repozytorium Git Dodawanie i zatwierdzanie zmian w repozytorium Git Tworzenie i (cid:239)(cid:200)czenie ga(cid:239)(cid:218)zi w repozytorium Git Udost(cid:218)pnienie swojej pracy Przesy(cid:239)anie ga(cid:239)(cid:218)zi na serwer Pobieranie najnowszej wersji kodu (cid:283)ród(cid:239)owego do bie(cid:285)(cid:200)cej ga(cid:239)(cid:218)zi Sprawdzanie stanu repozytorium Git Wy(cid:258)wietlanie historii repozytorium Git Znajdowanie b(cid:239)(cid:218)dów Oznaczanie migawek znacznikami Etyka komentarzy stosowanych podczas zatwierdzania kodu U(cid:285)ywanie narz(cid:218)dzia Fossil Tworzenie nowego repozytorium Fossil Klonowanie zdalnego repozytorium Fossil Otwieranie projektu Fossil Dodawanie i zatwierdzanie zmian za pomoc(cid:200) narz(cid:218)dzia Fossil U(cid:285)ywanie ga(cid:239)(cid:218)zi i kopii projektu w repozytorium Fossil Udost(cid:218)pnianie pracy za pomoc(cid:200) repozytorium Fossil Aktualizowanie lokalnego repozytorium Fossil Sprawdzanie stanu repozytorium Fossil Wy(cid:258)wietlanie historii repozytorium Fossil 203 204 204 207 208 213 215 216 219 221 224 226 228 230 232 233 234 235 236 237 237 238 238 240 242 244 244 245 246 247 248 250 250 251 253 253 254 255 258 258 259 260 5 Poleć książkęKup książkę Spis tre(cid:286)ci Rozdzia(cid:239) 7. Plan tworzenia kopii zapasowych Wprowadzenie Archiwizowanie za pomoc(cid:200) programu tar Archiwizowanie za pomoc(cid:200) programu cpio Kompresowanie za pomoc(cid:200) programu gunzip (gzip) Archiwizowanie i kompresowanie za pomoc(cid:200) programu zip Szybsze archiwizowanie za pomoc(cid:200) programu pbzip2 Tworzenie systemów plików z kompresj(cid:200) Tworzenie migawek kopii zapasowych za pomoc(cid:200) programu rsync Archiwa ró(cid:285)nicowe Tworzenie obrazów ca(cid:239)ego dysku za pomoc(cid:200) programu fsarchiver Rozdzia(cid:239) 8. Poczciwa sie(cid:202) Wprowadzenie Konfigurowanie sieci U(cid:285)ywanie narz(cid:218)dzia ping (cid:165)ledzenie tras IP Wy(cid:258)wietlanie wszystkich komputerów dost(cid:218)pnych w sieci Uruchamianie polece(cid:241) na ho(cid:258)cie zdalnym za pomoc(cid:200) narz(cid:218)dzia SSH Uruchamianie polece(cid:241) graficznych na ho(cid:258)cie zdalnym Przesy(cid:239)anie plików (cid:146)(cid:200)czenie si(cid:218) z sieci(cid:200) bezprzewodow(cid:200) Automatyczne logowanie protoko(cid:239)u SSH bez wymogu podania has(cid:239)a Przekazywanie portów za pomoc(cid:200) protoko(cid:239)u SSH Pod(cid:239)(cid:200)czanie dysku zdalnego za pomoc(cid:200) lokalnego punktu pod(cid:239)(cid:200)czenia Analiza ruchu sieciowego i portów Pomiar przepustowo(cid:258)ci sieci Tworzenie dowolnych gniazd Tworzenie mostu Udost(cid:218)pnianie po(cid:239)(cid:200)czenia z internetem Tworzenie prostej zapory sieciowej za pomoc(cid:200) iptables Tworzenie sieci typu Virtual Private Network Rozdzia(cid:239) 9. Postaw na monitorowanie Wprowadzenie Monitorowanie wykorzystania przestrzeni dyskowej Obliczanie czasu wykonywania polecenia Informacje o zalogowanych u(cid:285)ytkownikach, dziennikach rozruchu i niepowodzeniu rozruchu Wy(cid:258)wietlanie 10 procesów zajmuj(cid:200)cych w ci(cid:200)gu godziny najwi(cid:218)cej czasu procesora Monitorowanie danych wyj(cid:258)ciowych polece(cid:241) za pomoc(cid:200) narz(cid:218)dzia watch Rejestrowanie dost(cid:218)pu do plików i katalogów Rejestrowanie za pomoc(cid:200) narz(cid:218)dzia syslog Zarz(cid:200)dzanie plikami dziennika za pomoc(cid:200) narz(cid:218)dzia logrotate Monitorowanie logowania u(cid:285)ytkowników w celu wykrycia intruzów Monitorowanie poziomu wykorzystania przestrzeni dysków zdalnych Okre(cid:258)lanie liczby godzin aktywno(cid:258)ci u(cid:285)ytkownika w systemie Pomiar i optymalizowanie aktywno(cid:258)ci dysku 6 265 265 266 272 273 277 278 279 281 284 285 289 290 290 296 300 301 304 307 308 311 314 316 317 318 320 321 323 324 326 327 335 336 336 342 345 347 350 351 352 354 356 358 361 363 Poleć książkęKup książkę Spis tre(cid:286)ci Monitorowanie aktywno(cid:258)ci dysków Sprawdzanie dysków i systemów plików pod k(cid:200)tem b(cid:239)(cid:218)dów Analiza kondycji dysku Uzyskiwanie statystyk dotycz(cid:200)cych dysku Rozdzia(cid:239) 10. Administrowanie Wprowadzenie Gromadzenie informacji o procesach Obja(cid:258)nienie narz(cid:218)dzi: which, whereis, whatis i file Ko(cid:241)czenie procesów oraz wysy(cid:239)anie sygna(cid:239)ów i odpowiadanie na nie Wysy(cid:239)anie komunikatów do terminali u(cid:285)ytkowników System plików /proc Gromadzenie informacji o systemie Planowanie za pomoc(cid:200) programu cron Rodzaje i sposoby u(cid:285)ycia baz danych Zapisywanie bazy danych SQLite i jej odczytywanie Zapisywanie bazy danych MySQL i odczytywanie jej z poziomu pow(cid:239)oki Bash Skrypt do zarz(cid:200)dzania u(cid:285)ytkownikami Masowa zmiana wymiarów obrazów i konwersja formatów Wykonywanie zrzutów ekranowych z poziomu okna terminalu Zarz(cid:200)dzanie wieloma terminalami za pomoc(cid:200) jednego z nich Rozdzia(cid:239) 11. Pod(cid:200)(cid:285)anie za (cid:258)ladami Wprowadzenie (cid:165)ledzenie pakietów za pomoc(cid:200) polecenia tcpdump Znajdowanie pakietów za pomoc(cid:200) polecenia ngrep (cid:165)ledzenie tras sieciowych za pomoc(cid:200) polecenia ip (cid:165)ledzenie wywo(cid:239)a(cid:241) systemowych za pomoc(cid:200) polecenia strace (cid:165)ledzenie funkcji biblioteki dynamicznej za pomoc(cid:200) polecenia ltrace Rozdzia(cid:239) 12. Dostosowywanie systemu Linux Wprowadzenie Identyfikowanie us(cid:239)ug Gromadzenie danych z gniazd za pomoc(cid:200) polecenia ss Gromadzenie danych o operacjach wej(cid:258)cia-wyj(cid:258)cia w systemie za pomoc(cid:200) polecenia dstat Identyfikowanie procesów nadmiernie wykorzystuj(cid:200)cych zasoby za pomoc(cid:200) polecenia pidstat Dostosowywanie j(cid:200)dra systemu Linux za pomoc(cid:200) polecenia sysctl Dostosowywanie systemu Linux za pomoc(cid:200) plików konfiguracyjnych Zmiana priorytetu zarz(cid:200)dcy procesów za pomoc(cid:200) polecenia nice Rozdzia(cid:239) 13. Kontenery, maszyny wirtualne i chmura Wprowadzenie U(cid:285)ywanie kontenerów systemu Linux Stosowanie Dockera U(cid:285)ywanie maszyn wirtualnych w systemie Linux Linux w chmurze Skorowidz 364 365 367 370 373 373 374 380 383 386 389 390 392 396 398 400 405 409 413 414 415 415 415 419 421 423 427 431 431 433 437 439 442 443 445 446 449 449 450 459 463 464 471 7 Poleć książkęKup książkę Poleć książkęKup książkę 1 Poznanie mo(cid:285)liwo(cid:258)ci pow(cid:239)oki Ten rozdzia(cid:239) zawiera nast(cid:218)puj(cid:200)ce podrozdzia(cid:239)y: (cid:81) Wy(cid:258)wietlanie w oknie terminalu (cid:81) U(cid:285)ywanie zmiennych i zmiennych (cid:258)rodowiskowych (cid:81) Funkcja do(cid:239)(cid:200)czaj(cid:200)ca warto(cid:258)(cid:202) na pocz(cid:200)tku zmiennych (cid:258)rodowiskowych (cid:81) Wykonywanie oblicze(cid:241) matematycznych za pomoc(cid:200) pow(cid:239)oki (cid:81) Eksperymentowanie z deskryptorami plików i przekierowywaniem (cid:81) Tablice zwyk(cid:239)e i tablice asocjacyjne (cid:81) Korzystanie z aliasów (cid:81) Uzyskiwanie informacji o terminalu (cid:81) Uzyskiwanie i ustawianie dat oraz opó(cid:283)nienia (cid:81) Debugowanie skryptu (cid:81) Funkcje i argumenty (cid:81) Przekazywanie danych wyj(cid:258)ciowych do drugiego polecenia (cid:81) Odczytywanie n znaków bez naciskania klawisza Enter (cid:81) Wykonywanie polecenia a(cid:285) do osi(cid:200)gni(cid:218)cia zamierzonego celu (cid:81) Separatory pól i iteratory (cid:81) Porównania i testy (cid:81) Dostosowywanie pow(cid:239)oki za pomoc(cid:200) plików konfiguracyjnych Poleć książkęKup książkę Skrypty pow(cid:225)oki systemu Linux. Receptury Wprowadzenie Pierwsze komputery wczytywa(cid:239)y programy zapisane na kartach lub ta(cid:258)mach i generowa(cid:239)y jeden raport. Nie istnia(cid:239)y systemy operacyjne, monitory graficzne ani nawet interaktywne komunikaty. W latach 60. XX wieku komputery obs(cid:239)ugiwa(cid:239)y ju(cid:285) interaktywne terminale (zwykle dalekopisy), które s(cid:239)u(cid:285)y(cid:239)y do wywo(cid:239)ywania polece(cid:241). Opracowany w laboratorium Bell Labs interaktywny interfejs u(cid:285)ytkownika dla zupe(cid:239)nie no- wego systemu operacyjnego Unix charakteryzowa(cid:239) si(cid:218) unikatow(cid:200) funkcj(cid:200). Mo(cid:285)na by(cid:239)o na nim wczytywa(cid:202) i wykonywa(cid:202) polecenia zapisane w pliku tekstowym (zwanym skryptem pow(cid:239)oki), a tak(cid:285)e polecenia wpisane w terminalu. Ta nowo(cid:258)(cid:202) znacznie przyczyni(cid:239)a si(cid:218) do zwi(cid:218)kszenia produktywno(cid:258)ci. Zamiast wpisywa(cid:202) kilka polece(cid:241) w celu wykonania zestawu operacji, programi(cid:258)ci uzyskali mo(cid:285)liwo(cid:258)(cid:202) zapisania pole- ce(cid:241) w pliku i wykonania ich pó(cid:283)niej za pomoc(cid:200) jedynie kilku klawiszy. Skrypty pow(cid:239)oki nie tylko pozwalaj(cid:200) zaoszcz(cid:218)dzi(cid:202) czas, ale tak(cid:285)e pozwalaj(cid:200) dokumentowa(cid:202) wykonywane zadania. Pocz(cid:200)tkowo Unix wspiera(cid:239) jedn(cid:200) pow(cid:239)ok(cid:218) interaktywn(cid:200), opracowan(cid:200) przez Stephena Bourne’a, zwan(cid:200) pow(cid:239)ok(cid:200) Bourne Shell (sh). W 1989 roku Brian Fox, pracuj(cid:200)cy nad projektem GNU, wyselekcjonowa(cid:239) funkcje z wielu ró(cid:285)- nych interfejsów u(cid:285)ytkownika i opracowa(cid:239) now(cid:200) pow(cid:239)ok(cid:218) Bourne Again Shell (Bash). Pow(cid:239)oka Bash rozpoznaje wszystkie konstrukcje pow(cid:239)oki Bourne’a, a tak(cid:285)e zawiera dodatkowe funkcje z pow(cid:239)ok csh, ksh i innych. Poniewa(cid:285) Linux sta(cid:239) si(cid:218) najpopularniejsz(cid:200) implementacj(cid:200) systemów uniksowych, pow(cid:239)oka Bash sta(cid:239)a si(cid:218) w rzeczywisto(cid:258)ci standardow(cid:200) pow(cid:239)ok(cid:200) w systemach Unix i Linux. Ta ksi(cid:200)(cid:285)ka koncentruje si(cid:218) na systemie Linux i pow(cid:239)oce Bash. Jednak wi(cid:218)kszo(cid:258)(cid:202) omówionych w niej skryptów mo(cid:285)na uruchomi(cid:202) zarówno w systemie Linux, jak i Unix, korzystaj(cid:200)c z pow(cid:239)ok Bash, sh, ash, dash, ksh lub innych pow(cid:239)ok podobnych do pow(cid:239)oki sh. G(cid:239)ównym celem tego rozdzia(cid:239)u jest zaprezentowanie czytelnikom przegl(cid:200)du (cid:258)rodowiska po- w(cid:239)oki i umo(cid:285)liwienie im zapoznania si(cid:218) z podstawowymi funkcjami zwi(cid:200)zanymi z pow(cid:239)ok(cid:200). Wy(cid:258)wietlanie w oknie terminalu U(cid:285)ytkownicy korzystaj(cid:200) ze (cid:258)rodowiska pow(cid:239)oki za pomoc(cid:200) sesji terminalu. W przypadku sys- temu opartego na graficznym interfejsie u(cid:285)ytkownika jest to okno terminalu. Je(cid:258)li system (na przyk(cid:239)ad system produkcyjny lub sesja ssh) nie posiada interfejsu graficznego, wiersz polece(cid:241) b(cid:218)dzie dost(cid:218)pny od razu po zalogowaniu si(cid:218). Wy(cid:258)wietlanie tekstu w terminalu jest zadaniem, które regularnie wykonuje wi(cid:218)kszo(cid:258)(cid:202) skryptów i na- rz(cid:218)dzi. Pow(cid:239)oka umo(cid:285)liwia wy(cid:258)wietlanie tekstu za pomoc(cid:200) ró(cid:285)nych metod i w ró(cid:285)nych formatach. 18 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Poznanie mo(cid:298)liwo(cid:286)ci pow(cid:225)oki Wprowadzenie Polecenia s(cid:200) wpisywane i wykonywane w terminalu pow(cid:239)oki. Po otwarciu okna terminalu do- st(cid:218)pny jest wiersz polece(cid:241). Mo(cid:285)na go skonfigurowa(cid:202) na wiele ró(cid:285)nych sposobów, ale zwykle ma on nast(cid:218)puj(cid:200)cy format: nazwa_u(cid:285)ytkownika@nazwa_hosta$ Mo(cid:285)na go te(cid:285) skonfigurowa(cid:202) nast(cid:218)puj(cid:200)co: root@nazwa_hosta# lub w postaci znaku $ albo #. Znak $ reprezentuje zwyk(cid:239)ych u(cid:285)ytkowników, a znak # — administratora root. W systemie Linux u(cid:285)ytkownik root ma najwi(cid:218)ksze przywileje. Odradza si(cid:218) korzystanie z pow(cid:239)oki jako u(cid:285)ytkownik root (administrator). Je(cid:258)li pow(cid:239)oka ma du(cid:285)e przywileje, zwyk(cid:239)e literówki mog(cid:200) si(cid:218) okaza(cid:202) znacznie wi(cid:218)kszym zagro(cid:285)eniem. Zawsze nale(cid:285)y si(cid:218) logowa(cid:202) jako zwyk(cid:239)y u(cid:285)ytkownik (mo(cid:285)na to rozpozna(cid:202) w pow(cid:239)oce po znaku $ na pocz(cid:200)tku wiersza polece(cid:241)), a polecenia wy- magaj(cid:200)ce wi(cid:218)kszych uprawnie(cid:241) nale(cid:285)y uruchamia(cid:202) za pomoc(cid:200) narz(cid:218)dzi takich jak sudo. Polecenie uru- chomione zgodnie ze wzorcem sudo polecenie argumenty zostanie uruchomione z upraw- nieniami u(cid:285)ytkownika root. Skrypt pow(cid:239)oki zazwyczaj zaczyna si(cid:218) magicznym ci(cid:200)giem #! w nast(cid:218)puj(cid:200)cy sposób: #!/bin/bash Wiersz magicznego ci(cid:200)gu jest wierszem, w którym (cid:258)cie(cid:285)k(cid:218) interpretera poprzedza ci(cid:200)g #!. W przypadku pow(cid:239)oki Bash (cid:258)cie(cid:285)ka polecenia interpretera ma posta(cid:202) /bin/bash. Wiersz rozpo- czynaj(cid:200)cy si(cid:218) symbolem # jest traktowany przez interpreter pow(cid:239)oki jako komentarz. Magiczny ci(cid:200)g mo(cid:285)e si(cid:218) znajdowa(cid:202) tylko w pierwszym wierszu skryptu. W ten sposób okre(cid:258)lamy inter- preter s(cid:239)u(cid:285)(cid:200)cy do odczytania skryptu. Skrypt mo(cid:285)e by(cid:202) wykonany na dwa nast(cid:218)puj(cid:200)ce sposoby. 1. Przy u(cid:285)yciu nazwy pliku jako argumentu wiersza polecenia: bash mojSkrypt.sh 2. Poprzez ustawienie uprawnie(cid:241) wykonywania dla pliku skryptu, aby umo(cid:285)liwi(cid:202) jego uruchomienie: chmod 755 mojSkrypt.hs ./mojSkrypt.sh Je(cid:258)li skrypt jest uruchamiany jako argument wiersza polecenia pow(cid:239)oki bash, u(cid:285)ycie magicz- nego ci(cid:200)gu #! w skrypcie jest zb(cid:218)dne. Magiczny ci(cid:200)g u(cid:239)atwia uruchamianie samodzielnego skryptu, poniewa(cid:285) znajduj(cid:200)ca si(cid:218) w tym samym wierszu (cid:258)cie(cid:285)ka definiuje interpreter skryptu. 19 Poleć książkęKup książkę Skrypty pow(cid:225)oki systemu Linux. Receptury Uprawnienie wykonywania skryptu mo(cid:285)e by(cid:202) ustawione nast(cid:218)puj(cid:200)co: $ chmod a+x skrypt.sh Powy(cid:285)sze polecenie nadaje plikowi skryptu uprawnienie wykonywania dla wszystkich u(cid:285)yt- kowników. Skrypt mo(cid:285)e by(cid:202) wykonany za pomoc(cid:200) polecenia: $ ./skrypt.sh # ./ Reprezentuje bie(cid:298)(cid:261)cy katalog. Skrypt mo(cid:285)na te(cid:285) uruchomi(cid:202) nast(cid:218)puj(cid:200)co: $ /home/path/skrypt.sh # U(cid:298)yto pe(cid:225)nej (cid:286)cie(cid:298)ki do skryptu. J(cid:200)dro systemu wczyta pierwszy wiersz i sprawdzi, czy zawiera on magiczny ci(cid:200)g #!/bin/bash. W dalszej kolejno(cid:258)ci zidentyfikuje (cid:258)cie(cid:285)k(cid:218) /bin/bash i wykona skrypt w nast(cid:218)puj(cid:200)cy sposób: $ /bin/bash skrypt.sh Po uruchomieniu interaktywnej pow(cid:239)oki najpierw jest w niej wykonywany zestaw polece(cid:241) definiuj(cid:200)cych ró(cid:285)ne ustawienia, m.in. opcje wiersza polece(cid:241) i kolory. Ten zestaw polece(cid:241) jest wczytywany ze skryptu pow(cid:239)oki ~/.bashrc (lub ~/.bash_profile w przypadku pow(cid:239)ok lo- gowania), który znajduje si(cid:218) w katalogu domowym u(cid:285)ytkownika. Pow(cid:239)oka Bash utrzymuje równie(cid:285) histori(cid:218) polece(cid:241) uruchomionych przez u(cid:285)ytkownika. Historia ta jest dost(cid:218)pna w pliku ~/.bash_history. Znak ~ stanowi skrót (cid:258)cie(cid:285)ki katalogu domowego u(cid:285)ytkownika. Zwykle jest to katalog /home/u(cid:285)ytkownik, gdzie element u(cid:285)ytkownik odpowiada nazwie u(cid:285)ytkownika, lub /root w przypadku u(cid:285)ytkownika ro- ot. Pow(cid:239)oka logowania jest uruchamiana podczas logowania si(cid:218) na komputerze. Jednak sesje terminalu uruchamiane podczas logowania si(cid:218) w (cid:258)rodowisku graficznym (na przyk(cid:239)ad GNOME lub KDE) nie s(cid:200) po- w(cid:239)okami logowania. Podczas logowania si(cid:218) za pomoc(cid:200) mened(cid:285)era graficznego, takiego jak GDM lub KDM, pliki .profile lub .bash_profile mog(cid:200) zosta(cid:202) zignorowane (zwykle s(cid:200)). Natomiast podczas logowania si(cid:218) w systemie zdalnym przy u(cid:285)yciu ssh zostanie wczytany plik .profile. W pow(cid:239)oce ka(cid:285)de polecenie w sekwencji polece(cid:241) jest oddzielone za pomoc(cid:200) (cid:258)rednika lub nowego wiersza. Oto przyk(cid:239)ad: $ polecenie1 ; polecenie2 Odpowiada to nast(cid:218)puj(cid:200)cym wierszom: $ polecenie1 $ polecenie2 Komentarz rozpoczyna si(cid:218) znakiem # i jest kontynuowany do ko(cid:241)ca wiersza. Wiersze komen- tarzy najcz(cid:218)(cid:258)ciej s(cid:200) u(cid:285)ywane do zamieszczenia opisu kodu zawartego w pliku lub do wy(cid:239)(cid:200)czenia wiersza kodu z wykonywania podczas debugowania: # skrypt.sh — wy(cid:286)wietla Witaj, (cid:286)wiecie echo Witaj, (cid:258)wiecie Zajmijmy si(cid:218) teraz podstawowymi recepturami przedstawionymi w tym rozdziale. 20 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Poznanie mo(cid:298)liwo(cid:286)ci pow(cid:225)oki Jak to zrobi(cid:202) Podstawowym poleceniem s(cid:239)u(cid:285)(cid:200)cym do wy(cid:258)wietlania w oknie terminalu jest polecenie echo. Domy(cid:258)lnie wstawia ono nowy wiersz na ko(cid:241)cu ka(cid:285)dego wywo(cid:239)ania: $ echo Witaj w programie Bash Witaj w programie Bash Zwyk(cid:239)e u(cid:285)ycie tekstu w cudzys(cid:239)owie w wierszu polecenia echo powoduje wy(cid:258)wietlenie tekstu w oknie terminalu. Tekst bez cudzys(cid:239)owu równie(cid:285) zapewnia te same dane wyj(cid:258)ciowe: $ echo Witaj w programie Bash Witaj w programie Bash Inny sposób realizacji tego zadania polega na u(cid:285)yciu apostrofów: $ echo Tekst w apostrofach Cho(cid:202) te metody mog(cid:200) wygl(cid:200)da(cid:202) podobnie, ka(cid:285)da z nich ma konkretne zastosowanie, a tak(cid:285)e efekty uboczne. Cudzys(cid:239)owy umo(cid:285)liwiaj(cid:200) interpretacj(cid:218) znaków specjalnych znajduj(cid:200)cych si(cid:218) w tek(cid:258)cie. Apostrofy wy(cid:239)(cid:200)czaj(cid:200) ich interpretacj(cid:218). Rozwa(cid:285) nast(cid:218)puj(cid:200)ce polecenie: $ echo Nie mo(cid:285)na uwzgl(cid:218)dni(cid:202) wykrzyknika (!) w cudzys(cid:239)owie. Spowoduje ono zwrócenie nast(cid:218)puj(cid:200)cego wiersza: bash: !: event not found error Je(cid:258)li wi(cid:218)c zamierzasz wy(cid:258)wietli(cid:202) znak specjalny, na przyk(cid:239)ad wykrzyknik, nie u(cid:285)ywaj go we- wn(cid:200)trz cudzys(cid:239)owu, ale skorzystaj z apostrofów. Mo(cid:285)esz te(cid:285) poprzedzi(cid:202) wykrzyknik specjal- nym znakiem zmiany znaczenia \: $ echo Witaj, (cid:258)wiecie! Inny sposób jest taki: $ echo Witaj, (cid:258)wiecie! lub: $ echo Witaj, (cid:258)wiecie\! # Wykrzyknik poprzedzono znakiem \. W przypadku korzystania z polecenia echo bez cudzys(cid:239)owu nie mo(cid:285)esz u(cid:285)y(cid:202) (cid:258)rednika, ponie- wa(cid:285) w pow(cid:239)oce Bash pe(cid:239)ni on funkcj(cid:218) separatora polece(cid:241). Na przyk(cid:239)ad: echo witaj;witaj W przypadku powy(cid:285)szego wiersza Bash traktuje ci(cid:200)g echo witaj jako pierwsze polecenie, a ko- lejne wyst(cid:200)pienie (cid:239)a(cid:241)cucha witaj jako drugie polecenie. 21 Poleć książkęKup książkę Skrypty pow(cid:225)oki systemu Linux. Receptury Je(cid:258)li u(cid:285)yjemy apostrofów, rozwijanie zmiennych, omówione w kolejnej recepturze, nie b(cid:218)dzie dzia(cid:239)a(cid:202). Innym poleceniem s(cid:239)u(cid:285)(cid:200)cym do wy(cid:258)wietlania w oknie terminalu jest printf. Polecenie to u(cid:285)ywa tych samych argumentów co polecenie printf j(cid:218)zyka programowania C. Oto przyk(cid:239)ad: $ printf Witaj, (cid:258)wiecie Polecenie printf pobiera tekst w cudzys(cid:239)owie lub argumenty oddzielone spacjami. Umo(cid:285)li- wia ono zastosowanie sformatowanych (cid:239)a(cid:241)cuchów. Mo(cid:285)esz okre(cid:258)li(cid:202) szeroko(cid:258)(cid:202) (cid:239)a(cid:241)cucha, lewe lub prawe wyrównanie itp. Domy(cid:258)lnie polecenie printf nie zapewnia nowego wiersza. W razie potrzeby konieczne jest okre(cid:258)lenie nowego wiersza w sposób zaprezentowany w na- st(cid:218)puj(cid:200)cym skrypcie: #!/bin/bash #nazwa pliku: printf.sh printf -5s -10s -4s\n Numer Imi(cid:218) Wynik printf -5s -10s -4.2f\n 1 Stefan 80.3456 printf -5s -10s -4.2f\n 2 Janusz 90.9989 printf -5s -10s -4.2f\n 3 Józef 77.564 Uzyskamy nast(cid:218)puj(cid:200)ce sformatowane dane wyj(cid:258)ciowe: Numer Imi(cid:218) Wynik 1 Stefan 80.35 2 Janusz 91.00 3 Józef 77.56 Jak to dzia(cid:239)a s, c, d i f to znaki zast(cid:218)pcze formatu, okre(cid:258)laj(cid:200)ce sposób wy(cid:258)wietlania kolejnych argu- mentów. Ci(cid:200)g -5s mo(cid:285)na opisa(cid:202) jako podstawienie (cid:239)a(cid:241)cucha z lewym wyrównaniem (repre- zentowane przez znak -) o szeroko(cid:258)ci 5. Je(cid:258)li nie zosta(cid:239)by podany znak -, (cid:239)a(cid:241)cuch by(cid:239)by wy- równany do prawej strony. Szeroko(cid:258)(cid:202) okre(cid:258)la liczb(cid:218) znaków zarezerwowanych dla tej zmiennej. W przypadku (cid:239)a(cid:241)cucha Imi(cid:218) zarezerwowana szeroko(cid:258)(cid:202) wynosi 10. A zatem dowolne imi(cid:218) b(cid:218)- dzie uwzgl(cid:218)dnia(cid:202) zarezerwowan(cid:200) dla niego szeroko(cid:258)(cid:202), wynosz(cid:200)c(cid:200) 10 znaków, a reszta znaków brakuj(cid:200)cych do dziesi(cid:218)ciu zostanie uzupe(cid:239)niona spacjami. W przypadku liczb zmiennoprzecinkowych mo(cid:285)liwe jest przekazanie dodatkowych parame- trów w celu zaokr(cid:200)glenia liczb po przecinku. Na potrzeby wyników sformatowano (cid:239)a(cid:241)cuch w postaci -4.2f, w którym ci(cid:200)g .2 powoduje za- okr(cid:200)glenie do dwóch miejsc dziesi(cid:218)tnych. Zauwa(cid:285), (cid:285)e dla ka(cid:285)dego wiersza (cid:239)a(cid:241)cucha formatu u(cid:285)yto symbolu nowego wiersza (\n). 22 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Poznanie mo(cid:298)liwo(cid:286)ci pow(cid:225)oki To nie wszystko Zawsze nale(cid:285)y zwraca(cid:202) uwag(cid:218) na to, (cid:285)e flagi polece(cid:241) echo i printf powinny pojawi(cid:202) si(cid:218) przed wszelkimi (cid:239)a(cid:241)cuchami w poleceniu. W przeciwnym razie program Bash potraktuje flagi jako kolejne (cid:239)a(cid:241)cuchy. Eliminowanie nowego wiersza w wyniku polecenia echo Domy(cid:258)lnie polecenie echo na ko(cid:241)cu swoich danych wyj(cid:258)ciowych umieszcza nowy wiersz. Flaga -n umo(cid:285)liwia unikni(cid:218)cie tego. Polecenie echo mo(cid:285)e te(cid:285) akceptowa(cid:202) jako argument sekwencje o zmie- nionym znaczeniu w (cid:239)a(cid:241)cuchach umieszczonych w cudzys(cid:239)owie. W celu zastosowania takich sekwencji u(cid:285)yj polecenia echo w formacie echo -e (cid:239)a(cid:241)cuch zawieraj(cid:200)cy sekwencje o zmienionym znaczeniu . Oto przyk(cid:239)ad: echo -e 1\t2\t3 123 Wy(cid:258)wietlanie kolorowych danych wyj(cid:258)ciowych W celu wy(cid:258)wietlenia kolorowych danych wyj(cid:258)ciowych w oknie terminalu mo(cid:285)na u(cid:285)y(cid:202) se- kwencji o zmienionym znaczeniu. Do reprezentowania ka(cid:285)dego koloru u(cid:285)ywa si(cid:218) odpowiednich kodów. Na przyk(cid:239)ad: zreseto- wanie = 0, czarny = 30, czerwony = 31, zielony = 32, (cid:285)ó(cid:239)ty = 33, niebieski = 34, purpurowy = 35, niebieskozielony = 36 i bia(cid:239)y = 37. Aby wy(cid:258)wietli(cid:202) kolorowy tekst, wprowad(cid:283) nast(cid:218)puj(cid:200)ce polecenie: echo -e \e[1;31m To jest czerwony tekst \e[0m W poleceniu tym ci(cid:200)g \e[1;31 jest (cid:239)a(cid:241)cuchem o zmienionym znaczeniu, ustawiaj(cid:200)cym kolor czerwony. Z kolei ci(cid:200)g \e[0m ponownie ustawia kolor czarny. Je(cid:258)li chcesz wy(cid:258)wietli(cid:202) inny kolor, w miejsce warto(cid:258)ci 31 wstaw wymagany kod koloru. W przypadku kolorowego t(cid:239)a powszechnie u(cid:285)ywa si(cid:218) nast(cid:218)puj(cid:200)cych kodów kolorów: zreseto- wanie = 0, czarny = 40, czerwony = 41, zielony = 42, (cid:285)ó(cid:239)ty = 43, niebieski = 44, purpurowy = 45, niebieskozielony = 46 i bia(cid:239)y = 47. Aby wy(cid:258)wietli(cid:202) kolorowe t(cid:239)o, wprowad(cid:283) nast(cid:218)puj(cid:200)ce polecenie: echo -e \e[1;42m Zielone t(cid:239)o \e[0m Powy(cid:285)sze przyk(cid:239)ady obejmuj(cid:200) tylko cz(cid:218)(cid:258)(cid:202) sekwencji o zmienionym znaczeniu. Wi(cid:218)cej mo(cid:285)na znale(cid:283)(cid:202) w dokumentacji dost(cid:218)pnej za pomoc(cid:200) polecenia man console_codes. 23 Poleć książkęKup książkę Skrypty pow(cid:225)oki systemu Linux. Receptury U(cid:285)ywanie zmiennych i zmiennych (cid:258)rodowiskowych We wszystkich j(cid:218)zykach programowania zmienne s(cid:239)u(cid:285)(cid:200) do przechowywania danych w celu pó(cid:283)niejszego u(cid:285)ycia lub modyfikacji. W przeciwie(cid:241)stwie do j(cid:218)zyków kompilowanych j(cid:218)zyki skryptowe zwykle nie wymagaj(cid:200) zadeklarowania typów zmiennych przed mo(cid:285)liwo(cid:258)ci(cid:200) ich u(cid:285)ycia. Typ jest wyznaczany na podstawie sposobu u(cid:285)ycia. Warto(cid:258)(cid:202) zmiennej mo(cid:285)emy odczy- ta(cid:202), poprzedzaj(cid:200)c jej nazw(cid:218) symbolem dolara. W pow(cid:239)oce istniej(cid:200) specjalne zmienne, które przechowuj(cid:200) konfiguracj(cid:218) i informacje dotycz(cid:200)ce dost(cid:218)pnych drukarek, (cid:258)cie(cid:285)ek wyszukiwania itd. S(cid:200) to zmienne (cid:258)rodowiskowe. Wprowadzenie Nazwy zmiennych okre(cid:258)la si(cid:218) przy u(cid:285)yciu sekwencji liter, cyfr, podkre(cid:258)lników, z wyj(cid:200)tkiem bia(cid:239)ych znaków. Zwykle przestrzega si(cid:218) konwencji nazywania zmiennych (cid:258)rodowiskowych za pomoc(cid:200) WIELKICH_LITER, natomiast w przypadku zmiennych u(cid:285)ywanych w skrypcie sto- suje si(cid:218) notacj(cid:218) camelCase lub ma(cid:239)e_litery. Zmienne (cid:258)rodowiskowe s(cid:200) dost(cid:218)pne we wszystkich aplikacjach i skryptach. Aby w oknie ter- minalu wy(cid:258)wietli(cid:202) wszystkie zmienne (cid:258)rodowiskowe powi(cid:200)zane z danym procesem terminalu, nale(cid:285)y wykona(cid:202) polecenie env lub printenv. $ env PWD=/home/clif/ShellCookBook HOME=/home/clif SHELL=/bin/bash # …i wiele wi(cid:266)cej wierszy W przypadku ka(cid:285)dego procesu wy(cid:258)wietlenie u(cid:285)ywanych zmiennych (cid:258)rodowiskowych umo(cid:285)- liwia nast(cid:218)puj(cid:200)ce polecenie: cat /proc/$PID/environ W miejsce (cid:239)a(cid:241)cucha PID wstaw identyfikator odpowiedniego procesu (PID jest zawsze warto- (cid:258)ci(cid:200) ca(cid:239)kowit(cid:200)). Dla przyk(cid:239)adu za(cid:239)ó(cid:285)my, (cid:285)e dzia(cid:239)a aplikacja o nazwie gedit. W celu uzyskania identyfikatora procesu tej aplikacji wykonaj nast(cid:218)puj(cid:200)ce polecenie pgrep: $ pgrep gedit 12501 Stosuj(cid:200)c nast(cid:218)puj(cid:200)ce polecenie, mo(cid:285)esz uzyska(cid:202) zmienne (cid:258)rodowiskowe powi(cid:200)zane z procesem: $ cat /proc/12501/environ GDM_KEYBOARD_LAYOUT=usGNOME_KEYRING_PID=1560USER=slynuxHOME=/home/slynux 24 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Poznanie mo(cid:298)liwo(cid:286)ci pow(cid:225)oki Zauwa(cid:285), (cid:285)e dla wygody wiele zmiennych (cid:258)rodowiskowych jest usuwanych. Rzeczywiste dane wyj(cid:258)ciowe mog(cid:200) zawiera(cid:202) ró(cid:285)ne zmienne. Plik specjalny /proc/PID/environ zawiera list(cid:218) zmiennych (cid:258)rodowiskowych i ich warto(cid:258)ci. Ka(cid:285)da zmien- na jest reprezentowana jako para nazwa=warto(cid:258)(cid:202). Pary s(cid:200) oddzielone ci(cid:200)giem znaków \0. Taka re- prezentacja jest trudna w interpretacji przez ludzi. Mo(cid:285)esz uzyska(cid:202) czytelniejszy raport, przekazuj(cid:200)c wyj(cid:258)cie polecenia cat do polecenia tr i wsta- wiaj(cid:200)c ci(cid:200)g \n zamiast ci(cid:200)gu \0: $ cat /proc/12501/environ | tr \0 \n Jak to zrobi(cid:202) Zmienna mo(cid:285)e by(cid:202) przypisana w nast(cid:218)puj(cid:200)cy sposób: zmienna=warto(cid:258)(cid:202) (cid:146)a(cid:241)cuch zmienna to nazwa zmiennej, a (cid:239)a(cid:241)cuch warto(cid:258)(cid:202) okre(cid:258)la warto(cid:258)(cid:202) do przypisania. Je(cid:258)li warto(cid:258)(cid:202) nie zawiera (cid:285)adnych bia(cid:239)ych znaków (np. spacji), nie musi by(cid:202) umieszczana w cudzys(cid:239)owie. W przeciwnym razie konieczne jest zastosowanie dla warto(cid:258)ci cudzys(cid:239)owu lub apostrofów. Zauwa(cid:285), (cid:285)e zapisy zmienna = warto(cid:258)(cid:202) i zmienna=warto(cid:258)(cid:202) s(cid:200) ró(cid:285)ne. Cz(cid:218)stym b(cid:239)(cid:218)dem jest wpro- wadzanie formatu zmienna = warto(cid:258)(cid:202) zamiast zmienna=warto(cid:258)(cid:202). Znak równo(cid:258)ci bez spacji do- tyczy operacji przypisania, natomiast razem ze spacj(cid:200) dotyczy operacji równo(cid:258)ci. W celu wy(cid:258)wietlenia zawarto(cid:258)ci zmiennej u(cid:285)yj symbolu dolara ($), a za nim wstaw nazw(cid:218) zmiennej w nast(cid:218)puj(cid:200)cy sposób: zmienna= warto(cid:258)(cid:202) # przypisanie warto(cid:286)ci zmiennej zmienna. echo $zmienna lub: echo ${zmienna} Dane wyj(cid:258)ciowe s(cid:200) nast(cid:218)puj(cid:200)ce: warto(cid:258)(cid:202) W poleceniach printf, echo i innych poleceniach pow(cid:239)oki mo(cid:285)esz u(cid:285)y(cid:202) warto(cid:258)ci zmiennych, umieszczaj(cid:200)c je w cudzys(cid:239)owie. #!/bin/bash #nazwa pliku: zmienne.sh fruit=jab(cid:239)ko count=5 echo Liczba owoców: $count ${fruit}(ek). 25 Poleć książkęKup książkę Skrypty pow(cid:225)oki systemu Linux. Receptury Dane wyj(cid:258)ciowe s(cid:200) nast(cid:218)puj(cid:200)ce: Liczba owoców: 5 jab(cid:239)ko(ek). Poniewa(cid:285) w pow(cid:239)oce spacja s(cid:239)u(cid:285)y do rozdzielania s(cid:239)ów, musimy skorzysta(cid:202) z nawiasów klam- rowych, aby pow(cid:239)oka rozpozna(cid:239)a zmienn(cid:200) o nazwie fruit, a nie fruit(ek). Zmienne (cid:258)rodowiskowe dziedzicz(cid:200) po procesach nadrz(cid:218)dnych. Na przyk(cid:239)ad HTTP_PROXY to zmienna (cid:258)rodowiskowa, okre(cid:258)laj(cid:200)ca, jaki serwer proxy powinien by(cid:202) u(cid:285)yty dla po(cid:239)(cid:200)czenia internetowego. Zmienn(cid:200) t(cid:218) ustawia si(cid:218) nast(cid:218)puj(cid:200)co: HTTP_PROXY=192.168.0.2:3128 export HTTP_PROXY Polecenie export s(cid:239)u(cid:285)y do deklarowania jednej lub kilku zmiennych, które b(cid:218)d(cid:200) dziedziczone przez zadania potomne. Po wyeksportowaniu zmiennych dowolna aplikacja uruchomiona z poziomu bie(cid:285)(cid:200)cego skryptu pow(cid:239)oki otrzyma t(cid:218) zmienn(cid:200). Jest wiele standardowych zmiennych (cid:258)rodowiskowych utworzonych i wykorzystywanych przez pow(cid:239)ok(cid:218). Mo(cid:285)emy te(cid:285) eksportowa(cid:202) w(cid:239)asne zmienne. Przyk(cid:239)adowo, zmienna PATH zawiera list(cid:218) folderów, w których pow(cid:239)oka b(cid:218)dzie szuka(cid:239)a aplikacji. Typowa zmienna PATH b(cid:218)dzie zawiera(cid:239)a: $ echo $PATH /home/slynux/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/ bin:/usr/games (cid:165)cie(cid:285)ki do katalogów s(cid:200) oddzielane od siebie znakiem :. Zazwyczaj zmienna $PATH jest defi- niowana w plikach /etc/environment, /etc/profile lub ~/.bashrc. Gdy konieczne jest dodanie nowej (cid:258)cie(cid:285)ki do zmiennej (cid:258)rodowiskowej PATH, u(cid:285)yj nast(cid:218)puj(cid:200)- cego polecenia: export PATH= $PATH:/home/user/bin Mo(cid:285)esz równie(cid:285) zastosowa(cid:202) polecenia: $ PATH= $PATH:/home/user/bin $ export PATH $ echo $PATH /home/slynux/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/ bin:/usr/games:/home/user/bin W tym przypadku do zmiennej PATH dodano (cid:258)cie(cid:285)k(cid:218) /home/user/bin. Oto kilka powszechnie znanych zmiennych (cid:258)rodowiskowych: HOME, PWD, USER, UID i SHELL. 26 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Poznanie mo(cid:298)liwo(cid:286)ci pow(cid:225)oki Je(cid:258)li u(cid:285)yjemy cudzys(cid:239)owów, zmienne nie zostan(cid:200) rozwini(cid:218)te i zostan(cid:200) wy(cid:258)wietlone w taki sposób, w jaki zosta(cid:239)y wpisane. Zatem polecenie $ echo $zmienna zwróci napis $zmienna. Natomiast w wyniku uruchomienia polecenia $ echo $zmienna uzyskamy warto(cid:258)(cid:202) zmiennej $zmienna, o ile zosta(cid:239)a zdefiniowana. W przeciwnym razie nie uzyskamy (cid:285)adnych danych wyj(cid:258)ciowych. To nie wszystko W pow(cid:239)oce zdefiniowano znacznie wi(cid:218)cej funkcji. Poni(cid:285)ej opisano niektóre z nich. Okre(cid:258)lanie d(cid:239)ugo(cid:258)ci (cid:239)a(cid:241)cucha W celu uzyskania d(cid:239)ugo(cid:258)ci warto(cid:258)ci zmiennej u(cid:285)yj nast(cid:218)puj(cid:200)cego zapisu: length=${#var} Oto przyk(cid:239)ad: $ var=12345678901234567890$ $ echo ${#var} 20 length okre(cid:258)la liczb(cid:218) znaków w (cid:239)a(cid:241)cuchu. Identyfikowanie bie(cid:285)(cid:200)cej pow(cid:239)oki Zmienna (cid:258)rodowiskowa SHELL umo(cid:285)liwia uzyskanie informacji o bie(cid:285)(cid:200)cej pow(cid:239)oce: echo $SHELL Mo(cid:285)esz te(cid:285) u(cid:285)y(cid:202) zapisu: echo $0 Oto przyk(cid:239)ad: $ echo $SHELL /bin/bash Taki sam wynik uzyskamy za pomoc(cid:200) polecenia echo $0: $ echo $0 /bin/bash Sprawdzenie dotycz(cid:200)ce superu(cid:285)ytkownika UID to wa(cid:285)na zmienna (cid:258)rodowiskowa, która zawiera warto(cid:258)(cid:202) identyfikatora u(cid:285)ytkownika. Mo(cid:285)e pos(cid:239)u(cid:285)y(cid:202) do sprawdzenia, czy bie(cid:285)(cid:200)cy skrypt zosta(cid:239) uruchomiony przez u(cid:285)ytkownika root, czy przez zwyk(cid:239)ego u(cid:285)ytkownika. Oto przyk(cid:239)ad: 27 Poleć książkęKup książkę Skrypty pow(cid:225)oki systemu Linux. Receptury if [ $UID -ne 0 ]; then echo U(cid:285)ytkownik inny ni(cid:285) root. Uruchom jako u(cid:285)ytkownik root. else echo U(cid:285)ytkownik root fi Warto zauwa(cid:285)y(cid:202), (cid:285)e znak [ pe(cid:239)ni funkcj(cid:218) polecenia i nale(cid:285)y go oddzieli(cid:202) spacj(cid:200) od reszty napisu. Powy(cid:285)szy skrypt mo(cid:285)na te(cid:285) zapisa(cid:202) w nast(cid:218)puj(cid:200)cy sposób: if test $UID -ne 0:1 then echo U(cid:285)ytkownik inny ni(cid:285) root. Uruchom jako u(cid:285)ytkownik root. else echo U(cid:285)ytkownik root fi W przypadku u(cid:285)ytkownika root zmienna UID ma warto(cid:258)(cid:202) 0. Modyfikowanie (cid:239)a(cid:241)cucha wiersza polece(cid:241) programu Bash (nazwa_u(cid:285)ytkownika@nazwa_hosta:~$) Po otwarciu okna terminalu lub po uruchomieniu pow(cid:239)oki pojawi si(cid:218) (cid:239)a(cid:241)cuch wiersza polece(cid:241), taki jak nazwa_u(cid:285)ytkownika@nazwa_hosta: /home/$. Ró(cid:285)ne dystrybucje systemów GNU/Linux maj(cid:200) nieznacznie ró(cid:285)ni(cid:200)ce si(cid:218) wiersze polece(cid:241) i inne kolory. Mo(cid:285)liwe jest dostosowanie tek- stu wiersza polece(cid:241) za pomoc(cid:200) zmiennej (cid:258)rodowiskowej PS1. Domy(cid:258)lny tekst wiersza polece(cid:241) pow(cid:239)oki ustawia si(cid:218) za pomoc(cid:200) wiersza w pliku ~/.bashrc. (cid:81) W nast(cid:218)puj(cid:200)cy sposób mo(cid:285)esz wy(cid:258)wietli(cid:202) wiersz u(cid:285)ywany do ustawienia zmiennej PS1: $ cat ~/.bashrc | grep PS1 PS1= ${debian_chroot:+($debian_chroot)}\u@\h:\w\$ (cid:81) Aby ustawi(cid:202) niestandardowy (cid:239)a(cid:241)cuch wiersza polece(cid:241), wprowad(cid:283): slynux@localhost: ~$ PS1= PROMPT # Zmieniono (cid:225)a(cid:276)cuch wiersza polece(cid:276). PROMPT Wpisz tutaj polecenia (cid:81) U(cid:285)ywaj(cid:200)c specjalnych sekwencji o zmienionym znaczeniu (np. \e[1;31), mo(cid:285)esz zastosowa(cid:202) kolorowy tekst (przejd(cid:283) do podrozdzia(cid:239)u „Wy(cid:258)wietlanie w oknie terminalu”). S(cid:200) równie(cid:285) okre(cid:258)lone znaki specjalne, rozwijane do postaci parametrów systemowych. Na przy- k(cid:239)ad znaki \u, \h i \w s(cid:200) rozwijane odpowiednio do nazwy u(cid:285)ytkownika, nazwy hosta i bie(cid:285)(cid:200)cego katalogu roboczego. 28 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Poznanie mo(cid:298)liwo(cid:286)ci pow(cid:225)oki Funkcja do(cid:239)(cid:200)czaj(cid:200)ca warto(cid:258)(cid:202) na pocz(cid:200)tku zmiennych (cid:258)rodowiskowych Zmienne (cid:258)rodowiskowe zwykle zawieraj(cid:200) list(cid:218) (cid:258)cie(cid:285)ek, w których nale(cid:285)y szuka(cid:202) plików wyko- nywalnych, bibliotek i innych elementów. Przyk(cid:239)adem s(cid:200) zmienne $PATH i $LD_LIBRARY_PATH, których zawarto(cid:258)(cid:202) jest zwykle zbli(cid:285)ona do poni(cid:285)szej: PATH=/usr/bin;/bin LD_LIBRARY_PATH=/usr/lib;/lib Pow(cid:239)oka przed wykonaniem aplikacji (pliku binarnego lub skryptu) sprawdzi zawarto(cid:258)(cid:202) folderów /usr/bin, a nast(cid:218)pnie /bin. Podczas budowania i instalowania programu na podstawie kodu (cid:283)ród(cid:239)owego musimy zwykle doda(cid:202) niestandardowe (cid:258)cie(cid:285)ki dla nowych plików wykonywalnych i bibliotek. Mo(cid:285)emy na przyk(cid:239)ad zainstalowa(cid:202) aplikacj(cid:218) moja_aplikacja w folderze /opt/moja_aplikacja, natomiast pli- ki binarne zostan(cid:200) umieszczone w folderze /opt/moja_aplikacja/bin, a biblioteki — w folderze opt/moja_aplikacja/lib. Jak to zrobi(cid:202) W tym przyk(cid:239)adzie przyjrzymy si(cid:218), jak doda(cid:202) nowe (cid:258)cie(cid:285)ki na pocz(cid:200)tku zmiennej (cid:258)rodowi- skowej. Pierwszy przyk(cid:239)ad demonstruje wykorzystanie poznanych ju(cid:285) technik, natomiast dru- gi przyk(cid:239)ad pokazuje utworzenie funkcji, która upraszcza modyfikowanie zmiennej. Funkcje zostan(cid:200) omówione w dalszej cz(cid:218)(cid:258)ci tego rozdzia(cid:239)u. export PATH=/opt/moja_aplikacja/bin:$PATH export LD_LIBRARY_PATH=/opt/moja_aplikacja/lib;$LD_LIBRARY_PATH Zmienne PATH i LD_LIBRARY_PATH powinny teraz zawiera(cid:202) nast(cid:218)puj(cid:200)ce foldery: PATH=/opt/moja_aplikacja/bin:/usr/bin:/bin LD_LIBRARY_PATH=/opt/moja_aplikacja/lib:/usr/lib;/lib Dodawanie nowej (cid:258)cie(cid:285)ki mo(cid:285)emy sobie u(cid:239)atwi(cid:202), definiuj(cid:200)c funkcj(cid:218), która b(cid:218)dzie umieszcza(cid:202) nowe foldery na pocz(cid:200)tku zmiennej w pliku .bashr. prepend() { [ -d $2 ] eval $1=\ $2 : \$$1\ export $1; } Z powy(cid:285)szej funkcji mo(cid:285)na korzysta(cid:202) nast(cid:218)puj(cid:200)co: prepend PATH /opt/moja_aplikacja/bin prepend LD_LIBRARY_PATH /opt/moja_aplikacja/lib 29 Poleć książkęKup książkę Skrypty pow(cid:225)oki systemu Linux. Receptury Jak to dzia(cid:239)a Funkcja prepend() najpierw sprawdza, czy folder przekazany w drugim parametrze istnieje. Je(cid:258)li tak, wyra(cid:285)enie eval przypisze do zmiennej o nazwie podanej w pierwszym parametrze warto(cid:258)(cid:202) drugiego parametru, po której umie(cid:258)ci znak : (separator (cid:258)cie(cid:285)ki), a nast(cid:218)pnie oryginaln(cid:200) warto(cid:258)(cid:202) zmiennej. Je(cid:258)li zmienna, na pocz(cid:200)tku której chcemy doda(cid:202) warto(cid:258)(cid:202), jest pusta, na jej ko(cid:241)cu znajdzie si(cid:218) znak :. Aby to poprawi(cid:202), zmodyfikujmy funkcj(cid:218) w taki sposób: prepend() { [ -d $2 ] eval $1=\ $2\$\{$1:+ : \$$1\}\ export $1 ; } Skoro ju(cid:285) rozwa(cid:285)amy tego typu funkcje, mo(cid:285)emy wprowadzi(cid:202) rozwijanie parametrów pow(cid:239)oki w nast(cid:218)- puj(cid:200)cej postaci: ${parametr:+wyra(cid:285)enie} Powy(cid:285)szy zapis zostanie rozwini(cid:218)ty do wyra(cid:285)enia, je(cid:258)li jest podany parametr, który nie ma warto(cid:258)ci null. Po wprowadzeniu w definicji funkcji powy(cid:285)szej zmiany do(cid:239)(cid:200)czyli(cid:258)my znak : i oryginaln(cid:200) warto(cid:258)(cid:202) zmiennej, tylko wtedy gdy zmienna mia(cid:239)a ju(cid:285) warto(cid:258)(cid:202) w momencie wywo(cid:239)ania funkcji. Wykonywanie oblicze(cid:241) matematycznych za pomoc(cid:200) pow(cid:239)oki (cid:165)rodowisko pow(cid:239)oki Bash umo(cid:285)liwia wykonywanie podstawowych operacji arytmetycznych przy u(cid:285)yciu polecenia let oraz operatorów(( )) i []. W przypadku przeprowadzania zaawan- sowanych operacji pomocne s(cid:200) równie(cid:285) dwa programy narz(cid:218)dziowe: expr i bc. Jak to zrobi(cid:202) 1. Warto(cid:258)(cid:202) liczbowa mo(cid:285)e by(cid:202) skojarzona jako zwyk(cid:239)e przypisanie zmiennej przechowywane w postaci (cid:239)a(cid:241)cucha. Jednak(cid:285)e do przetwarzania tych (cid:239)a(cid:241)cuchów jako liczb s(cid:200) u(cid:285)ywane odpowiednie metody: #!/bin/bash no1=4; no2=5; 2. Polecenie let mo(cid:285)e pos(cid:239)u(cid:285)y(cid:202) do bezpo(cid:258)redniego wykonania podstawowych operacji. Podczas korzystania z tego polecenia u(cid:285)ywa si(cid:218) nazw zmiennych bez prefiksu $. Oto przyk(cid:239)ad: let result=no1+no2 echo $result 30 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Poznanie mo(cid:298)liwo(cid:286)ci pow(cid:225)oki Polecenie let mo(cid:285)na u(cid:285)ywa(cid:202) równie(cid:285) nast(cid:218)puj(cid:200)co: (cid:81) Operacja inkrementacji: $ let no1++ (cid:81) Operacja dekrementacji: $ let no1-- (cid:81) Zapisy skrócone: let no+=6 let no-=6 S(cid:200) to skróty polece(cid:241) odpowiednio let no=no+6 i let no=no-6. (cid:81) Inne metody. Operator [] mo(cid:285)e by(cid:202) u(cid:285)yty podobnie jak w przypadku polecenia let w nast(cid:218)puj(cid:200)cy sposób: result=$[ no1 + no2 ] Dozwolone jest u(cid:285)ycie prefiksu $ wewn(cid:200)trz operatora []. Oto przyk(cid:239)ad: result=$[ $no1 + 5 ] Mo(cid:285)liwe jest te(cid:285) zastosowanie operatora (( )). Nazwa zmiennej umieszczona przed prefiksem $ jest u(cid:285)ywana w przypadku skorzystania z operatora (( )). Oto przyk(cid:239)ad: result=$(( no1 + 50 )) Do wykonania podstawowych operacji mo(cid:285)e by(cid:202) te(cid:285) u(cid:285)yte polecenie expr. result=`expr 3 + 4` result=$(expr $no1 + 5) Wszystkie powy(cid:285)sze metody nie obs(cid:239)uguj(cid:200) liczb zmiennoprzecinkowych, a jedynie liczby ca(cid:239)kowite. 3. Precyzyjny kalkulator bc to zaawansowany program narz(cid:218)dziowy do oblicze(cid:241) matematycznych. Oferuje szeroki zestaw opcji. Umo(cid:285)liwia wykonywanie operacji zmiennoprzecinkowych i w nast(cid:218)puj(cid:200)cy sposób korzysta z funkcji zaawansowanych: echo 4 * 0.56 | bc 2.24 no=54; result=`echo $no * 1.5 | bc` echo $result 81.0 Poleceniu bc mog(cid:200) by(cid:202) przekazane dodatkowe parametry przy u(cid:285)yciu prefiksów operacji ze (cid:258)rednikami w roli separatorów. (cid:81) Okre(cid:258)lanie dok(cid:239)adno(cid:258)ci dziesi(cid:218)tnej: w nast(cid:218)puj(cid:200)cym przyk(cid:239)adzie parametr scale=2 okre(cid:258)la liczb(cid:218) miejsc dziesi(cid:218)tnych jako 2. A zatem dane wyj(cid:258)ciowe polecenia bc b(cid:218)d(cid:200) zawiera(cid:202) liczb(cid:218) z dwoma miejscami dziesi(cid:218)tnymi: echo scale=2;22/7 | bc 3.14 31 Poleć książkęKup książkę Skrypty pow(cid:225)oki systemu Linux. Receptury (cid:81) Konwersja podstawy za pomoc(cid:200) polecenia bc: mo(cid:285)liwa jest konwersja jednej podstawy systemu liczbowego na inn(cid:200). Skonwertujmy system dziesi(cid:218)tny na dwójkowy oraz dwójkowy na dziesi(cid:218)tny: #!/bin/bash # opis: konwersja systemu liczbowego no=100 echo obase=2;$no | bc 1100100 no=1100100 echo obase=10;ibase=2;$no | bc 100 (cid:81) Obliczanie kwadratów i pierwiastków kwadratowych mo(cid:285)e by(cid:202) przeprowadzone w nast(cid:218)puj(cid:200)cy sposób: echo sqrt(100) | bc #pierwiastek kwadratowy echo 10^10 | bc #kwadrat Eksperymentowanie z deskryptorami plików i przekierowywaniem Deskryptory plików s(cid:200) liczbami ca(cid:239)kowitymi powi(cid:200)zanymi z danymi wej(cid:258)ciowymi i wyj(cid:258)cio- wymi. Najpowszechniejsze deskryptory plików to: stdin, stdout i stderr. Mo(cid:285)liwe jest prze- kierowanie zawarto(cid:258)ci jednego strumienia do drugiego. W przedstawionej poni(cid:285)ej recepturze zaprezentowano przyk(cid:239)ady metod przetwarzania i przekierowywania za pomoc(cid:200) deskrypto- rów plików. Wprowadzenie Podczas pisania skryptów cz(cid:218)sto s(cid:200) u(cid:285)ywane: standardowe wej(cid:258)cie (stdin), standardowe wyj(cid:258)cie (stdout) i standardowy b(cid:239)(cid:200)d (stderr). Skrypt mo(cid:285)e przekierowa(cid:202) dane wyj(cid:258)ciowe do pliku za pomoc(cid:200) znaku wi(cid:218)kszo(cid:258)ci. Tekst zwrócony przez polecenie mo(cid:285)e by(cid:202) tekstem danych wyj- (cid:258)ciowych lub tekstem komunikatu o b(cid:239)(cid:218)dzie. Domy(cid:258)lnie wy(cid:258)wietlane s(cid:200) zarówno standardo- we wyj(cid:258)cie (stdout), jak i komunikaty b(cid:239)(cid:218)dów (stderr). Wspomniane dwa strumienie mo(cid:285)na wyodr(cid:218)bni(cid:202), korzystaj(cid:200)c z deskryptorów plików okre(cid:258)laj(cid:200)cych poszczególne strumienie. Deskryptory plików s(cid:200) liczbami ca(cid:239)kowitymi powi(cid:200)zanymi z otwartym plikiem lub strumie- niem danych. Deskryptory plików 0, 1 i 2 s(cid:200) zarezerwowane w nast(cid:218)puj(cid:200)cy sposób: (cid:81) 0 — stdin, (cid:81) 1 — stdout, (cid:81) 2 — stderr. 32 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Poznanie mo(cid:298)liwo(cid:286)ci pow(cid:225)oki Jak to zrobi(cid:202) 1. Tekst mo(cid:285)na do(cid:239)(cid:200)czy(cid:202) do pliku za pomoc(cid:200) znaku wi(cid:218)kszo(cid:258)ci: $ echo To jest przyk(cid:239)adowy tekst 1 temp.txt Polecenie zapisze wy(cid:258)wietlony tekst w pliku temp.txt. Je(cid:258)li ten plik ju(cid:285) istnieje, w ramach operacji przed zapisem zostanie usuni(cid:218)ta istniej(cid:200)ca zawarto(cid:258)(cid:202) pliku. 2. Skorzystaj z dwóch znaków wi(cid:218)kszo(cid:258)ci, aby do(cid:239)(cid:200)czy(cid:202) tekst do pliku: $ echo To jest przyk(cid:239)adowy tekst 2 temp.txt 3. Wy(cid:258)wietl zawarto(cid:258)(cid:202) pliku przy u(cid:285)yciu polecenia cat: $ cat temp.txt To jest przyk(cid:239)adowy tekst 1 To jest przyk(cid:239)adowy tekst 2 Wyja(cid:258)nijmy przeznaczenie standardowego b(cid:239)(cid:218)du, a tak(cid:285)e to, jak mo(cid:285)e on zosta(cid:202) przekierowany. Komunikaty stderr wy(cid:258)wietlaj(cid:200) si(cid:218), gdy polecenia zwracaj(cid:200) komunikat o b(cid:239)(cid:218)dzie. Rozwa(cid:285) na- st(cid:218)puj(cid:200)cy przyk(cid:239)ad: $ ls + ls: cannot access +: No such file or directory Znak + jest niepoprawnym argumentem, dlatego zosta(cid:239) zwrócony b(cid:239)(cid:200)d. Polecenia zako(cid:241)czone powodzeniem i niepowodzeniem Gdy polecenie zako(cid:241)czy dzia(cid:239)anie po wyst(cid:200)pieniu b(cid:239)(cid:218)du, zwróci status wyj(cid:258)cia ró(cid:285)ny od zera. Polecenie zwraca warto(cid:258)(cid:202) zero, gdy pomy(cid:258)lnie zako(cid:241)czy dzia(cid:239)anie. Zwrócony status mo(cid:285)e by(cid:202) odczytany ze spe- cjalnej zmiennej $? (w celu wy(cid:258)wietlenia statusu wyj(cid:258)cia uruchom polecenie echo $? bezpo(cid:258)rednio po ci(cid:200)gu wykonywanego polecenia). Nast(cid:218)puj(cid:200)ce polecenie wy(cid:258)wietla na ekranie tekst standardowego b(cid:239)(cid:218)du stderr, zamiast umieszcza(cid:202) go w pliku (a poniewa(cid:285) polecenie nie zwraca danych w strumieniu stdout, plik out.txt b(cid:218)dzie pusty): $ ls + out.txt ls: cannot access +: No such file or directory W poni(cid:285)szym poleceniu przekierowujemy stderr do pliku out.txt, korzystaj(cid:200)c z zapisu 2 (dwa wi(cid:218)ksze ni(cid:285)). $ ls + 2 out.txt # Dzia(cid:225)a. Mo(cid:285)na te(cid:285) przekierowa(cid:202) standardowy b(cid:239)(cid:200)d stderr do jednego pliku, a standardowe wyj(cid:258)cie stdout do drugiego pliku. $ cmd 2 stderr.txt 1 stdout.txt 33 Poleć książkęKup książkę Skrypty pow(cid:225)oki systemu Linux. Receptury Mo(cid:285)liwe jest równie(cid:285) przekierowanie standardowego b(cid:239)(cid:218)du stderr oraz standardowego wyj- (cid:258)cia stdout do jednego pliku przez przekszta(cid:239)cenie standardowego b(cid:239)(cid:218)du stderr w standar- dowe wyj(cid:258)cie stdout za pomoc(cid:200) nast(cid:218)puj(cid:200)cej (preferowanej) metody: $ cmd 2 1 allOutput.txt lub metody alternatywnej: $ cmd output.txt Je(cid:258)li w danych wy(cid:258)wietlonych w oknie terminalu nie powinno by(cid:202) szczegó(cid:239)ów dotycz(cid:200)cych standardowego b(cid:239)(cid:218)du stderr, musisz przekierowa(cid:202) dane wyj(cid:258)ciowe stderr do pliku /dev/null. W efekcie dane zostan(cid:200) ca(cid:239)kowicie usuni(cid:218)te. Dla przyk(cid:239)adu rozwa(cid:285)my trzy pliki: a1, a2 i a3. W przypadku pliku a1 dla u(cid:285)ytkownika nie ustawiono uprawnie(cid:241) odczytu, zapisu i wykony- wania. Gdy oka(cid:285)e si(cid:218) konieczne wy(cid:258)wietlenie zawarto(cid:258)ci plików o nazwie rozpoczynaj(cid:200)cej si(cid:218) od litery a, mo(cid:285)esz u(cid:285)y(cid:202) polecenia cat. Utwórz pliki testowe w nast(cid:218)puj(cid:200)cy sposób: $ echo A1 a1 $ echo A2 a2 $ echo A3 a3 $ chmod 000 a1 # Odebrano wszystkie uprawnienia. W przypadku wy(cid:258)wietlenia zawarto(cid:258)ci plików przy u(cid:285)yciu znaków wieloznacznych (a*) zosta- nie wygenerowany komunikat o b(cid:239)(cid:218)dzie dla pliku a1, poniewa(cid:285) nie ma on odpowiedniego uprawnienia odczytu. $ cat a* cat: a1: Permission denied A2 A3 W tym przypadku komunikat cat: a1: Permission denied stanowi dane standardowego b(cid:239)(cid:218)du stderr. Dane te mo(cid:285)esz przekierowa(cid:202) do pliku, natomiast standardowe wyj(cid:258)cie wy(cid:258)wietli si(cid:218) w oknie terminalu. Rozwa(cid:285) nast(cid:218)puj(cid:200)ce wiersze: $ cat a* 2 err.txt # Standardowe wyj(cid:286)cie stderr przekierowano do pliku err.txt. A2 A3 $ cat err.txt cat: a1: Permission denied Niektóre polecenia generuj(cid:200) dane wyj(cid:258)ciowe potrzebne do dalszej analizy lub takie, które chcemy zapisa(cid:202) na pó(cid:283)niej. Strumie(cid:241) standardowego wyj(cid:258)cia stdout mo(cid:285)na przekierowa(cid:202) do pliku lub przekaza(cid:202) za pomoc(cid:200) potoku do innego polecenia. Prawdopodobnie my(cid:258)lisz, (cid:285)e nie ma sposobu, aby jednocze(cid:258)nie mie(cid:202) ciastko i zje(cid:258)(cid:202) ciastko. Jest sprytny sposób na przekierowanie danych do pliku, a tak(cid:285)e utworzenie kopii tych danych w postaci standardowego wej(cid:258)cia stdin dla nast(cid:218)pnego zestawu polece(cid:241). Umo(cid:285)liwia to pole- cenie tee, które odczytuje strumie(cid:241) stdin i przekierowuje dane wej(cid:258)ciowe do strumienia stdout oraz do jednego lub kilku plików. polecenie | tee PLIK1 PLIK2 | innePolecenie 34 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Poznanie mo(cid:298)liwo(cid:286)ci pow(cid:225)oki W poni(cid:285)szym wierszu polecenia dane standardowego wej(cid:258)cia stdin s(cid:200) odbierane przez pole- cenie tee. Zapisuje ono kopi(cid:218) standardowego wyj(cid:258)cia stdout w pliku out.txt i wysy(cid:239)a kolejn(cid:200) kopi(cid:218) dla nast(cid:218)pnego polecenia jako standardowe wej(cid:258)cie stdin. Polecenie cat -n wstawia numer dla ka(cid:285)dego wiersza odebranego ze standardowego wej(cid:258)cia stdin i zapisuje wiersz w standardowym wyj(cid:258)ciu stdout. $ cat a* | tee out.txt | cat -n cat: a1: Permission denied 1 A2 2 A3 Sprawd(cid:283) zawarto(cid:258)(cid:202) pliku out.txt w nast(cid:218)puj(cid:200)cy sposób: $ cat out.txt A2 A3 Zauwa(cid:285), (cid:285)e wiersz cat: a1: Permission denied nie pojawia si(cid:218), poniewa(cid:285) zosta(cid:239) przekierowany do strumienia stderr. Polecenie tee mo(cid:285)e odczytywa(cid:202) wy(cid:239)(cid:200)cznie dane ze standardowego wej(cid:258)cia stdin. Cho(cid:202) domy(cid:258)lnie polecenie tee nadpisuje plik, mo(cid:285)e by(cid:202) u(cid:285)yte z do(cid:239)(cid:200)czon(cid:200) opcj(cid:200) -a. Oto przyk(cid:239)ad: $ cat a* | tee –a out.txt | cat –n Polecenia z argumentami s(cid:200) wy(cid:258)wietlane jako polecenie PLIK1 PLIK2 lub po prostu polece- nie PLIK. Aby przekaza(cid:202) dwie kopie danych wej(cid:258)ciowych do standardowego wyj(cid:258)cia stdout, zastosuj znak - jako argument nazwy pliku polecenia: $ polecenie1 | polecenie2 | polecenie - Oto przyk(cid:239)ad: $ echo kto to jest | tee - kto to jest kto to jest W celu zastosowania standardowego wej(cid:258)cia stdin mo(cid:285)esz równie(cid:285) skorzysta(cid:202) z /dev/stdin jako nazwy pliku danych wyj(cid:258)ciowych. W podobny sposób u(cid:285)yj plików /dev/stderr i /dev/stdout odpowiednio dla standardowego b(cid:239)(cid:218)- du i standardowego wyj(cid:258)cia. S(cid:200) to specjalne pliki urz(cid:200)dze(cid:241), które odpowiadaj(cid:200) deskryptorom stdin, stderr i stdout. 35 Poleć książkęKup książkę Skrypty pow(cid:225)oki systemu Linux. Receptury Jak to dzia(cid:239)a Operatory przekierowania ( i ) wysy(cid:239)aj(cid:200) dane wyj(cid:258)ciowe do pliku zamiast do terminalu. Operatory i ró(cid:285)ni(cid:200) si(cid:218). Cho(cid:202) oba przekierowuj(cid:200) tekst do pliku, pierwszy operator ( ) czy(cid:258)ci plik, a nast(cid:218)pnie dokonuje zapisu, natomiast drugi operator ( ) dodaje dane wyj(cid:258)ciowe na ko(cid:241)cu istniej(cid:200)cej zawarto(cid:258)ci pliku. Domy(cid:258)lnie przekierowanie dotyczy standardowego wyj(cid:258)cia. Aby zosta(cid:239) pobrany konkretny deskryptor pliku, musisz przed operatorem poda(cid:202) numer deskryptora. Operator jest równoznaczny ci(cid:200)gowi 1 . Podobnie jest w przypadku operatora (odpowied- nik ci(cid:200)gu 1 ). W przypadku wyst(cid:200)pienia b(cid:239)(cid:218)dów dane wyj(cid:258)ciowe standardowego b(cid:239)(cid:218)du stderr s(cid:200) zrzucane w pliku /dev/null. Plik ./dev/null jest specjalnym plikiem urz(cid:200)dzenia, którego wszystkie dane s(cid:200) usuwane. Urz(cid:200)dzenie to cz(cid:218)sto jest nazywane czarn(cid:200) dziur(cid:200), poniewa(cid:285) wszystkie trafiaj(cid:200)ce tam dane zostan(cid:200) utracone na zawsze. To nie wszystko Polecenie odczytuj(cid:200)ce standardowe wej(cid:258)cie stdin mo(cid:285)e odbiera(cid:202) dane na wiele sposobów. Ponadto mo(cid:285)liwe jest okre(cid:258)lenie w(cid:239)asnych deskryptorów plików przy u(cid:285)yciu polecenia cat i potoków. Oto przyk(cid:239)ad: $ cat plik | polecenie $ polecenie1 | polecenie2 Przekierowywanie z pliku do polecenia U(cid:285)ywaj(cid:200)c znaku mniejszo(cid:258)ci ( ), w nast(cid:218)puj(cid:200)cy sposób mo(cid:285)esz odczyta(cid:202) dane z pliku jako standardowe wej(cid:258)cie stdin: $ polecenie plik Przekierowywanie bloku tekstowego zawartego w skrypcie Mo(cid:285)emy przekierowa(cid:202) tekst ze skryptu do pliku. Aby umie(cid:258)ci(cid:202) komunikat w nag(cid:239)ówku auto- matycznie generowanego pliku, mo(cid:285)na wykona(cid:202) nast(cid:218)puj(cid:200)c(cid:200) operacj(cid:218): #!/bin/bash cat EOF log.txt To jest wygenerowany plik, którego nie nale(cid:285)y edytowa(cid:202). Zmiany zostan(cid:200) nadpisane. EOF Wiersze znajduj(cid:200)ce si(cid:218) mi(cid:218)dzy wierszami cat EOF log.txt i EOF zostan(cid:200) wy(cid:258)wietlone jako dane standardowego wej(cid:258)cia stdin. Wy(cid:258)wietl zawarto(cid:258)(cid:202) pliku log.txt w nast(cid:218)puj(cid:200)cy sposób: $ cat log.txt To jest wygenerowany plik, którego nie nale(cid:285)y edytowa(cid:202). Zmiany zostan(cid:200) nadpisane. 36 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Poznanie mo(cid:298)liwo(cid:286)ci pow(cid:225)oki Niestandardowe deskryptory plików Deskryptor pliku to abstrakcyjny wska(cid:283)nik dotycz(cid:200)cy operacji dost(cid:218)pu do pliku. Ka(cid:285)da taka operacja jest powi(cid:200)zana ze specjaln(cid:200) liczb(cid:200), nazywan(cid:200) deskryptorem pliku. Liczby 0, 1 i 2 s(cid:200) zarezerwowanymi liczbami deskryptorów stdin, stdout i stderr. Za pomoc(cid:200) polecenia exec mo(cid:285)esz utworzy(cid:202) w(cid:239)asne, niestandardowe deskryptory plików. Je(cid:258)li jeste(cid:258) ju(cid:285) zaznajomiony z obs(cid:239)ug(cid:200) plików w dowolnym innym j(cid:218)zyku programowania, by(cid:202) mo(cid:285)e zauwa(cid:285)y(cid:239)e(cid:258) tryby otwierania plików. Zwykle s(cid:200) u(cid:285)ywane nast(cid:218)puj(cid:200)ce trzy tryby: (cid:81) (cid:81) (cid:81) tryb odczytu, tryb zapisu z do(cid:239)(cid:200)czaniem, tryb zapisu z usuwaniem. Znak jest operatorem u(cid:285)ywanym do odczytu z pliku do standardowego wej(cid:258)cia stdin. Z kolei znak to operator s(cid:239)u(cid:285)(cid:200)cy do zapisu w pli
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Skrypty powłoki systemu Linux. Receptury. Wydanie III
Autor:
, ,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: