Lekcja 4
Edycja plików tekstowych
Celem zajęć jest zapoznanie słuchaczy z możliwością tworzenia i edycji plików tekstowych, łączenia komend w potok i przeadresowaniem strumieni wejściowych i wyjściowych.
Przeadresowanie wejścia/wyjścia
Proces mający wykonać pewne działanie na pliku musi go najpierw otworzyć. Otwarcie pliku powoduje przyporządkowanie plikowi liczby całkowitej z przedziału 0-19, nazywanej deskryptorem pliku. Każdemu procesowi w chwili uruchamiania system przypisuje automatycznie pierwsze trzy deskryptory na strumień wejściowy, wyjściowy oraz diagnostyczny:
0 (stdin - standard input file) - standardowy strumień wejściowy domyślnie przypisany do klawiatury;
1 (stdout - standard output file) - standardowy strumień wyjściowy domyślnie przypisany do ekranu terminala;
2 (stderr - standard error file) - standardowy strumień diagnostyczny, który służy do wyprowadzania komunikatów o błędach, domyślnie przypisany do ekranu terminala.
Większość programów oczekuje danych ze standardowego strumienia wejściowego i wypisuje dane do standardowego strumienia wyjściowego. Użytkownik nie musi więc podawać skąd pobierać i dokąd wysyłać informacje.
Przeadresowywanie wejścia/wyjścia polega na zamianie standardowych urządzeń wprowadzania i wyprowadzania informacji na inne. Można tego dokonać za pomocą następujących operatorów przeadresowywania:
< plik |
Standardowe wejście jest przeniesione z klawiatury na plik, dane będą pobierane nie z klawiatury a z określonego pliku |
> plik |
Standardowe wyjście jest przeniesione z ekranu do pliku, dane nie będą wyświetlane na ekranie a kierowane do pliku. Jeżeli plik o podanej nazwie istniał wcześnie jego zawartość zostaje skasowana. |
>> plik |
Standardowe wyjście jest przeniesione z ekranu do pliku. Jeżeli plik istniał wcześniej dane zostaną do niego dopisane, jeżeli nie istniał zostanie założony. |
2> plik |
Standardowe wyjście diagnostyczne jest przeniesione z ekrany do pliku, komunikaty o błędach nie będą wyświetlane na ekranie a kierowane do określonego pliku. |
> plik 2>&1 |
Połączenie standardowego wyjścia i standardowego wyjścia diagnostycznego w jednym pliku |
Komenda ls wyświetla informacje dp standardowego strumienia wyjściowego czyli ekranu. Jeżeli informacje te chcemy zapisać do pliku o nazwie moje_pliki musimy przeadresować standardowe wyjście poleceniem
ls > moje_pliki
jeżeli do pliku moje_pliki chcemy dopisać zawartość katalogu /dane , zrobimy to następująco
ls /dane >> moje_pliki
Filtry
Filtrem nazywa się polecenie, które pobiera dane ze standardowego wejścia, przetwarza je i wyprowadza wyniki na standardowe wyjście. Jeżeli wystąpią błędy, są przesyłane do wyjścia diagnostycznego.
Najprostszym filtrem w Unixie jest komenda cat. Nie zmienia ona danych, pobiera je jedynie ze standardowego wejścia i odtwarza na standardowym wyjściu. Rozpatrzmy kilka przypadków:
Wprowadzenie samej komendy cat powoduje oczekiwanie systemu na wprowadzanie znaków ze standardowego wejścia czyli klawiatury. Po zatwierdzenie klawiszem Enter wprowadzony tekst zostaje wyświetlony na standardowym wyjściu czyli ekranie. Po zakończeniu wpisywania klawiszami Ctrl+D kończymy działanie komendy.
Wywołanie komendy cat z nazwą pliku zmienia standardowy strumień wejściowy z klawiatury na podany plik. Umożliwia to wyświetlanie zawartości pliku na ekranie terminala.
Zmianę standardowego strumienia wyjściowego uzyskujemy korzystając z symbolu przeadresowania >. Operacja ta umożliwia założenie nowego pliku, którego zawartość wprowadzimy z klawiatury. Koniec pliku uzyskujemy klawiszami Ctrl+D.
Można zmienić jednocześnie standardowy strumień wejściowy i wyjściowy. Wpisując komendę
cat plik1 > plik2
powodujemy wczytanie danych z pliku plik1 i skierowanie ich do nowego pliku plik2.
Potoki
Potok to mechanizm umożliwiający skierowanie danych z jednego polecenia na drugie. Potok łączy standardowe wyjście pierwszego polecenia ze standardowym wejściem drugiego polecenia. Eliminuje to konieczność tworzenia pomocniczych plików tymczasowych, eliminuje możliwość wystąpienia dodatkowych błędów co przyczynia się do zwiększenia wydajności systemu. Potoki wykorzystywane są w celu połączenia poleceń shellowych, tak aby można było wykonać określone działanie. Poszczególne komendy łączymy w potok przy pomocy symbolu | (Shift + \).
Najczęściej wykorzystywanym poleceniem stosowanym w potokach jest komenda more, dzieląca informacje na części odpowiadające wielkości ekranu terminala. Polecenie
ls | more
powoduje połączenie standardowego wyjścia komendy ls ze standardowym wejściem komendy more, w wyniku czego otrzymujemy na ekranie zawartość katalogu podzieloną strona po stronie.
Edytor vi
Edytor vi (visual editor) jest jednym z najważniejszych elementów unixowego oprogramowania. Posiada duże możliwości, ale jest nieprzyjazny i ma zbyt skomplikowaną obsługę. Jego niezaprzeczalnym atutem jest to, że występuje we wszystkich odmianach Unixa i w wielu przypadkach jest jedynym dostępnym edytorem dla zwykłego użytkownika.
Sposób pracy z edytorem vi jest inny niż w przypadku edytorów z systemu DOS czy Windows. Podstawową różnicą jest oddzielenie funkcji wprowadzania tekstu, jego poprawiania oraz wydawania komend. Przełączanie się pomiędzy poszczególnymi trybami pracy przedstawia rysunek:
Po uruchomieniu edytora znajduje się on w trybie poprawiania tekstu ogólnie zwanym trybem poleceń. Umożliwia on poruszanie się po tekście, kasowanie znaków i całych linii, anulowanie ostatnich operacji kasowania. Aby przejść do trybu wpisywania tekstu należy nacisnąć jeden z klawiszy i (insert), a (append) lub o (open) umożliwiających wstawianie lub dopisanie tekstu oraz rozpoczęcie nowej linii tekstu. Aby poprawić tekst lub przesunąć kursor w inne miejsce tekstu należy przejść klawisze Escape do trybu poleceń. Tryb wydawania poleceń umożliwia wyszukiwanie ciągu (/ i ?) oraz kopiowanie linii, zapis pliku, ustawienie parametrów pracy edytora i zakończenie edycji. Wykaz najczęściej wykorzystywanych komend przedstawia tabelka:
komenda |
opis |
h |
przesunięcie kursora w lewo |
j |
przesunięcie kursora o linię w dół |
k |
przesunięcie kursora o linię do góry |
l |
przesunięcie kursora w prawo |
a |
wstawienie tekstu za kursorem |
i |
wstawienie tekstu w miejscu kursora |
o |
utworzenie nowego, pustego wiersza pod bieżącym |
r |
zastąpienie jednego znaku |
x |
kasowanie znaku |
dd |
kasowanie linii |
u |
cofnięcie ostatniej operacji |
1G |
przejście do pierwszego wiersza |
G |
przejście do ostatniego wiersza |
Esc |
przejście z trybu wprowadzania tekstu do trybu poleceń |
:w |
zapisanie danych |
:w nazwa_pliku |
zapisanie danych w nowym pliku |
:wq lub ZZ |
zakończenie pracy z zapisem danych |
:q! |
zakończenie pracy bez zapisu danych |
:set nu / nonum |
wyświetlenie / wyłączenie numeracji linii |
/ciąg |
wyszukiwanie w przód podanego ciągu |
?ciąg |
wyszukiwanie w tył podanego ciągu |
n |
wyszukiwanie kolejnego wystąpienia poszukiwanego ciągu |
:%s/ciąg1/ciąg2/g |
zastąpienie ciągu1 ciągiem2 w całym dokumencie |
Lista komend
cat - łączenie i wyświetlanie zawartości plików
cat plik(i) - wyświetla zawartość wybranego pliku
wybrane opcje:
-n - numerowanie wszystkich wyświetlanych wierszy
-nb - numerowanie wyłącznie niepustych wierszy
-v - wyświetlanie znaków kontrolnych jako znaków drukowanych
more - przeglądanie zawartości pliku
more plik -wyświetla zawartość wybranego pliku
komenda | more - dzieli na części wielkości ekranu informacje będące wynikiem działania komendy
wybrane opcje:
-c - wyświetlanie każdej strony od góry
-v -wyświetlanie znaków kontrolnych
+numer wiersza - wyświetlanie pliku od podanego wiersza
+/ciąg - wyświetlanie pliku począwszy od dwóch wierszy poprzedzających ciąg
Polecenie more wyświetla na ekranie zawartość pliku, podobnie jak cat, ale po zapełnieniu ekranu wyświetlanie jest wstrzymywane, co umożliwia dokładne zapoznanie się z tekstem.
Gdy wyświetlanie jest wstrzymane na dole ekranu wyświetlany jest napis --MORE--, a system oczekuje wyboru dalszego działania poprzez naciśnięcie odpowiedniego klawisza:
polecenie |
klawisze |
przejście do następnej linii |
Enter |
przejście do następnej strony |
Space lub f |
przejście do poprzedniej strony |
b |
przejście o pół strony do przodu |
d |
lista poleceń (help) |
h |
wyszukiwanie tekstu |
/ciąg |
wyświetlenie numeru bieżącej linii |
= |
koniec przeglądania tekstu |
q |
nl - numerowanie wierszy w pliku
nl plik - wyświetlenie zawartości pliku z ponumerowanymi liniami
cat plik | nl - wyświetlenie zawartości pliku z ponumerowanymi liniami
wybrane opcje:
-ba - numeruje wszystkie linie łącznie z pustymi
head - wyświetlanie początku pliku
head plik - wyświetlenie początkowych 10 linii z pliku
wybrane opcje:
-n - wyświetlenie n pierwszych linii tekstu
tail - wyświetlenie końcówki pliku
tail plik - wyświetlenie końcowych 10 linii pliku
wybrane opcje:
-n -wyświetlenie n ostatnich linii
+n -wyświetlenie końcowych wierszy od linii o numerze n
touch - zakłada nowy plik
touch plik(i) - zakłada nowy, pusty plik o podanej nazwie
paste - wyświetla pliki obok siebie, a nie jeden pod drugim
paste pliki - wyświetla sąsiadująco zawartość plików
vi - uruchamia edytor tekstów Visual Editor
vi plik - edycja pliku
view plik - otwiera plik w trybie tylko do odczytu (przeglądanie zawartości pliku)
vedit plik - wersja przyjaźniejsza edytora vi (wyświetlane opisy)
opis edytora vi w części 4.
Ćwiczenia
Nawiąż połączenie z serwerem unix.wlodkowic.pl i zaloguj się swoim nazwiskiem i hasłem (patrz lekcja wprowadzająca). System powinien wyświetlić znak zgłoszenia shella Korna - $.
Wykonaj ćwiczenia powtórzeniowe:
załóż w swoim katalogu domowym katalog dokumenty, przekopiuj do niego plik opis z katalogu /dane/teksty.
załóż jedną komendą w swoim katalogu domowym katalog programy a w nim podkatalog inne, przekopiuj do niego plik kwadrat z katalogu /dane/skrypty pod nazwą trójkąt.
przekopiuj do katalogu programy wszystkie pliki z katalogu /dane (pamiętaj o plikach ukrytych)
Wykonaj zadania z bieżącej lekcji:
wyświetl zawartość pliku opis z katalogu dokumenty
cd dokumentyႿ
cat opisႿ
plik opis jest długi i nie mieści się w całości na ekranie terminala.
sprawdź ile linii zawiera plik opis
cat - n opis Ⴟ
lub
nl opis Ⴟ
lub
cat opis | nl Ⴟ
komenda nl numeruje tylko linie z tekstem (62), opuszczając linie puste
nl -ba opis Ⴟ
lub
cat opis | nl - ba Ⴟ
teraz numerowane są wszystkie linie - ich ilość 71
wyświetl zawartość pliku opis w trybie przeglądania danych strona po stronie
more opis Ⴟ
sprawdź działanie klawiszy sterujących Spacja, Enter, b, h, =, q zgodnie z opisem w części 5
wyświetl zawartość katalogu /dane łącznie z podkatalogami w trybie przeglądania danych
ls -R /dane | more Ⴟ
wyświetl w formie długiej zawartość katalogu /dev strona po stronie z włączoną numeracją linii
ls -l /dev | nl | more Ⴟ
wyświetl początek pliku opis z numeracją wszystkich linii, łącznie z pustymi
head opis | nl -ba Ⴟ
wyświetl 15 pierwszych linii z pliku opis
head -15 opis Ⴟ
wyswietl końcówkę pliku opis
tail opis Ⴟ
wyświetl dwadzieścia ostatnich linii pliku opis z numeracja wszystkich linii
tail -20 opis | nl -ba Ⴟ
wyświetl z pliku opis wszystkie linie od 50-tej do końca
tail +50 opis Ⴟ
załóż nowy plik o nazwie miasto
touch miasto Ⴟ
ls -l Ⴟ
sprawdź wielkość pliku, datę jego założenia
w rozdziale 1 i 2 opisany został mechanizm przeadresowywania strumienia wejściowego i wyjściowego.
prześledźmy to na przykładach z filtrem cat
Komenda cat bez parametrów pobiera dane ze standardowego źródła i wysyła je do standardowego wyjścia. Wpisz komendę cat, wprowadź dowolny napis i zatwierdź Enterem - tekst pojawi się ponownie na ekranie. Zakończ działanie komendy klawiszami Ctrl+D.
klawiatura > cat > ekran
cat Ⴟ
xfg gxdhg xghgh gh Ⴟ
xfg gxdhg xghgh gh
Ctrl + D
napis wprowadzony z klawiatury pojawia się powtórzony na ekranie
Standardowe wejście zmienimy wpisując komendę cat z nazwą pliku. Wyświetl zawartość pliku opis. Dane pobrane z pliku opis pojawiają się na ekranie.
plik opis > cat > ekran
cat opis Ⴟ
na ekranie wyświetlana jest zawartość pliku opis
Możemy również przeadresować standardowe wyjście komendy cat przy pomocy symbolu >. Załóż nowy plik o nazwie imie, wpisz w nim Swoje imię i zakoncz komendę.
klawiatura > cat > plik imie
cat > imie Ⴟ
Andrzej Ⴟ
Ctrl + D
ls -l Ⴟ
cat imie Ⴟ
powstał nowy plik o nazwie imie zawierający Twoje imię
Komenda cat umożliwia jednoczesną zmianę strumienia wejściowego i wyjściowego. Powiel zawartość pliku imię w pliku nazwisko.
plik imie > cat > plik nazwisko
cat imie > nazwisko Ⴟ
ls -l Ⴟ
cat nazwisko
plik nazwisko ma identyczna zawartość jak plik imie
Można także dopisać dane do już istniejącego pliku. Dopisz do pliku nazwisko Swoje nazwisko.
klawiatura > cat >> plik nazwisko
cat >> nazwisko Ⴟ
Kowalski Ⴟ
Ctrl + D
ls -l
cat nazwisko Ⴟ
do pliku nazwisko dopisane zostało Twoje nazwisko
zapisz kalendarz na miesiąc październik w pliku o nazwie 10
cal 10 2000 > 10 Ⴟ
ls -l Ⴟ
cat 10 Ⴟ
zapisz kalendarz na miesiąc listopad w pliku o nazwie 11
cal 11 2000 > 11 Ⴟ
ls -l Ⴟ
cat 11 Ⴟ
połącz te dwa pliki w jeden nazwany 4kwartal
cat 10 11 > 4kwartal Ⴟ
ls -l Ⴟ
cat 4kwartał Ⴟ
dopisz do tego pliku kalendarz na miesiąc grudzień
cal 12 2000 >> 4kwartal Ⴟ
cat 4kwartał Ⴟ
połącz pliki 10 i 11sąsiadująco (jeden obok drugiego) do pliku 4kw
paste 10 11 > 4kw Ⴟ
cat 4kw Ⴟ
dołacz do tego pliku kalendarz na miesiąc grudzień aby był usytuowany obok dwóch pozostałych
cal 12 2000 > 12 Ⴟ
paste 10 11 12 > 4kw Ⴟ
inne metody spowodują wykasowanie zawartości pliki 4kw lub dołączenie pod spodem a nie obok
poddaj edycji pusty plik miasto, sprawdź działanie klawiszy specjalnych opisanych w rozdziale 4
vi miasto Ⴟ
klawiszem [i] przejdź do trybu wprowadzania tekstu
wpisz kilka linijek tekstu
klawiszem [Esc] przejdź do trybu poprawiania tekstu
poruszaj się po tekście klawiszami [h], [j], [k], [l]
wykasuj kilka znaków klawiszem [x]
wykasuj całą linię [d][d]
cofnij ostatnią operację klawiszem [u]
zapisz wprowadzony tekst [:] [w]
ponownie przejdź do trybu wprowadzania tekstu, tym razem w nowej linii klawiszem [o]
wpisz kilka znaków
przejdź do trybu poprawiania tekstu klawiszem [Esc]
zapisz tekst w nowym pliku wies [:] [w] wies
zakończ pracę z edytorem bez zapisywania poprawek w pliku miasto [:] [q] [!]
sprawdź pliki miasto i wies
cat miasto Ⴟ
cat wies Ⴟ
wyświetl zawartość pliku slownik z katalogu programy i znajdź w nim 4 błędy
cd ~/programy Ⴟ
cat slownik Ⴟ
liczny -> logiczny
CPPPPU -> CPU
amięć -> Pamięć
MGX -> MMX
popraw błędy w pliku slownik i zapisz dokonane poprawki
vi slownik Ⴟ
przy pomocy klawiszy [h], [j], [k], [l] ustaw kursor w miejscu podkreślonym -litera l
liczny [a] og [Esc]
przy pomocy klawiszy [h], [j], [k], [l] ustaw kursor w miejscu podkreślonym - druga litera P
CPPPPU [x] [x] [x]
przy pomocy klawiszy [h], [j], [k], [l] ustaw kursor w miejscu podkreślonym - litera a
amięć [i] P [Esc]
przy pomocy klawiszy [h], [j], [k], [l] ustaw kursor w miejscu podkreślonym - litera G
MGX [r] M
zapisz zmiany
[:] [w] [q]
cat slownik Ⴟ
usuń katalogi dokumenty i programy z całą zawartością
cd Ⴟ
rm -r dokumenty programy - Ⴟ
ls -la Ⴟ