poznania:
W i-więxle przechowuje się numery bloków tworzących pliki
cat <nazwa pliku> <=odczyt zawartości pliku
cp <skąd i co> <dokąd (ew. nowa nazwa)> <=kopiowanie
rm <zasób> - usunięcie pliku
mv<skąd i co > <dokąd (ew. nowa nazwa) > - przenoszenie
mv można użyć w kontekście nowej nazwy. np:
mv<stara nazwa> <nowa nazwa>
chmod - zmiana prawa dostępu
przykład użycia
chmod <prawa> <zasób>
np.
ls -l koper Ten nasz koper - to przykładowy plik
rw- r-- r-- … koper
chcemy zmienić dostęp dla właściciela - + wykonanie , grupa - + zapis, reszta -+ zabrać r, dodać x.
terminal podświetla pliki na zielono którą mają opcje x.
Drugi wariant , że można pisać to za pomocą 777
1 1 1 1 1 1 1 1 1
r w x r w x r w x
1-jest prawo
0-brak
rw- r-- r--
110 100 100
chcemy r w x r w - - w -
7 6 2
chmod 762 koper
W kontekście terminala tekstowego istnieją konstrukcje - strumienie : We , Wy , i Wy błędów.(taśmociągi)
Strumienie są dołączane do urządzeń, domyslnie
WE - klawiatura
WY -monitor
WY błędów - monitor
Czy można przekierowywać strumienie ?
WE - np zapis “<koper” - wejściem jest zawartośc plku “koper”
WY - np zapis “>plik2” - wyjściem jest plik o nazwie plik2
WY błędów - np zapis “2>plik3” - wyjściem błędów jest plik “plik3”
ls -i <= pokazuje nazwy zasobów i i-więzły im przyporządkowane
“Wszystko jest plikiem” - to strumienie też są plikami - mają przypisane i - węzły:
WE - nr 0
WY - nr 1
WY błędów - nr 2 paczaj zapis “2>plik3”
Symbol “>>” oznacza dopisać do końca istniejącego pliku. w przekierowaniu
find – Polecenie find przeszukuje drzewo katalogów w poszukiwaniu plików lub katalogów o podanej nazwie lub jej części, lub o podanych kryteriach takich jak: rozmiar, typ, właściciel plików, data utworzenia lub data ostatniej modyfikacji.Składnia tego polecenia jest następująca: find katalogi_startowe kryterium wyszukiwania i operacje, które należy wykonać na wyszukanych elementach.
find katalog kryterium akcja
1.Znajdowanie po nazwie:
find -name nazwa_pliku - wyszukuje z bieżącego katalogu pliki od podanej nazwie w tym przypadku o nazwie nazwa_pliku wy
find -iname ‘*literki*’ - wyszukuje z bieżącego katalogu pliki które zawierają w nazwie ciąg znaków literki i wyświetla
można dodać na końcu polecenia -print wymusza wypisanie ścieżki pliku. ( bezwzględnej)
np. find -name nazwa_pliku -print
2.Znajdowanie po prawach dostępu (wartość ósemkowa)
find -perm <wartość ósemkowo> -print - wyświetla pliki o prawach dostępu ósmekowo zgadzających się z wartością ósemkową wpisaną po komendzie -perm
3.Znajdowanie po typie pliku
find -type <jeden z typów> - znajduje pliki podanego typu:
typy plików:
b-blokowy (buforowany) plik specjalny
c-znakowy (niebuforowany) plik specjalny
d-katalog
p-łącze nazwane (FIFO)
f-zwykły plik
l-dowiązanie symboliczne
s-gniazda
4. Znajdowanie plików poprzez podaie ich rozmiaru
find -size <liczba><jednostka> - podaje pliki o podanym rozmiarze można też użyć
find -size -100k -poda mniejsze niż 100k find -size +100k -znajdzie pliki zajmujące więcej niż 100k
find -empty - pokaże pliki które są puste można łączyć wyrażenia typu rozmiar i rodzaj pliku
np find -empty -type d -pokaże pliki które są puste i są typu d -czyli katalog
5.Znajdowanie plików poprzez przynależność do użytkownika
find -nouser -pokazuje mi pliki nienależące do nikogo
find -user <nazwa użytkownika> - pokazuje pliki należąće do konkretengo użytkownika
find -uid <id użytkownika > - również pokazuje pliki nalężace do konkretnego użytkownika
można dodać jeszcze, że można wyszukiwać w różny sposób np dopisać słówko
-not lub ! które oznacza negacje
np find -not user <nazwa użytkownika> wyszuka pliki nienależące do podanego użytkownika
zamiast not można użyć !.
można łączyć także poprzenie kryteria z wielkośćią pliku czy typem itp
np find -user Admin -not -size +100k type d … i tak dalej xD
można szukać czy należy do jednego lub drugiego używa się wtedy albo -o albo | takiej pionowej kreseczki
6. Poprzez przynależnośc do grupy:
find -group <nazwa grupy>
7. Znajdowanie plików na podstawie wieku, modyfikacji
find -<jedno z poniższych>
mtime n – prawda, jeżeli plik był modyfikowany przed n czasu
atime n – prawda, jeżeli plik był używany przed n dniami
ctime n – prawda, jeżeli węzeł pliku (jego status) był zmieniany przed n dniami
newer plik – prawda, jeżeli badany plik był modyfikowany później niż plik
amin -te trzy poniższe operują na minutach zamiast na dniach
cmin
mmin
grep - to powszechnie wykorzystywany program do wyszukiwania w strumieniu wejścia ciągów tekstowych, pasujących do podanego wyrażenia regularnego. Występuje on w każdym systemie uniksowym a jego autorem jest Ken Thompson.
grep ma kilka przydatnych parametrów: grep kryteria ciąg_znaków nazwa pliku
-c – zamiast wyświetlać linie ze znalezionym fragmentem wyświetla liczbę znalezionych linii;
-L – nie wyświetla znalezionego fragmentu tylko pokazuje nazwy plików, w których nie było tego ciągu znaków;
-l – odwrotnie do poprzedniego polecenia, wyświetla pliki w których znalazło dany ciąg znaków;
-n – wyświetlany jest numer linii w pliku w których znaleziono dany ciąg znaków;
-w – wyszukuje tylko całe słowa;
-x – wyszukuje tylko całe linie;
-v – negacja zapytania
-f plik – dane do wyszukania są brane po jednym wierszu z ‘plik’;
-h – po podaniu kilku plików do przeszukania po znalezieniu danego ciągu znaków przy danej linii nie będzie podany plik, w którym się to znajdowało;
-i – ignoruje wielkość liter, tzn. jeżeli podamy do wyszukania słowo ‘ala’, to pokaże nam ‘ALA’, ‘Ala’, ‘AlA’ itd.;
-r – gdy plik podany do przeszukania jest katalogiem, to zostaną przeszukane wszystkie pliki w tym katalogu
Wyrażenia regularne są wzorcami opisującymi, zastępującymi łańcuchy tekstów, zostały one wprowadzone od samego początku istnienia Uniksa przez jednego z jego twórców — Kena Thompsona. Wyrażenia regularne są bardzo efektywnym sposobem pracy z tekstem i zdecydowanie warto je opanować.Nazwa „grep” jest angielskim akronimem od słów global regular expression print[4].
Symbol | Zastępuje |
---|---|
. | dowolny znak |
^ | dopasuj występujące po operatorze wyrażenie do wyrażenie do początku wiersza |
$ | dopasuj poprzedzające wyrażenie do końca wiersza |
\x | znaki specjalne, gdzie x to znak specjalny np \$ zastąpi znak dolara |
[lista] | zastępuje dowolny znak spośród tych wymienionych na liście, mogą to być przedziały np. [0-9] lub [a-d] |
() | grupowanie wyrażeń regularnych |
? | dokładnie jeden element wcześniejszy |
a|b | dopasuje wyrażenie a lub wyrażenie b |
* | dopasuj zero lub więcej wyrażeń znaku poprzedzający operator |
+ | jeden lub więcej elementów poprzedzających operator |
Jak podaje Wikipedia, zmienne środowiskowe to zbiór dynamicznych wartości, wpływających na sposób w jaki działać będą uruchomione procesy (programy). Zmienne systemowe występują w każdym systemie operacyjnym Unix, Unix-like oraz M3S DOS i Windows. Oczywiście różne systemy korzystać będą z różnych zbiorów zmiennych, jednak najczęściej większość zmiennych będzie wspólna.
Początkujący użytkownicy bardzo często boją się korzystać ze zmiennych systemowych w obawie przed uszkodzeniem systemu, traktując je jako rzecz nie do ogarnięcia. Oczywiście jest to podejście jak najbardziej błędne. Bash pozwala również na tworzenie tzw. zmiennych powłoki, które działają na zasadzie identycznej jak zmienne środowiskowe przy czym ich zasięg dotyczy tylko powłoki, w której zostały utworzone.
Przykładowe zmienne środowiskowe:
PATH- Zmienna zawiera oddzieloną dwukropkami listę katalogów w której, powłoka będzie szukać programu którego nazwę do wykonania wprowadził użytkownik, jeżeli taki program nie zostanie znaleziony, powłoka wyświetli komunikat „polecenie nie odnalezione”
EDITOR- Domyślny edytor tekstu, zmienna wykorzystywana przez niektóre programy np. przez klienta poczty mutt. W jego przypadku emaile edytowane są w programie określonym przez tę zmienną
SHELL-Powłoka wykorzystywana przez użytkownika
USER-nazwa użytkownika
SHLVL- liczba uruchomionych powłok
TERM - domyślnie uruchamiany emulator terminala
HOME - domyśłna ścieżka katalogu domowego użytkownika
UID - unikalny identyfikator użytkownika
$Lang oraz $LC_ALL -zmienne przechowujące ustawienia językowe
Wyświetlanie wartości zmiennej
echo $nazwa_zmiennej
Tworzenie nowej zmiennej
Nazwa_zmiennej = wartość
Utworzona powyżej zmienna powłoki ma pewną nieprzyjemną cechę, mianowicie dostępna będzie jedynie w powłoce, w której została utworzona, a programy uruchomione z tej powłoki, nie będą miały do niej dostępu. Aby obejść to ograniczenie, należy wyeksportować zmienną za pomocą polecenia export.
ZMIENNA=wartość
ZMIENNA2=wartość2
export $ZMIENNA2
export ZMIENNA2
bash #uruchamiam nową powłokę
echo $ZMIENNA1 $ZMIENNA2
wartość2
usuwanie zmiennych
unset ZMIENNA
#!bin/bash
ZMIENNA=”Ala ma kota”
if [ -n $ZMIENNA ]; then
case $ZMIENNA in
1) zadanie numer 1;;
2) zadanie numer 2;;
*) zadanie w każdym innym przypadku;;
esac
6. Instrukcja warunkowa IF.
W instrukcji warunkowej if wyróżnia się trzy zasadnicze składnie tego polecenia:
a) w przypadku, gdy zachodzi potrzeba sprawdzenia jakiegoś warunku np. czy dwie
liczby są równe składnia wygląda następująco:
if warunek; then
wyrażenie1;
wyrażenie2;
fi
b) w przypadku gdy należy wykonać inny zestaw poleceń, jeżeli zadany warunek kończy
się wynikiem negatywnym, składnia polecenia wygląda następująco:
if warunek; then
wyrażenie1;
else
wyrażenie2;
fi
c) w przypadku gdy należy sprawdzić inny warunek jeżeli wcześniejszy warunek nie
został spełniony, składnia polecenia if wygląda następująco (ilość wyrażeń elif jest
dowolna):
if warunek1; then
wyrażenie;
elif warunek2; then
wyrażenie2;
fi
Instrukcja warunkowa if działa w taki sposób, że polecenia wewnątrz bloku if/fi, if/elif, a
następnie elif/fi jeśli zadany warunek jest prawdziwy.
7. Zapis warunków w instrukcji warunkowej IF.
Do testowania warunków używa się operatorów, które w wyniku swojego działania zwracają
prawdę lub fałsz w zależności od tego czy sprawdzany warunek jest prawdziwy czy
nieprawdziwy. Zazwyczaj warunek jest zapisywany w następującej postaci:
[ operand1 operator operand2 ]
W niektórych przypadkach warunki zapisuje się tylko przy pomocy jednego operandu
(drugiego - operand2). Bardzo istotny jest fakt, że pomiędzy nawiasami, operandami
operandami operatorem musi istnieć odstęp w postaci spacji. Jeżeli tego odstępu nie ma to
wtedy wszystko to co jest napisane między nawiasami kwadratowymi jest traktowane jako
jeden operand bez jakichkolwiek operatorów.
[$X=$Y] /# błędny zapis !!!
[ $X = $Y ] # zapis prawidłowy
Ponadto bardzo istotne jest także używanie znaków cudzysłowu we wszystkich warunkach w
których operator przyjmuje postać –n (na początku kursu zostało wyjaśnione dlaczego).
8. Operatory instrukcji warunkowej IF.
Najczęściej używanymi operatorami w instrukcji warunkowej if są:
-n – operand ma niezerową długość (jeden operand)
-z – operand ma zerową długość (jeden operand)
-d – istnieje katalog o nazwie operand (jeden operand)
-f – sprawdza czy operand jest plikiem (jeden operand)
-e – sprawdza czy zbiór (plik, katalog) o nazwie operand (jeden operand) istnieje
-L – sprawdzenie czy plik o nazwie operand jest dowiązaniem symbolicznym (jeden operand)
-eq – sprawdza czy operandy są równymi liczbami (dwa operandy)
-neq – sprawdza czy operandy są różnymi liczbami (dwa operandy)
= - sprawdza czy operandy są jednakowymi ciągami znaków (dwa operandy)
!= - sprawdza czy operandy są różnymi ciągami znaków (dwa operandy)
-lt – sprawdza czy operand 1 jest mniejszy operand2 (dwa operandy które są liczbami
całkowitymi)
-le – sprawdza czy operand1 jest równy lub mniejszy od operand2 (dwa operandy które SA
liczbami całkowitymi)
-gt – sprawdza czy operand1 jest większy od operand2 (dwa operandy które SA liczbami
całkowitymi)
-ge – sprawdza czy operand1 jest równy lub większy od operand2 (dwa operandy które SA
liczbami całkowitymi)
FOR
Składnia pętli for wygląda następująco:
for ZMIENNA in …; do
instrukcje;
done
Przykładem użycia pętli for może być skrypt, który wyświetli, linijka po linijce, wszystkie
parametry, z jakimi ten skrypt został uruchomiony niezależnie od liczby tych parametrów.
Kod takiego skryptu wygląda następująco:
#!/bin/bash
for ZMIENNA in $*; do
echo “$ZMIENNA”;
done
Oczywiście pętle for można używać na wiele różnych sposobów np.:
#!/bin/bash
DZIEN1=poniedziałek
DZIEN2=wtorek
DZIEN3=środa
for ZMIENNA in ”$DZIEN1” ”$DZIEN2” ”$DZIEN3”; do
echo ”Dzisiaj jest: $ZMIENNA”;
done
Jak pokazuje powyższy skrypt, pętla for wykonuje instrukcje zawarte wewnątrz pętli na
parametrach, które są oddzielone spacjami dlatego też zaleca się umieszczanie tych
parametrów cudzysłowach chyba, że parametry te nie zawierają znaku spacji.
WHILE
Składnia pętli while wygląda następująco:
while warunek; do
instrukcje;
done
W pętli while warunek zbudowany jest dokładnie tak samo jak w instrukcji warunkowej IF (ta
sama konstrukcja te same operatory).
UNTIL
Pętla until na dokładnie taką samą składnie jak pętla while i działa tak samo jak pętla while z
tą różnica, że warunek znajdujący się w pętli until jest zanegowany. Pętla until działa tak
długo dopóki warunek jest nieprawdziwy w przeciwnym razie pętla kończy swoje działanie.
Zgodnie z tym składnia pętli until wygląda następująco:
until warunek; do
instrukcje;
done
Przykładowy skrypt wykorzystujący pętlę while może wyglądać następująco:
#!/bin/bash
X=$1
until [ $X –gt $2 ]; do
echo ”liczba $X jest mniejsza od liczby $2”;
X=$(($X + 1));
Done