Uruchamiając terminal, rozpoczynamy pracę w konkretnym katalogu. Zazwyczaj jest to katalog główny danego użytkownika. W trakcie pracy możemy wielokrotnie zmieniać katalog, w którym chcemy pracować. Katalog, "w którym aktualnie jesteśmy", nazywamy katalogiem bieżącym. Do sprawdzenia, co jest w danym momencie, używamy komendy pwd.Katalog bieżący zmieniamy, stosując polecenie cd:cd nazwa_katalogu_docelowegoOkreślając nazwę katalogu docelowego, możemy stosować ścieżkę bezwzględną lub względną. Ścieżka bezwzględna wskazuje dokładną lokalizację pliku lub katalogu. Ścieżka ta rozpoczyna się od katalogu głównego "/". Przykład wykorzystania ścieżki bezwzględnej:cd /home/FS2007/Scieżka względna określa położenie docelowego katalogu lub pliku względem katalogu bieżącego. Przykłady użycia ścieżki względnej:cd ../FS2007/tmp/ (przechodzimy do katalogu tmp, który znajduje się w katalogu FS2007, który z kolei znajduje się w katalogu nadrzędnym w stosunku do katalogu bieżącego.)cd ./abc/cde/lubcd abc/cde/ (przechodzimy do katalogu cde, który jest podkatalogiem katalogu abc, który z kolei jest podkatalogiem katalogu bieżącego)Do wyświetlania informacji o plikach i katalogach znajdujących się w katalogu bieżącym (lub w innych katalogach) służy polecenielsJego ważna opcja to -lls -lPo wykonaniu powyższej komendy na ekranie zobaczymy szczegółowe dane o zasobach zamieszczonych w danym katalogu. Pierwszy znak pierwszej kolumny określa, czy dany element jest plikiem (-) lub katalogiem (d). Pozostałe znaki pierwszej kolumny zawierają informacje o atrybutach, czyli prawach dostępu. Prawa dostępu mówią o tym, co właściciel danego elementu (znaki 2-4), inni użytkownicy należący do tej samej grupy użytkowników co właściciel (znaki 5-7), oraz wszyscy pozostali użytkownicy (znaki 8-10), mogą zrobić z danym elementem. W danej trójce znaków pierwszy oznacza prawo do odczytu (r) lub jego brak (-), drugi znak oznacza prawo do zapisu, czyli do zmieniania danego elementu (w) lub jego brak, trzeci znak oznacza prawo "do wykonywania", czyli np. uruchamiania pliku będącego programem, (x), lub jego brak (-). Właściciel może zmieniać atrybuty komendą chmod.Niekiedy interesują nas tylko niektóre spośród plików z danego katalogu. Na przykład, chcemy wyświetlić listę tych plików, których nazwy rozpoczynają się literą a:ls a* - gwiazdka reprezentuje dowolny ciąg znaków (również ciąg pusty - o zerowej długości).Inny przykład - interesują nas tylko pliki z rozszerzeniem txt:ls *.txtChcemy wyświetlić listę plików, których drugim znakiem w nazwie jest litera a, b lub c:ls ?[abc]* - znak zapytania reprezentuje jeden dowolny znak (w naszym przykładzie pierwszy znak nazwy może być jakikolwiek), nawias [ ] zawiera listę znaków, spośród których jeden ma się pojawić na drugim miejscu w nazwie. Ponieważ są to znaki, które występują kolejno w alfabecie, można było w nawiasie podać przedział interesujących nas znaków:ls ?[a-c]*Chcemy wyświetlić listę plikówz rozszerzeniem txt, których nazwy rozpoczynają się cyfrą od 1 do 5, lub 7 lub 9:ls [1-579]*.txtKopiowanie i przenoszenie plikówcp plik_zrodlowy plik_docelowy - kopiowaniemv plik_zrodlowy plik_docelowy - przenoszenie, ewentualnie zmiana nazwy - jeśli plik źródłowy i docelowy są w tym samym katalogu.Podając nazwy plików źródłowych i docelowych, korzysta się ze ścieżek bezwzględnych lub względnych.Przekierowanie wyjściaStandardowym wyjściem wielu komend jest ekran, np. po wpisaniu komendy ls listę plików zobaczymy właśnie na ekranie. Informacje "wychodzące" możemy przekierować np. do pliku albo do systemowego kosza. Robimy to stosując symbol przekierowania >ls > plikInformacje zostaną zapisane w pliku o nazwie plik. Jeśli taki plik już istniał, "stara" zawartość zostanie skasowana.ls -l >> plikJeśli plik już istniał, "stara" zawartość nie zostanie skasowana, a nowe dane zostaną dopisane na końcu pliku.Domyślnie przekazywane są informacje z kanału danych. Jest jeszcze kanał informacji o błędachls -l plik.txt 1> dane 2> bledyls -l plik.txt - generuje linię ze szczegółowymi informacjami na temat pliku plik.txt. Informacje te (kanał danych - nr 1) zostaną zapisane w pliku o nazwie dane. Ewentualne informacje o błędach, które miały miejsce w trakcie wykonania instrukcji ls -l plik.txt (przykładowo - plik.txt może nie istnieć), a zatem informacje z kanału błędów (nr 2), zostaną zapisane w pliku bledy.Polecenie catsłuży między innymi do wypisania zawartości pliku do standardowego wyjścia.cat plik.txt - plik zostanie wyświetlony na ekraniecat plik.txt >> plik1.txt - zawartość pliku plik.txt zostanie dopisana do pliku plik1.txt.Polecenie grepsłuży między innymi do wyszukania w danych pochodzących np. z wyświetlenia pliku lub z polecenia ls linii, zawierających (lub nie) pewnien wzorzecgrep "informatyka" plik.txt - wypisze tylko te linie z pliku plik.txt, które zawierają słowo informatykagrep -v "informatyka" plik.txt - wypisze tylko te linie z pliku plik.txt, które nie zawierają słowa informatykagrep ^d plik.txt - wypisze tylko te linie z pliku plik.txt, które zaczynają się znakiem dgrep d$ plik.txt - wypisze tylko te linie z pliku plik.txt, które kończą się znakiem dPotoki"wyjście" z jednego polecenia, może byc od razu użyte jako "wejście" do kolejnego polecenials -l | grep ^d - spośród linii generowanych przez polecenie ls -l, wybrane zostają tylko te, które rozpoczynają się znakiem dcat plik.txt | grep "informatyk" - por. informacje o poleceniach cat i grepaliasyMożemy stworzyć własne polecenia, które będą na przykład skrótami poleceń lub ciągów poleceń.alias ls1="ls -ltr"zdefiniowaliśmy nową instrukcję, której efekty są takie same jak ls -ltr. W aliasach można stosować potoki:alias ins1="ls -l | grep ^d"aliasy działają do momentu wylogowania się, lub do momentu anulowania instrukcją unaliasunalias ins1Polecenie wcPodaje informację na temat wielkości na przykład pliku.wc -l plik.txtwynikiem będzie liczba wierszy zawartych w pliku plik.txtls -l | grep ^d | wc -lwynikiem będzie liczba wierszy generowanych poleceniem ls -l | grep ^dPolecenie cutZałóżmy, że mamy plik 1.txt z zawartościąabxcbyZawartość tę można rozumieć jako dwa wiersze z dwiema kolumnami, rozdzielonymi literą b. cat 1.txt | cut -db -f1Na ekranie wyświetli się tylko pierwsza kolumna. -db oznacza, że jako separator wybrany jest znak b, -f1 oznacza, że chcemy wyświetlić tylko kolumnę nr 1. Plik wejściowy pozostanie nie zmieniony.Plik 2.txt ma zawartość qwe rty uio p[]ad fh jl ;'cat 2.txt | cut "-d " -f3-4Jako separator wybraliśmy spację, chcemy zobaczyć kolumny od 3 do 4. Wynikiem będzieuio p[]jl ;'Wynik możemy przekierować do nowego pliku:cat 2.txt | cut "-d " -f3-4 > 2_new.txtPolecenie trZałóżmy, że mamy plik zam.txt z zawartościąabc def xyz def ijk mnocat zam.txt | tr e qNa ekranie zamiast e pojawi się q.cat zam.txt | tr e " "Na ekranie zamiast e pojawi się spacja.cat zam.txt | tr def cvbNa ekranie zamiast def pojawi się cvb.cat zam.txt | tr [def] tKażda z liter d, e, bądź f zmieni się w t.cat plik | tr . ,Przydatne np. w plikach z liczbami, aby zmienić separator części dziesiętnej z kropki na przecinek.cat zam.txt | tr def cvb > zam1.txtZapisanie wyniku nie na ekranie, a w nowym pliku.Instrukcja for - tworzenie pętlifor {zmienna sterująca} in {lista} ; do {instrukcja}; donePrzykładfor i in a b; do echo x; donedwa razy wypisany zostanie "x" - dla każdej z dwóch wartości (a i b) zmiennej sterującej i.for i in a b; do echo $i; donewypisanie wartości zmiennej sterującej w kolejnych krokach (znak $ oznacza, że chodzi o wartość)for i in 1 10; do echo $i; donedziała podobnie, jak powyżejfor i in `seq 1 10`; do echo $i; done` ` - w tych apostrofach umieszczamy instrukcje, służące wygenerowaniu złożonej listy wartości zmiennej sterującej. Polecenie seq 1 10 oznacza generowanie kolejnych wartości od 1 do 10.wyn=0; for i in `seq 1 10`; do wyn=$((${wyn}+${i})); done ; echo $wynStworzyliśmy zmienną wyn i nadaliśmy jej wartość 0. W każdym kroku pętli wartość wyn zmieniamy w tej sposób, że do aktualnej warości wyn dodajemy aktualną wartość zmiennej sterującej i. Na końcu wyświetlamy ostateczną wartość wyn, która w tym przypadku jest sumą liczb od 1 do 10. Podwójne nawiasy (( )) zawierają wyrażenie arytmetyczne. wyn=$(( )) oznacza, że wyn przyjmuje wartość wyrażenia zawartego w nawiasach. Zamiast (( )) można użyć [ ]wyn=0; for i in `seq 1 10`; do wyn=$[${wyn}+${i}]; done ; echo $wynPoniżej nieco inne użycie tej instrukcji (bez określenia, że chodzi o wartość wyrażenia arytmetycznego)wyn=0; for i in `seq 1 10`; do wyn=${wyn}+${i}; done ; echo $wynLista może być wynikiem jeszcze innych instrukcji, np.for i in `ls | grep ^a` ; do cp ${i} ${i}_back ; doneWszystkie pliki rozpoczynające się literą a zostaną skopiowane, kopie będą miały nazwy takie jak oryginały, ale dostawiona zostanie końcówka _back.W trakcie pracy system wykorzystuje tzw. zmienne środowiskowe. Wartości tych zmiennych wpływają na sposób działania wykorzystywanych programów czy poleceń. W celu wyświetlenia wszystkich używanych zmiennych środowiskowych (i ich wartości), stosujemy polecenieenvNa przykład zmienna USER przechowuje nazwę użytkownika. Wartość zmiennej sprawdzamy następującoecho $USEROprócz zmiennych środowiskowych istnieją zmienne powłokowe. Własne zmienne tworzymy następującozmienna=wartoscJeżeli dodatkowo użyjemy polecenia export, utworzymy zmienną w sposób bardziej ogólny z punktu widzenia działania powłoki (np. nowa zmienna będzie "widziana" przy użyciu polecenia env)export zmienna2=wartosc2lub dwuetapowozmienna2=wartosc2export zmienna2zmiana wartości zmiennejzm1=12zm2=13zm1=zm1+zm2 - zm1 będzie miała wartość nie 25 a będzie to tekst "zm1+zm2"zm1=$zm1+zm2 - do wartości zm1 zostanie dodany, czy raczej dostawiony, ciąg znaków "zm2". Jeżeli w systemie istniałaby zmienna o nazwie zm1+zm2, pojawiłaby się niejednoznaczność, jak interpretować topolecenie. Aby uniknąć niejednoznaczności, można zastosować nawias {}:zm1=${zm1}+zm2 - teraz na pewno do wartości zm1 zostanie dodany (dostawiony) ciąg znaków "zm2".Uwaga: przy ćwiczeniu powyższych poleceń warto po każdym z nich sprawdzić aktualną wartość zmiennej zm1 (echo $zm1).Zmienna ? jest przykład tzw. zmiennej specjalnej. Przechowuje ona tzw. kod powrotu ostatniego wykonywanego polecenia; wynosi on 0 - jeśli się polecenie się powiodło, lub inną wartość jeśli nie.Stwórzmy w katalogu bieżącym plik abc.txt. Następnie użyjmy polecenia ls -l abc.txt - polecenie to się powiedzie, bo plik istnieje, a zatem sprawdzając wartość zmiennej ?echo $?otrzymamy 0.Z kolei, jeśli w katalogu bieżącym nie ma pliku abc111.txt, po użyciu poleceńls -l abc111.txtecho $?otrzymamy 1.Instrukcja testSłuży do sprawdzania warunków logicznych. Składnia:test warunekJeśli wynikiem sprawdzenia jest prawda, kod powrotu będzie równy 0. W przeciwnym przypadku - kod powrotu będzie równy 1. Przykładtest 2 -eq 3 - sprawdzamy czy 2 jest równe 3. Oczywiście, po użyciu polecenia echo $? otrzymamy 1 (bo 2 nie jest równe 3). Inne przykłady użycia polecenia test:test -f abc - sprawdza, czy istnieje w katalogu bieżącym plik abc.test -d abc - sprawdza, czy plik abc jest katalogiem.test -r abc - sprawdza, czy użytkownik ma prawo do odczytu pliku abc.test -w abc - sprawdza, czy użytkownik ma prawo do zapisu pliku abc.test -x abc - sprawdza, czy użytkownik ma prawo do wykonania pliku (programu) abc.test $a -eq 101 - sprawdza, czy wartość zmiennej a jest równa 101.test $a -ne 101 - sprawdza, czy wartość zmiennej a jest różna od 101.test $a -gt 101 - sprawdza, czy wartość zmiennej a jest większa od 101.test $a -ge 101 - sprawdza, czy wartość zmiennej a jest większa od lub równa 101.test $a -lt 101 - sprawdza, czy wartość zmiennej a jest mniejsza od 101.test $a -le 101 - sprawdza, czy wartość zmiennej a jest mniejsza od lub równa 101.Uwaga - tworzenie bardziej złożonych warunków! - oznacza negację-a - oznacza koniunkcję-o - oznacza alternatywętest 2 -eq 2 -a $a -eq 111 - sprawdza, czy jednocześnie prawdziwe są dwa warunki: 2 jest równe 2, wartość a wynosi 111.test 2 -eq 7 -o $a -eq 1 - sprawdza, czy prawdziwy jest przy najmniej jeden z warunków: 2 jest równe 7, wartość a wynosi 1.test ! -f abc - sprawdza, czy nie istnieje w katalogu bieżącym plik abc; ! -f abc jest zaprzeczeniem warunku -f abcTaki sam efekt jak w powyższych przykładach można uzyskać bez pisania polecenia test, ale wówczas warunek logiczny musi być zawarty w nawiasie [ ]:[ -f abc ][ 2 -eq 7 -o $a -eq 1 ]itd.Instrukcje warunkowe&&ins1 && ins2 - jeżeli po wykonaniu pierwszej instrukcji kod powrotu wynosi 0, wykona się druga instrukcja.ls abc && rm abc - jeśli plik abc istnieje, zostanie skasowany.||ins1 || ins2 - jeśli pierwsza instrukcja wykona się prawidłowo, druga już się nie wykona. Jeśli natomiast po wykonaniu pierwszej instrukcji kod powrotu będzie różny od 0, wykona się druga instrukcja.ls abcd || touch abcde - jeśli plik abcd istnieje, druga instrukcja się nie wykona, jeżeli natomiast plik nie istnieje, stworzony zostanie plik abcde.ifif instr1; then instr2; fiinstr1 - powinna polegać na sprawdzaniu jakiegoś warunku logicznego.if test ! -f c1.txt ; then touch c1.txt ; fi - jeśli nie istnieje plik c1.txt, to zostanie stworzony. Inny sposób na ten sam efekt: if [ ! -f c1.txt ] ; then touch c1.txt ; fi Jeszcze inny sposób: ls c1.txt || touch c1.txt if test -f c2.txt ; then mv c2.txt c21.txt ; fi - jeśli istnieje plik c2.txt, to jego nazwa zmieni się na c21.txt. Inny sposób: if [ -f c2.txt ] ; then mv c2.txt c21.txt ; fi...
respey