Uniwersytet w Białymstoku

Wydział Matematyki i Informatyki

Instytut Informatyki

Materiały bazowe do zajęć z przedmiotu:

Systemy operacyjne

Laboratorium nr 05

Temat:

Kompresja plików,

globalne i Lokalne zmienne środowiskowe,

Tworzenie zmiennych

Edytor plików tekstowych vi,

Aliasy poleceń

mgr Adam Bonda

Białystok 2008

Cel laboratorium: Zapoznanie się programami do kompresji i archiwizacji plików, roli i sposobu tworzenia zmiennych środowiskowych, oraz poruszaniem się w edytorze plików tekstowych – vi.

(1) Kompresja danych

compress, uncompress, zcat kompresuj i dekompresuj dane

compress redukuje rozmiar podanych plików uŜywając zmodyfikowanego algorytmu Lempel-Ziv (LZW – autor Terry A. Welch). Zawsze, jeŜeli jest to moŜliwe, do nazwy pliku dodawane jest rozszerzenie .Z, przy zachowaniu informacji o właścicielu pliku, trybie dostępu oraz czasie dostępu i modyfikacji. JeŜeli nie podano nazwy Ŝadnego pliku, dane do kompresji pobierane są ze standardowego wejścia, a po skompresowaniu zapisywane na standardowe wyjście. compress kompresuje jedynie zwykłe pliki. W szczególności, ignoruje dowiązania symboliczne. JeŜeli plik ma wiele twardych dowiązań, compress nie podda go kompresji, chyba Ŝe zostanie uruchomiony z opcją -f.

uncompress uruchamiany jest z listą plików w linii poleceń. Następnie kaŜdy plik, którego nazwa kończy się rozszerzeniem .Z i w nagłówku pliku znajduje się prawidłowa liczba (magic number) jest dekompresowany i z jego nazwy usuwane jest rozszerzenie .Z.

Zdekompresowny plik będzie miał te same właściwości, co plik skompresowany, tzn.

właściciela, tryb dostępu oraz czas dostępu i modyfikacji. Opcja -c powoduje, Ŝe programy compressi uncompress zapisują pliki wyjściowe na standardowe wyjście; w ten sposób oryginalne pliki są nienaruszane.

zcat działa tak samo, jak uncompress -c. zcat dekompresuje pliki z listy podanej w linii poleceń lub pobiera dane ze standardowego wejścia, a następnie zapisuje zdekompresowane dane na standardowe wyjście. zcat dokonuje dekompresji plików po sprawdzeniu, Ŝe w nagłówku pliku znajduje się właściwa liczba (magic number); nie jest wymagane, aby nazwa pliku miała rozszerzenie .Z.

Składnia:

compress [-dfcv] [-b maxbit] plik

uncplress [-fcv] plik

zcat -V plik

Opcje:

-d

– dekompresja skompresowanego pliku

-c

– wyprowadzenie wynikowej postaci pliku na standardowe wyjście, bez usuwania pliku wejściowego

-f

– zastąpienie poprzedniej wersji pliku wyjściowego nową wersją

-v

– tryb „głośny” (ang. verbose) – wyprowadza komunikaty o procesie kompresji

Przykłady:

$ compress nazwa.doc # utworzy plik nazwa.doc.Z i usunie nazwa.doc

$ uncompress nazwa.doc.Z # odtworzy plik nazwa.doc i usunie plik skompresowany $ zcat nazwa.doc.Z # wyprowadzi na ekran rozpakowaną zawartość źródła

$ tar cvf - * | compress > nazwa.tar.z # utworzy skompresowane archiwum plików bieŜącego katalogu

tar program archiwizujący

tar, słuŜącego do zapisywania i ekstrakcji plików z archiwum nazywanego tarfile.

Archiwum tarfile moŜe zostać utworzone w napędzie taśmy, chociaŜ często tworzy się je w postaci zwykłego pliku. Pierwszym argumentem programu tar musi być jedna z opcji: Acdrtux, po której następują opcjonalne funkcje. Końcowymi argumentami programu tar są nazwy plików lub katalogów, które powinny zostać zarchiwizowane. UŜycie nazwy katalogu oznacza, Ŝe znajdujące się w nim podkatalogi równieŜ powinny zostać zarchiwizowane.

Wybrane opcje:

-c

