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, 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,
– 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
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_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