Komendy
alias — komenda służąca do zastępowania poleceń dowolnym ciągiem znaków. Alias bez argumentów wyświetla listę zastąpionych poleceń. Komenda ta jest szczególnie przydatna w przypadku długich lub często stosowanych komend. Alias nie działa w shell’u sh.
> alias psu (ps -u kowalski) > alias dir ls > dir Unix.Lab bin |
Jeśli nie wykorzystuje się shell’a csh, to komendę alias można wykorzystać do operacji na komendach wykorzystywanych wcześniej.
> who kowalski pts/0 Dec 07 13:25 (pckowal.kt.agh.e) x pts/1 Dec 07 14:41 (pcx.kt.agh.edu) y pts/2 Dec 07 13:46 (pcy.ds14.agh.) x pts/4 Dec 07 14:39 (pcx.kt.agh.edu) > alias wh !-1 alias wh who > wh kowalski pts/0 Dec 07 13:25 (pckowal.kt.agh.e) x pts/1 Dec 07 14:41 (pcx.kt.agh.edu) y pts/2 Dec 07 13:46 (pcy.ds14.agh.) x pts/4 Dec 07 14:39 (pcx.kt.agh.edu) |
Komenda alias nie działa prawidłowo w przypadku potoków, ponieważ może zastąpić tylko jedną komendę.
> ls -go | grep pl -rw-r--r-- 1 25 Nov 17 10:41 nazwa.pliku.txt > alias pl1 !-1 alias pl1 ls -go | grep pl > pl1 pl1: Command not found. |
tar — polecenie służące do archiwizacji plików, łączące podane pliki w jeden, archiwalny plik. Przy wykonywaniu polecenia tar należy określić jego funkcję przy pomocy flagi (c, r, t, u lub x). Znaczenia flag „funkcyjnych”: c kasuje zawartość archiwum i tworzy w jego miejsce nowe, automatycznie uruchamia funkcję „r”; r dodaje plik (pliki) do pliku archiwalnego; t wypisuje zarchiwizowane pliki; u aktualizuje archiwum — dodaje pliki (funkcja r) i aktualizuje zarchiwizowane pliki; x odtwarza zarchiwizowane pliki, przy czym jako argument można wpisać nazwę pliku lub katalogu.
Poza tym można wykorzystać następujące, opcjonalne flagi: f nazwa.pliku obsługuje archiwum z podanego pliku, a nie domyślne; l zmienia właściciela i grupę dla plików na takie, jakie ma wykonujący funkcję tar, oczywiście z funkcją x; v wypisywanie litery wykonywanej funkcji i nazwy przetwarzanego pliku; w żąda potwierdzania wykonywanych operacji. Poniżej przedstawiono pracę z archiwum znajdującym się w pliku „arch”.
> ls 1_sys_uzyt p_ftp przyklad.skr 2katalog petla przyklad2.txt cmd petla.c status cmd2 pro.c system.uzytkownik.c czy_wynik.skr prog.c syuz kolokwia prog2 val nazwa.pliku.txt przyklad val1 > tar -c -f ~/Unix.Lab/arch * > ls -go arch -rw-r--r-- 1 317440 Dec 08 15:33 arch > tar -tf arch | more 1_sys_uzyt 2katalog/ 2katalog/d 2katalog/e ... val val1 > > tar -xvf arch x 1_sys_uzyt, 4603 bytes, 9 media blocks. ... x val, 51 bytes, 1 media blocks. x val1, 47 bytes, 1 media blocks. |
find — służy do szukania plików wg określonego wzorca z możliwością wykonywania określonych poleceń na znalezionych plikach. Komenda find pozwala na:
· szukanie pliku na podstawie nazwy (możliwe jest stosowanie znaków globalnych, ale nazwę pliku należy umieścić w apostrofach - przykład): find –name,
· szukanie pliku na podstawie praw dostępu: find -perm,
· szukanie pliku należącego do użytkownika: find -user,
· szukanie pliku należącego do użytkownika w określonej grupie: find -group,
· szukanie pliku określonego typu (katalogu d, znakowego c, zwykłego f itd.): find -type,
· szukanie pliku o określonym rozmiarze: find –size liczba[c], przy czym jeśli wpisana zostanie opcjonalna flaga c, to rozmiar jest liczony w bajtach, w innym przypadku — jest liczony w blokach (po 512 bajtów)
· szukanie pliku na podstawie czasu:
§ find –atime k, jeżeli szukany plik był używany k dni wcześniej,
§ find –mtime k, jeżeli szukany plik był modyfikowany k dni wcześniej,
§ find –newer nazwa.pliku, jeżeli szukany plik był modyfikowany później niż plik „nazwa.pliku”,
§ find –ctime k, jeżeli i-node był modyfikowany k dni wcześniej,
· wypisywanie nazwy pliku: find -print,
· wykonywanie poleceń shell’a:
§ find –exec komenda \, przy czym znak {} oznacza każdy znaleziony, bieżący plik, zaś polecenie musi być zakończone znakami „\;”,
§ find –ok komenda \, znak {} oznacza każdy znaleziony, bieżący plik, polecenie musi być zakończone znakami „\;”, a shell żąda potwierdzenia gdy ma wykonać polecenie.
Proszę zwrócić uwagę na przykład poniżej. Rezultaty działania polecenia są w obu przypadkach takie same, pomimo, że pliki start i kończące się na „.c” istnieją, a plik start1 nie. Problem ten można rozwiązać przez łączenie kryteriów i poleceń komendy find.
> ls -go ./kolokwia/start -rwx------ 1 15 Dec 02 09:41 ./kolokwia/start > find . -name start > find . -name start1 > find . -name '*.c' > |
Wyżej wymienione kryteria poszukiwania i polecenia komendy find mogą być łączone za pomocą operatorów logicznych. Domyślnym operatorem jest suma logiczna (-a), poza tym można wykorzystywać negację (!) i alternatywę (-o). Poprzedni przykład wygląda wtedy następująco:
> find . –name start -print ./kolokwia/start > find . –name start1 -print > |
Wykorzystanie negacji i alternatywy:
> find . ! -newer ./cmd -print ./cmd ./prog.c > > find . ! -newer ./cmd -print -o -name start -print ./cmd ./prog.c ./kolokwia/start |
Proszę zwrócić uwagę, że w drugim poleceniu nie zostaną wypisane wszystkie znalezione pliki, jeżeli jego składnia będzie następująca: find . ! –newer ./cmd –o –name start –print.
Uwaga: w przypadku, gdy zażąda się wykonania większej liczby komend, to wykonywane są one po kolei — od lewej do prawej. Ma to znaczenie zwłaszcza w przypadku poleceń, które są zawsze wykonywane (print, exec itp.). Na przykład:
> find . –exec ls –go {} \; -name start | more total 816 -rwxr-xr-x 1 4603 Nov 09 14:15 1_sys_uzyt drwx—S--- 3 512 Dec 01 15:04 2katalog -rw-r—r-- 1 317440 Dec 08 17:08 arch ... -rwxr—r-- 1 40 Nov 18 13:06 ./przykład.skr > |
Powyższe polecenie powinno wyglądać tak:
> find . –name start –exec ls –go {} \; | more -rwx------ 1 15 Dec 02 09:41 ./kolokwia/start > |
„Pazurki”
Po lewej stronie klawiatury, pod znakiem ESC, znajduje się klawisz ze znakami tyldy i tzw. „pazurkami” — odwrotnym apostrofem. Poniższe przykłady przedstawiają wykorzystanie „pazurków” (``).
> cat `ls *.skr` #!/bin/sh STATUS=ok ... nohup bc < val > wynik & > > cat spis 3katalog b c d e pliki spis > rm `cat spis` rm: 0653-603 Cannot remove directory 3katalog. > ls 3katalog > > ls 3katalog a aa b c > rm `find . –name
a* -print` > ls 3katalog b c |
Uwaga: w ostatnim przykładzie użycie polecenia rm `find . -name a` jest błędne, ponieważ find nie zwróci żadnych nazw plików do polecenia rm.
Ostatnie polecenie równoważne innej komendzie Unix’a. Proszę podać jej postać.