– utworzenie nowego archiwum (jeŜeli archiwum o podanej nazwie istnieje to jest nadpisywane; jeŜeli nazwa jest katalogiem, to do archiwum przenoszona jest rekurencyjnie cała jego zawartość

-r

– dołączenie plików do archiwum na jego końcu

-t

– wypisanie zawartości archiwum

-u

– dołączenie tylko tych plików, które są nowsze niŜ egzemplarze w archiwum

-x

– ekstrakcja plików z archiwum

-j

– kompresja/dekompresja archiwum programem bzip2

-Z

– kompresja/dekompresja archiwum programem compress

-z

– kompresja/dekompresja archiwum programem gzip

Składania:

tar -[opcje] nazwa_archiwum.[tar|bz2|gz|z] pliki katalogi

Przykłady:

$ tar -xvf plik.tar # rozpakowuje plik.tar

$ tar -xvzf plik.tar.gz [lub plik.tgz] # rozpakowuje tar, dekompresując

uprzednio gzip'em

$ tar -cvf plik.tar.gz katalog/ # archiwizuje zawartość katalogu katalog w pliku plik.tar.gz

gzip, gunzip, zcat kompresuje i dekompresuje pliki

gzip korzysta z algorytmu Lempel-Ziv uŜytego w programach zip i PKZIP. Wydajność kompresji zaleŜy od wielkości danych wejściowych, ilości bitów uŜywanych w kodach oraz rozmieszczenia w danych jednakowych podciągów. Stopień kompresji jest przewaŜnie duŜo większy niŜ przy uŜyciu kodowania LZW.

gzip redukuje rozmiar podanych plików uŜywając algorytmu Lempel-Ziv (LZ77).

Zawsze, jeŜeli jest to moŜliwe, do nazwy pliku dodawane jest rozszerzenie .gz, przy zachowaniu informacji o właścicielu pliku, trybie dostępu, oraz czasie dostępu i modyfikacji.

Skompresowane pliki mogą być odtworzone do pierwotnej postaci przy uŜyciu poleceń gzip -d, gunzip lub zcat (działa tak samo, jak gunzip -c).

Opcje:

-d

– zdekompresuj plik,

-f

– kompresuj plik, nawet jeŜeli istnieją do niego twarde dowiązania lub plik wyjściowy juŜ istnieje, lub teŜ, jeŜeli dane są uprzednio skompresowane,

-l

– dla kaŜdego skompresowanego pliku wypisuje informacje typu: rozmiar skompresowanego i zdekompresowanego pliku, współczynnik kompresji,

metoda kompresji, 32-bitowa suma kontrolna CRC zdekompresowanych

danych, pole daty/czasu oryginalnego pliku,

-r

– kompresuj rekurencyjnie zawarto katalogów podanych w linii poleceń ,

-t

– sprawdź spójność skompresowanego pliku.

Składnia:

gzip [ -acdfhlLnNrtvV19 ] [-S rozszerzenie] [ nazwa ... ]

gunzip [ -acfhlLnNrtvV ] [-S rozszerzenie] [ nazwa ... ]

zcat [ -fhLV ] [ nazwa ... ]

Przykłady:

$ gzip plik # kompresja pliku,

$ gzip -d plik.gz # dekompresja pliku.

bzip2, bunzip2,

sortujący bloki kompresor/dekompresor plików

bzcat,

dekompresuje pliki na standardowe wyjście

bzip2recover

odzyskuje dane ze zniszczonych archiwów bzip2

bzip2 kompresuje pliki uŜywając algorytmu sortowania bloków Burrowsa-Wheelera i kodu Huffmana. Kompresja jest generalnie sporo lepsza od konwencjonalnych kompresorów opartych o metodę LZ77/LZ78, i jest porównywalna z osiągnięciami statystycznych kompresorów z rodziny PPM.

bzip2 oczekuje listy plików towarzyszących parametrom linii poleceń. KaŜdy plik jest zastępowany przez swoją skompresowaną wersję, z nazwą oryginalny_plik.bz2.

bzip2 i bunzip2 standardowo nie nadpisują istniejących juŜ plików. Jeśli chcesz aby to robiły, musisz uŜyć parametru -f.

bunzip2 (lub bzip2 -d) dekompresuje wszystkie podane pliki.

bzcat (lub bzip2 -dc) dekompresuje wszystkie wybrane pliki na standardowe wyjście.

Opcje:

-c

Kompresuje lub dekompresuje na standardowe wyjście.

-d

Wymusza dekompresję. bzip2, bunzip2 i bzcat są tak naprawdę tymi samymi programami i decyzja jakie akcje będą wykonane jest wykonywana na podstawie nazwy jaka została uŜyta

-t

Sprawdza integralność wybranego pliku(ow)

-f

Wymusza zastępowanie plików wyjściowych i łamanie dowiązań twardych, czego normalnie nie robi

Składnia:

bzip2 [-cdfkqstvzVL123456789] [nazwy_plików...]

bunzip2 [-fkvsVL] [nazwy_plików...]

bzcat [-s] [nazwy_plików...]

bzip2recover nazwa_pliku

Przykłady:

$ bzip2 plik # kompresja pliku,

$ bunzip2 plik.bz2 # dekompresja pliku.

(2) Zmienne środowiskowe systemu Linux

Wiele programów i skryptów korzysta ze zmiennych środowiskowych w których przechowywane są zarówno trwale jak i tymczasowo róŜne dane. Dotyczą one głównie konfiguracji systemu i aplikacji w nim pracujących. RóŜnią się one nieznacznie, zaleŜnie od rodzaju dystrybucji, czy nawet wersji linux'a.

Rozmieszczenie zmiennych środowiskowych jest bardzo zróŜnicowane dlatego warto poznać kilka typowych miejsc ich definiowania i pobierania.

Zasadniczo rozróŜnia się dwa typy zmiennych środowiskowych. Są to



zmienne globalne



zmienne lokalne

I.

Globalne zmienne środowiskowe

Rozpoznawane są zarówno przez otwartą sesję shella, jak i procesy potomne, które powłoka tworzy, czy teŜ które tworzone są podczas pracy uŜytkownika. Zmienne lokalne są dostępne tylko z poziomu tej powłoki, która je tworzy (lub stworzyła). To właśnie czyni zmienne globalne tak przydatnymi aplikacjom tworzącym procesy potomne, przez które komunikują się z procesami nadrzędnymi.

Część globalnych zmiennych środowiskowych jest juŜ tworzona w momencie ładowania bash'a – są to tzw. systemowe zmienne środowiskowe. Dla odróŜnia ich od zmiennych innego typu, tworzone są za pomocą wielkich liter.

Polecenie printenv lub env zwraca listę globalnych zmiennych środowiskowych $ env

LESSKEY=/etc/.less

LC_PAPER=pl_PL

LC_ADDRESS=pl_PL

LC_MONETARY=pl_PL

HOSTNAME=stacja_01

MIZFILES=/usr/local/share/mizar

TERM=xterm

SHELL=/bin/bash

LC_SOURCED=1

HISTSIZE=1000

TMPDIR=/home/student/tmp

SSH_CLIENT=::ffff:192.168.0.1 1358 22

LC_NUMERIC=pl_PL

QTDIR=/usr/lib/qt3/

SSH_TTY=/dev/pts/0

USER=student

LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:o r=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01; 32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01; 31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.

tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*

.xpm=01;35:*.png=01;35:*.tif=01;35:

LC_TELEPHONE=pl_PL

FLASH_GTK_LIBRARY=libgtk-x11-2.0.so.0

MOZ_PLUGIN_PATH=/usr/lib/mozilla/plugins:/home/student/.mozilla/plugins

NLSPATH=/usr/share/locale/%l/%N

MAIL=/var/spool/mail/student

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/h ome/student/bin

LC_MESSAGES=pl_PL

SECURE_LEVEL=2

LC_IDENTIFICATION=pl_PL

LC_COLLATE=pl_PL

INPUTRC=/etc/inputrc

PWD=/home/student

LANG=pl_PL

PYTHONSTARTUP=/etc/pythonrc.py

LC_MEASUREMENT=pl_PL

PS1=[\u@\h \W]\$

SSH_ASKPASS=/usr/lib/ssh/gnome-ssh-askpass

HISTCONTROL=ignoredups

SHLVL=1

HOME=/home/student

LANGUAGE=pl_PL:pl

GCONF_TMPDIR=/tmp

TMP=/home/student/tmp

LESS=-MM

LOGNAME=student

LC_CTYPE=pl_PL

SSH_CONNECTION=::ffff:192.168.0.1 1358 22 ::ffff:192.168.0.2 1358 22

LESSOPEN=|/usr/bin/lesspipe.sh %s

LC_TIME=pl_PL

G_BROKEN_FILENAMES=1

LC_NAME=pl_PL

_=/bin/env

Szereg z tych zmiennych tworzona jest przez powłokę bash. Większość z nich jest zmiennymi systemowymi tworzonymi przez system w trakcie procesu logowania.

II. Lokalne zmienne środowiskowe

Jak sama nazwa wskazuje są to zmienne, które moŜna odczytać tylko w lokalnej sesji, a więc w której zostały one zdefiniowane. Nie oznacza to wcale, Ŝe są one mniej waŜne od zmiennych globalnych. Obydwa rodzaje zmiennych są równie istotne, poniewaŜ domyślnie tworzone są przez system.

Nie istnieje jednak polecenie wyświetlające listę samych zmiennych lokalnych. Istnieje natomiast polecenie set, które wyrzuca listę zmiennych środowiskowych wszystkich typów.

$ set

BACKSPACE=Delete

BASH=/bin/bash

BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i586-mandrake-linux-gnu")

BASH_VERSION='2.05b.0(1)-release'

BSNUM=14

CLASS=beginner

COLUMNS=140

DIRSTACK=()

EUID=0

FLASH_GTK_LIBRARY=libgtk-x11-2.0.so.0

GCONF_TMPDIR=/tmp

GROUPS=()

G_BROKEN_FILENAMES=1

HISTCONTROL=ignoredups

HISTFILE=/home/student/.bash_history

HISTFILESIZE=1000

HISTSIZE=1000

HOME=/home/student

HOSTNAME=serwer306

HOSTTYPE=i586

IFS=$' \t\n'

INPUTRC=/etc/inputrc

KBCHARSET=iso-8859-2

KEYBOARD=pl

KEYTABLE=pl

LANG=pl_PL

LANGUAGE=pl_PL:pl

LC_ADDRESS=pl_PL

LC_COLLATE=pl_PL

LC_CTYPE=pl_PL

LC_IDENTIFICATION=pl_PL

LC_MEASUREMENT=pl_PL

LC_MESSAGES=pl_PL

LC_MONETARY=pl_PL

LC_NAME=pl_PL

LC_NUMERIC=pl_PL

LC_PAPER=pl_PL

LC_SOURCED=1

LC_TELEPHONE=pl_PL

LC_TIME=pl_PL

LESS=-MM

LESSKEY=/etc/.less

LESSOPEN='|/usr/bin/lesspipe.sh %s'

LIBSAFE=no

LINES=61

LOGNAME=student

LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01: or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01

;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01

;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*

.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:

*.xpm=01;35:*.png=01;35:*.tif=01;35:'

LS_OPTIONS='-F --color=auto'

MACHTYPE=i586-mandrake-linux-gnu

MAIL=/var/spool/mail/student

MAILCHECK=60

META_CLASS=download

MIZFILES=/usr/local/share/mizar

MOZ_PLUGIN_PATH=/usr/lib/mozilla/plugins:/home/student/.mozilla/plugins

NLSPATH=/usr/share/locale/%l/%N

OPTERR=1

OPTIND=1

OSTYPE=linux-gnu

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/h ome/student/bin

PIPESTATUS=([0]="0")

PPID=14009

PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

PS1='[\u@\h \W]\$ '

PS2='> '

PS4='+ '

PWD=/home/student

PYTHONSTARTUP=/etc/pythonrc.py

QTDIR=/usr/lib/qt3/

SECURE_LEVEL=2

SECURITY=2

SHELL=/bin/bash

SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor SHLVL=1

SSH_ASKPASS=/usr/lib/ssh/gnome-ssh-askpass

SSH_CLIENT='::ffff:192.168.0.1 1358 22'

SSH_CONNECTION='::ffff:192.168.0.1 1358 22 ::ffff:192.168.0.2 1358 22'

SSH_TTY=/dev/pts/0

TERM=xterm

TMOUT=0

TMP=/home/student/tmp

TMPDIR=/home/student/tmp

UID=0

UMASK_USER=022

USER=student

_=env

screen ()

{

if [ -z "$SCREENDIR" ]; then

export SCREENDIR=$HOME/tmp;

fi;

/usr/bin/screen $@

}

Znając listę zmiennych globalnych uzyskanych poleceniem printenv, moŜemy łatwo określić które ze zmiennych naleŜą to typu lokalnego.

Niektóre z wartości zmiennych zwracane są przez system po wywołaniu określonego polecenie, np.:

logname

pobiera i zwraca nazwę uŜytkownika

Polecenie pobiera i wyprowadza na standardowe wyjście nazwę uŜytkownika, który na danym terminalu otworzył sesję.

Taki sam efekt uzyskamy wywołując systemową zmienną $LOGNAME.

śeby zobaczyć wartość danej zmiennej naleŜy wydać polecenie echo i podać nazwę zmiennej poprzedzonej znakiem dolara „$”. Pomiędzy $ a nazwą zmiennej nie moŜe występować spacja.

III. Tworzenie lokalnych zmiennych środowiskowych

Z poziomu powłoki, uŜytkownik moŜe sam tworzyć zmienne środowiskowe. MoŜliwe jest przypisanie zarówno wartości numerycznej jak i tekstowej tworzonej zmiennej uŜywając znaku przypisania „=” :

$ n_zmienna=test

$ echo $n_zmienna

test

śeby zmiennej przypisać tekst składający się z kilku słów, lub znaków rozdzielonych spacją naleŜy zastosować pojedyncze znaki cytowania:

$ n_zmienna='test kilku wyrazow'

$ echo $n_zmienna

test kilku wyrazow

w innym przypadku powłoka zgłosi błąd, biorąc drugi wyraz za komendę którą naleŜy wykonać.

WaŜne jest, aby pomiędzy nazwą zmiennej, znakiem przypisania oraz wartością nie było spacji.

IV. Tworzenie globalnych zmiennych środowiskowych

Globalne zmienne środowiskowe są dostępne z dowolnego procesu potomnego utworzonego z procesu rodzica, z którego poziomu zmienna została stworzona.

Metoda tworzenia zmiennej globalnej polega na stworzeniu zmiennej lokalnej i wyeksportowaniu jej do środowiska globalnego. UŜywa się do tego polecenia export: $ n_zmienna='test kilku wyrazow' # tworzymy zmienna lokalna

$ echo $n_zmienna

# sprawdzamy jej wartość

test kilku wyrazow

$ export n_zmienna

# eksportujemy zmienną do środowiska

# globalnego

$ bash

# uruchamiamy proces potomny

$ echo $n_zmienna

# sprawdzamy obecność zmiennej w

test kilku wyrazow

# procesie potomnym

NaleŜy zwrócić uwagę, Ŝe podczas eksportowania zmiennych nie uŜywa się znaku dolara.

V. Usuwanie zmiennych środowiskowych

Jeśli zmienną moŜna stworzyć to moŜna ją teŜ usunąć. SłuŜy do tego polecenie unset: $ n_zmienna=test

$ echo $n_zmienna

test

$ unset test

$ echo $n_zmienna

$

VI. Lokalizacja zmiennych systemowych w systemie

Znalezienie mechanizmu tworzenia danej zmiennej w systemie określa miejsce jej definiowania. Podczas logowania do systemu, bash domyślnie sprawdza i uruchamia kilka plików. Nazywane są one plikami startowymi (ang. startup files).

Istnieją trzy sposoby uruchomienia powłoki systemowej bash:



podczas typowego procesu logowania do powłoki

W takcie typowego logowania do systemu, powłoka bash uruchamia się jako powłoka logowania, która sprawdza cztery róŜne pliki startowe (w określonej poniŜej kolejności), by uzyskać dalsze informacje potrzebne do stworzenia pełnego środowiska roboczego, są to:

/etc/profile

$HOME/.bash profile

$HOME/.bash login

$HOME/.profile



jako interaktywna powłoka (nie będąca powłoką logowania)

Jeśli uruchomiona została powłoka bash, bez logowania się do systemu (np.: poprzez CLI (ang. command line interface) to właśnie właśnie uruchomiony został

tryb interaktywny powłoki. Tryb ten nie podlega zachowaniu powłoki logowania, ale umoŜliwia wykonywanie poleceń.

Tryb interaktywny nie przetwarza /etc/profile, ale za to sprawdzany jest

.bashrc z katalogu domowego



jako nieinteraktywna powłoka uruchamiająca skrypty

Powłokę nieinteraktywną system uruchamia w celu wykonywania skryptów shellowych. RóŜnica polega na tym, Ŝe w tym przypadku brak jest CLI.

(3) Edytor vi

vi,view,vim edytor plików tekstowych

vim jest edytorem tekstów, kompatybilnym z vi i moŜe być uŜywany do edycji wszystkich rodzajów tekstu. Jest szczególnie uŜyteczny podczas edycji programów.

vim ma wiele ulepszeń w stosunku do vi: wielopoziomowe undo, moŜliwość pracy z wieloma oknami i buforami, podświetlanie składni, edycja linii komend, dokańczanie nazw plików, pomoc online, itp.

Podsumowanie róŜnic między vim, a vi moŜna uzyskać, wpisując ":help vi_diff.txt".

Podczas pracy z edytorem vim za pomocą polecenia ":help" moŜna uzyskać pomoc z systemu pomocy online.

Najczęściej vim jest uŜywany do edycji pojedynczego pliku i wywoływany:

vim plik

Ogólniej, vim jest uruchamiany tak:

vim [opcje] [lista_plików]

Niewątpliwą zaletą tego edytora jest to, Ŝe znajduje się w kaŜdej, nawet najbardziej zminimalizowanej dystrybucji.

Wybrane opcje:

+[num]

Kursor będzie ustawiony w linii "num" pierwszego pliki. JeŜeli nie podano wartości "num", kursor ustawi się w ostatniej linii.

(bardzo przydatna opcja przy błędach zwracanych w trakcie kompilacji źródeł)

+/{pat} Kursor będzie ustawiony na pierwszym wystąpieniu wzorca {pat} w pierwszym pliku. Zobacz ":help search-pattern", aby wyświetlić listę moŜliwych wzorców wyszukiwania.

-R

Otwiera plik w trybie czytania – nie moŜna zapisywać zmian

vim/vi posiada dwa podstawowe tryby pracy:



tryb poleceń (po naciśnięciu klawisza Esc)



tryb pisania/wstawiania tekstu (po wprowadzeniu Esc-i)

W trybie poleceń naciśniecie klawisza nie jest interpretowane jako kolejny znak tekstu, ale polecenie dla edytora. W drugim trybie kaŜdy naciśnięty klawisz powoduje wprowadzenie odpowiedniego znaku ASCII w tekście.

Po uruchomieniu edytora przechodzi on automatycznie w trybie poleceń. Wciśnięcie Esc i jednego z parametrów podanych w „Tryb wprowadzania znaków ” przechodzi on do trybu edycji tekstu. Kombinacja „Esc :” (Esc + dwukropek) powoduje przejście w tryb poleceń edytora ex.

Tryb wprowadzania znaków

i/a (ang. insert/append) przejście w tryb wstawiania znaków przed/za kursorem I/A

przejście w tryb wstawianie znaków na początku/końcu wiersza

o/O

przejście w tryb wstawianie znaków i wstawienie pustego

wiersza pod/nad wierszem tekstu z kursorem. Kursor pojawia

się na początku nowego pustego wiersza.

R (ang. replace)

przejście w tryb wstawiania znaków przez nadpisywania

Przemieszczanie kursora (tryb poleceń)

h, j, k, l o jeden znak w: lewo, górę, dół, prawo

3w/3W

o np.: 3 słowa w prawo z/bez uwzględnienia znaków interpunkcji

5b/5B

o np.: 5 słów w lewo z/bez uwzględnienia znaków interpunkcji

0/$

na początek/koniec wiersza

^F/^B

o jeden ekran do przodu/tyłu (Ctrl+f / Ctrl+b / Ctrl+d / Ctrl+u)

1G/G

na początek/koniec pliku

H

na początek ekranu

{

przemieszczanie się pomiędzy akapitami - akapitem dla edytora jest pusta

}

linia w tekście

Kasowanie znaków (tryb poleceń)

x (2x, 3x) kasowanie bieŜącego znaku (w pozycji kursora)

dw

kasowanie słowa na początku którego stoi kursor

dd

kasowanie bieŜącego wiersza tekstu

D/d$

kasowanie od kursora do końca wiersza

d0

kasowanie od kursora do początku wiersza

Zastępowanie znaków (tryb poleceń)

r znaku w pozycji kursora

R kolejnych znaków, począwszy od pozycji kursora

Odtwarzanie skasowanych znaków (tryb poleceń)

u anulowanie ostatniej operacji kasowania

U odtworzenie wiersza w jego poprzednim miejscu

p odtworzenie ostatniego kasowania w pozycji bieŜącej

Łączenie wierszy tekstu (tryb poleceń)

J dołączenie wiesza następnego na końcu bieŜącego

Powtórzenie pelecenia (tryb poleceń)

. powtórzenie ostatnio wykonanego polecenia edytora

Szukanie znaku w wierszu (tryb poleceń)

f/F

szukanie znaku w wierszu w kierunku jego końca/początku

;

szukanie następnego wystąpienia wzorca tekstu

Szukanie napisu wg podanego wzorca (tryb poleceń) – moŜna stosować RegEx

/wzorzec szukanie napisu w kierunku końca pliku

?wzorzec szukanie napisu w kierunku początki pliku

n,/

szukanie następnego wystąpienia napisu (w stronę końca/początku)

Zastępowanie fragmentów testu (tryb poleceń)

:1,$s/stary/nowy/gc

zastąpienie w całym buforze (pliku) (g) napisu określonego

przez argument stary na napis określony przez argument

nowy, oraz zapytanie (c) o potwierdzenie dokonania zmian.

:s/stary/nowy

zastąpienie napisu w ramach wiersza

Zakres wierszy, w których ma się dokonać zamiana wyraŜeń określony jest pod dwukropku przez literą s.

1,$

Od pierwszego do ostatniego wiersza zbioru

1,.

Do pierwszego do bieŜącego (.) wiersza

.,$

Od bieŜącego (.) do końca pliku

%

Cały plik

5,20 Wiersze od 5 do 20 włącznie

Na końcu polecenia zamiany po znaku / mogą wystąpić modyfikatory

g

(ang. global) wszystkie wystąpienia w wierszu

c

(ang. confirm) z potwierdzeniem zmiany

W wspomnianym trybie komend e

dytora e

x (przejście do tego trybu przez „Esc :”)

moŜliwe jest wprowadzanie komend, wpisując je bezpośrednio na dole ekranu po znaku dwukropka. UŜycie znak wykrzyknika (!) po komendzie oznacza bezwarunkowe jej wykonanie.

:w

zapamiętanie edytowanego pliku pod bieŜącą nazwa

:w inny_plik zapamiętanie edytowanego pliku pod wskazaną argumentem nazwą

:q

wyjście z edytora (:q! - wyjście bez względu na kod ochrony pliku) bez

wykonania jakiejkolwiek zmiany w tekscie.

:x

zapamiętanie edytowanych treści w bieŜącym pliku i zamknięcie edytora

:wq

jw.

:!cmd

wykonanie wskazanego przez cmd polecenia shella

:set

wyświetla aktualne ustawienia edytora

:set all

wyświetla wszystkie dostępne ustawienia edytora

:set wm=n

ustawia długości wiersza tekstu (prawego marginesu: ang wrap margin)

:set number

włącza wyświetlanie numerów wierszy

:5,8 w nowy

Zapisuje wiersze od 5 do 8 w pliku nowy

Więcej informacji: man vi lub vimtutor

(5) Aliasy

$ alias -p

alias l.=’ls -d .* --color=tty’

alias ll=’ls -l --color=tty’

alias ls=’ls --color=tty’

alias vi=’vim’

alias which=’alias | /usr/bin/which --tty-only --readalias--

show-dot --show-tilde’

$

Zadanie1.

Stworzyć lokalną zmienną środowiskową z określoną wartością. Wyświetlić wartość tej zmiennej. W bieŜącej powłoce uruchomić kolejną powłokę, jako proces potomny i dokonać ponownego sprawdzenia wartości stworzonej zmiennej. Unicestwić bieŜący proces i ponownie sprawdzić wartość zmiennej.

Zadanie2.

Korzystając z wymienionych poleceń do archiwizacji, kompresji i dekompresji plików wykonać:

●

archiwizację plików z bieŜącego katalogu do formatu .tar

●

kompresję plików do formatu .z

●

archiwizację plików z bieŜącego katalogu do formatu .tar.z

●

kompresję plików do formatu gz i tar.gz

●

kompresję plików do formatów bz2

●

kompresję plików do formatów tar.bz2

●

Porównać rozmiary plików .tar, tar.z, gz, tar.gz, bz2, tar,bz2

Zadanie3.

Stworzyć alias dla polecenia ze składnią do kompresji plików do formatu tar.bz2

Zadanie4.

Stworzyć alias dla polecenia ze składnią do kompresji plików do formatu tar.bz2

Zadanie5.

Stworzyć alias dla polecenia znajdującego pliki kończące się .mp3