64
WYKŁAD 1, 2, 3 Wprowadzenie do budowy i działania komputera Rola systemu operacyjnego Praktyczne korzystanie z systemu UNIX/LINUX Tomasz Zieliński Katedra Telekomunikacji AGH

Wyklady 01 Komputer Unix 2012 - home.agh.edu.plhome.agh.edu.pl/~kwant/wordpress/wp-content/uploads/W1.pdf · WYKŁAD 1, 2, 3 Wprowadzenie do budowy i działania komputera Rola systemu

Embed Size (px)

Citation preview

WYKŁAD 1, 2, 3

Wprowadzenie do budowy i działania komputera Rola systemu operacyjnego

Praktyczne korzystanie z systemu UNIX/LINUX

Tomasz Zieliński

Katedra Telekomunikacji AGH

SYSTEMY INFORMATYCZNE

=====================================================

sprzęt μP + oprogramowanie + oprogramowanie komputery systemowe użytkowe elektronika informatyka „gałkologia” budowa systemy operacyjne (OS) istniejące procesora języki programowania (JP) aplikacje komputera znajomość OS Unix nasze programy „sprzętu” Język C/C++ algorytmika

wykorzystanie OS i JP

KOMPUTER, CZYLI KRÓLESTWO BITÓW (1)

napięcie

„0” „1”

< 0,7 V > 2,7 V

NIE TAK

sekwencje bitów: - liczby: stałoprzecinkowe zmiennoprzecinkowe dane obliczeniowe (wejście/wyjście) adresy

- znaki: alfanumeryczne (litery, cyfry, ...) sterujące (spacja, backspace, ...)

- instrukcje procesora =================================================================================================================================

bit bajt = 8 bitów słowo 16-bitowe słowo 32-bitowe słowo 64-bitowe

21 = 2 2*2*2*2*2*2*2*2=28 = 256

liczba kombinaji zer i jedynek

216 = 65 536 = 64 KB 232 = 4 294 967 296 = 4 GB 264

KOMPUTER, CZYLI KRÓLESTWO BITÓW – LICZBY (2)

----------------------------------------------------------------- graficznie

----------------------------------------------------------------- 0 1 0 0 0 1 1 0 8 bitów = 1 bajt ----------------------------------------------------------------- 27 26 25 24 23 22 21 20

128 64 32 16 8 4 2 1 wagi ----------------------------------------------------------------- 64 + 4 + 2 = 70 wynik Analogia do systemu dziesiętnego pozycyjnego, np. 123,45: 1 2 3, 4 5 = 1*100 + 2*10 + 3*1 + 4*0,1 + 5*0,01 --------------------------------------- 102 101 100 10−1 10−2 100 10 1 0,1 0,01

KOMPUTER, CZYLI KRÓLESTWO BITÓW – LICZBY (3)

binarnie dziesiętnie heksadecymalnie PRZYKŁAD 0000 0 0 0001 1 1 binarnie 0010 2 2 % 0100 0110 = 0100 0110b 0011 3 3 0100 4 4 heksadecymalnie 0101 5 5 0x 4 6 = 0x46 = 46h 0110 6 6 0111 7 7 dziesiętnie 1000 8 8 70 1001 9 9 1010 10 A 1011 11 B 1100 12 C 1101 13 D 1110 14 E 1111 15 F

KOMPUTER, CZYLI KRÓLESTWO BITÓW – ZNAKI (4)

0 1 0 0 0 1 1 0 = 0x46 = 70 aktualna wartość 0 0 0 0 0 0 0 0 = 0x00 = 0 minimalna wartość na 8 bitach ...

1 1 1 1 1 1 1 1 = 0xFF = 255 maksymalna wartość na 8 bitach

Kod ASCII (7-bitowe kody znaków alfanumerycznych) 0x41 = 65 = A 0x20 spacja 0x42 = 66 = B 0x43 = 67 = C 0x7B { 0x44 = 68 = D 0x7D } ... 0x5A = 90 = Z 0x2A * ... 0x2B + 0x61 = 97 = a 0x62 = 98 = b 0x46 = F Znaki specjalne w DOS 0x63 = 99 = c Linux: biblioteka ncurces 0x64 = 100 = d ... 0x7A = 122 = z

OxC9

OxBA

OxCC

OxC8

Standard ASCII 7-bitowy: liczba ↔ znak (5)

ASCII: American Standard Code for Information Interchange

7-bitowy kod

dodatkowy bit w bajcie używany do kodowania różnych rozszerzeń ASCII

ISO 8859-2: kodowanie polskich znaków

Rozszerzony standard ASCII 8-bitowy – w PC DOS (6)

Tablica znaków ASCII: unicode UTF-8 (7)

Unicode zestaw znaków obejmujący wszystkie możliwe zestawy znaków na świecie Warianty: UTF-32/UCS-4, UTF-16, UTF-8, ... UTF-8: najbardziej rozpowszechniony Unicode - kodowanie znaków o zmiennej długości: sekwencje 1, 2, 3 bajtowe - kompatybilność – każdy znak ASCII (7-bitowy) jest znakiem UTF-8 - domyślny standard dla XML np.: XHTML - wady: ilość bajtów != ilość znaków

0x41 = 65 = A 0xE1 8C 80 = ETHIOPIC SYLLABLE JA

0x42 = 66 = B 0xE3 8C 95 = SQUARE KIROGURAMU

0x43 = 67 = C

(...)

0xC3 B3 = ó

0xC4 84 = Ą

DZIAŁANIE UKŁADU MIKROPROCESOROWEGO

μP = mikroprocesor

X A B

Y

pamięć

adres

dane

PC

Arithmetic Logic Unit

ALU

sterowanie

move A,[X] ; A ← pamięć(adr w X) move B,[Y] ; B ← pamięć(adr w Y) add A, B ; A = A+B move [X], A ; pamięć(adr=X) ← A

Język asembler

dane rozkaz rozkaz rozkaz

dane dane dane

we/wy we/wy

PC

IR

IR = Instruction RegisterPC = Program Counter

WYKORZYSTANIE PAMIĘCI W KOMPUTERZE

Start systemu operacyjnego DOS Mapa wykorzystania pamięci ============================================= ======================================= START

Prog BOOTSTRAP

COMMAND.COM (z FD, HD, ..) → pamięć RAM

Zbiór CONFIG.SYS → zmienne systemowe

Co dalej? Polecenia użytkownika do systemu operacyjnego

Wykonanie komend ze zbioru AUTOEXEC.BAT

BIOS

Pamięć EROM (Read)

Pamięć RAM (Read/Write)

Command.com

Wolna pamięć

operacyjna na programy

Program A

Dyski FD / HD

Program B

Polecenia OS

Stos

Obsługa przerwań

Pamięć grafiki

Urządzenia we/wy

PLIKI KONFIGURACYJNE W SYSTEMIE DOS

CONFIG.SYS AUTOEXEC.BAT FILES=30 BUFFERS=50 STACKS=9,256 SHELL=c:\command.com /E:1024 /P LASTDRIVE=H DEVICE=C:\DOS\SETVER.EXE DEVICE=C:\DOS\HIMEM.SYS DEVICE=C:\DOS\RAMDRIVE.SYS 8096 512 /E DOS=HIGH REM DOS=HIGH,UMB

@ECHO OFF PROMPT $p$g PATH C:\;C:\DOS;C:\NC;C:\EDIT; APPEND C:\EDIT

SET LIB=C:\FORT\LIB SET INCLUDE=C:\FORT\INCLUDE SET TMP=E:\

REM C:\WINDOWS\SMARTDRV.EXE

CLS TYPE WELCOME.TXT PAUSE CLS

mode mono mode con rate=32 delay=1 c:\mouse\mouse.com /R4 c: nc

MAPA PAMIĘCI W KOMPUTERZE PC OBECNIE (x86)

źródło: http://software.intel.com/en-us/articles/introduction-to-pc-architecture/

ADRESOWANIE PAMIĘCI W KOMPUTERZE PC (x86)

Real mode: • adres w programie = adres fizyczny RAM • ograniczenie adresowania 2^20 bits • obecnie tylko BIOS Protected mode: • adres w programie != adresu fizycznego RAM • mapowanie adresu przez MMU (Memory Management Unit) • pamięć wirtualna Dygresja: są też inne procesory. • Od 2008 roku sprzedano 10 mld procesorów ARM. • Obecnie sprzedaje się około 5 mld ARM rocznie.

MAPA PAMIĘCI W KOMPUTERZE (x86) – pamięć wirtualna

• współczesne systemy podmieniają (mapują) fragmenty pamięci programu na pamięć fizyczną

• zasoby sprzętowe są wymagane dla pamięci wirtualnej (RAM na HDD)

• multi-tasking (różne programy używają tego samego adresu, mapowanego w innym miejscu fizycznej pamięci)

START SYSTEMU OPERACYJNEGO (LINUX)

START SYSTEMU OPERACYJNEGO (LINUX) przykładowy skrypt /etc/init/rc-sysinit.conf kolejność uruchamiania procesów

# rc - System V runlevel compatibility # # This task runs the old System V-style rc # script when changing between runlevels. description "System V runlevel compatibility" author "Scott James Remnant <[email protected]>" emits deconfiguring-networking emits unmounted-remote-filesystems start on runlevel [0123456] stop on runlevel [!$RUNLEVEL] export RUNLEVEL export PREVLEVEL console output env INIT_VERBOSE task exec /etc/init.d/rc $RUNLEVEL

OBSŁUGA URZĄDZEŃ WEJŚCIA/WYJŚCIA

μP

Pamięć urządzeń

wejścia/wyjścia

Rozkaz

Status

Dana wyjściowaDana wejściowa

μC

Bufor na dane

Twardy dysk silnik krokowy głowice płyty/talerze scieżki/cylindry

OGÓLNIE SCHEMAT KOMPUTERA I ŁĄCZENIA KOMPUTERÓW

Pamięć

We/WyμP 1 We/Wy μP 2

Pamięć

Terminal PC Windows PuTTY program

Serwer Unix pico - edytor gcc - kompilator C

PRZYKŁAD

Przykład programowania w sieci komputerowej: PuTTY student.uci.agh.edu.pl połączenie z serwerem UCI-AGH login: ? logowanie: nazwa studenta na serwerze password: ? hasło studenta touch prog1.c utworzenie pliku prog1.c (PUSTY!) pico prog1.c edycja pliku: CTRL+O = zapis, CTRL+X = wyjście gcc prog1.c kompilowanie i linkowanie prog1.c do prog1.out

ZBIORY DYSKOWE, KATALOGI A SYSTEM OPERACYJNY

program 1

program 2

zbiór 1

zbiór 2

katalog A

katalog B

KATALOGGŁÓWNY

program 3

prog1.exe

prog2.com

prog3.bat

zb1.dat, zb1.txt

zb2.doc, zb2.par

DOS Windows

program 4

program 5

zbiór 3

katalog C

program 6

zbiór 4

zbiór 5

katalog D

katalog E

prog1

prog2

prog3

zb1

zb2

UnixLinux

atrybuty zbioru określają jego rodzaj

/home

/home/prog1

~/prog2

~/zb1

~/zb2

~/prog3

/home/katB/prog6

/home/katB/zb4

/home/katB/zb5

C:\

C:\prog1.exe

C:\katA\prog4.exe

prywatny katalog użytkownika

UNIX − OPERACJE NA KATALOGACH I ZBIORACH DYSKOWYCH =======================================PRZYKŁADY UŻYCIA======== pwd – print working directory pwd ls – list (files, directories) ls /home, ls /home/katA mkdir – make directory mkdir /home/katX, mkdir ~/katY rmdir – remove directory rmdir /home/katX, rmdir ~/katY cd – change directory cd /home, cd /home/katA, cd ../.. touch – set time of a file touch /home/katA/katC/prog

create empty file if file does not exist rm – remove file(s) rm /home/katA/katC/prog cp – copy file(s) cp plik1 plik2, cp *.c?? *.cpp mv – move file(s) mv ~/plik1 ~/katA/plik2 cat – concatenate file(s) cat plik1 plik2 > plik3 chmod .. – change mode (of file) chmod a=rwx plik (read, write, exec) man – manual (opis) man chmod (Q = wyjście!!!) ================================================================ . – aktualny katalog ~ - prywatny katalog użytkownika .. – katalog jeden poziom wyżej * - dowolna sekwencja znaków ../.. – katalog dwa poziomy wyżej ? – dowolny znak

UNIX − EDYTOWANIE I KOMPILOWANIE PROGRAMU touch – file creator gcc – general C compiler pico – editor g++ – general C++ compiler gdb – general debugger ================================================================ touch prog1.c utwórz plik prog1.c (PUSTY!) pico prog1.c CTRL+O = zapis CTRL+X = wyjście gcc prog1.c –o prog1.exe kompilowanie i linkowanie do prog1.exe gcc –c prog1.c tylko kompilowanie do prog1.o gcc –l prog1.o prog2.o –o prog12 tylko linkowanie programów prog1.o

i prog2.o do programu prog12 ================================================================

Tryb graficzny (X11, środowisko Gnome/KDE) gedit – edytor tekstowy Gnome kdevelop – IDE C/C++ (biblioteka Qt) kate – edytor tekstowy KDE eclipse – uniwersalne IDE (C/Java/..)

Więcej o systemie UNIX/LINUX i praktycznym korzystaniu z niego

OGÓLNA CHARAKTERYSTYKA SYSTEMU UNIX/LINUX Historia UNIX-a w wielkim skrócie: 1964 – początki systemu Multics (Multiplexed Information and Computing Service) 1969 – pierwszy system Unix napisana w asemblerze w ośrodku Bell Labs AT&T 1973 – przepisanie kodu Unixa na język C przez D. Ritchie i B. Kernighana Lata 80 – rozwój technologii: TCP/IP (Transmission Control Protocol / Internet Protocol), POSIX (Portable Operating System Interface), GNU OS (GNU is Not Unix): Compiler Collection (gcc), Binary Utilities (binutils), bash, glibc, coreutils 1991 – Linus Torvalds, fiński student, tworzy jadro systemu operacyjnego Linux 1991-... – powstanie i rozwój wielu „klonów” Unixa, społeczność Open Source Główne cechy sytemu:

– Wielozadaniowość i wielodostępność – Skalowalność – Stabilność – Przenośność kodu – Dostępność darmowego oprogramowania (Linux)

Wybrani przedstawiciele rodziny unixowej:

Jądra: Linux, Hurd, NetBSD, FreeBSD, Minix, openSolaris, …

Dystrybucje: Ubuntu, RedHat, Suse Novell, Debian, Knoppix, …

Linux FreeBSD

WARSTWY SYSTEMU UNIX/LINUX • System Unix/Linux charakteryzuje architektura warstwowa

• Głównym elementem budowy systemu jest jądro (KERNEL)

• Z zewnątrz otaczają je warstwy zewnętrzne zapewniające komunikację

z użytkownikiem oraz sprzętem

Wizualna prezentacja warstw systemu

Unix/Linux

POWŁOKI SYSTEMU UNIX/LINUX

Powłoka (ang. shell) jest interfejsem między użytkownikiem a jądrem systemu operacyjnego. Jej podstawową funkcją jest interpretacja i wykonywanie poleceń użytkownika.

Podstawowe zadania: Standardowe powłoki unixowe: Ich nowsze odpowiedniki: ♦ Na systemach linuksowych popularną powłoka jest bash. ♦ Zawiera ona wszystkie komendy powłoki sh + dodatkowe funkcje

(uzupełnianie składni, historia poleceń i wiele innych ułatwień). ♦ Zmiany powłoki można dokonać poleceniem $ chsh

– interpretowanie i wykonywanie poleceń – automatyzacja różnych zadań za pomocą skryptów

powłoka Bourne’a (sh) powłoka bash (Bourne-Again Shell) powłoka Korna (ksh) powłoka zsh (Z shell) powłoka C (csh) powłoka tcsh (TC-Shell)

PORÓWNANIE POWŁOK BASH i TCSH

BASH: • najpopularniejsza powłoka w systemach unixowych • charakteryzuje się łatwością obsłudze • kompatybilna z powłoką sh • łączy cechy powłoki Korn (ksh) oraz C (csh) • specyficzne zmienne powłoki

TCSH: • druga co do popularności powłoka w systemach unixowych • rozszerzona wersja powłoki C (csh) • składnia skryptów przypomina język programowania C • posiada mechanizm korekcji pisowni • specyficzne zmienne powłoki

Główne różnice dotyczą skryptów.

POLECENIA SYSTEMU (1) Ogólny schemat poleceń:

znak zachęty $ nazwa_polecenia [opcje, argumenty, …]

Opcje literowe poprzedza się znakiem „-”, a słowne znakami „--” Każde polecenie posiada zwykle pomoc: „-h” lub „--help” Dodatkowe informacje dostarcza manual: $ man nazwa Logowanie i zmiana hasła dostępu:

$ login [nazwa] – Utwórz nową sesję pracy z systemem; Parametr nazwa musi odpowiadać istniejącemu kontu użytkownika (lub administratora). Użytkownik pytany jest o hasło, jeśli takie istnieje.

$ passwd [param] – Zmień hasło użytkownika. Brak parametrów powoduje zmianę hasła aktualnie zalogowanego użytkownika.

$ logout, exit – Zakończenie sesji pracy z systemem (Ctrl+D).

Przykład zakładania konta użytkownika:

$ useradd nazwa_konta - utwórz konto o nazwie „nazwa_konta” $ passwd nazwa_konta - utwórz hasło dla tego konta $ login nazwa_konta - zaloguj się na nie

POLECENIA SYSTEMU (2)

Wyświetlanie podstawowych informacji:

$ who [opcje] [plik|arg1|arg2] - pokaż kto jest aktualnie zalogowany

$ uname [opcje] ... - wyświetl informacje systemowe

$ w – pokaż aktualnie zalogowanych użytkowników i ich procesy

Przykłady:

Testowanie połączeń sieciowych:

$ ping [opcje] [adres_hosta] - testuj łącze między komputerami

$ traceroute [adres_hosta] - zbadaj trasę pakietów w sieci

Przykłady:

$ who, $ w - pokaż zalogowanych użytkowników $ uname –o -v - nazwę systemu operacyjnego (-o) i wyświetl wersję jądra (-v)

$ ping –c 3 adres - wyślij dokładnie 3 żądania echa (np. podany adres IP) $ traceroute adres - pokaż trasę śledzenia pakietów z podanego adresu

DOSTĘP ZDALNY

Polecenie związane z dostępem zdalnym:

$ telnet [host] - połącz ze zdalnym serwerem korzystając z protokołu zdalnej sesji telnet. Pozwala to na prace np. poprzez sieć lokalną lub Internet, na odległym serwerze jak na własnym komputerze.

$ rlogin [opcje] [host] – zaloguj się na zdalnej maszynie

$ rsh [opcje][host] [komenda] – wykonaj komendę na zdalnym hoście

$ ssh [opcje][host] [komenda] – jak wyżej, ale z szyfrowaniem danych

Przykłady:

$ telnet host1 - zaloguj się zdalnie na host1 $ rlogin host1 - zaloguj się zdalnie na host1 $ rsh host1 df - sprawdź ilość wolnego miejsca na host1 $ ssh host1 df - jak wyżej, ale teraz bezpiecznie!

Obecnie stosuje się jedynie ostatnią komendę: ssh (ang. secure shell), dzięki której transmisja danych jest zaszyfrowana a tym samym znacznie bezpieczniejsza.

KORZYSTANIE Z DOKUMENTACJI Większość poleceń w systemie posiada pomoc w postaci dokumentacji umieszczo-nej w instrukcji obsługi systemu (w manualu). Dostęp do tych informacji uzyskuje się za pomocą komend: $ man [-opcje] temat $ whatis polecenie $ info temat $ apropos [szukany_wyraz ... ] Czasem dla jednego polecenia dostępnych jest kilka różnych stron jak np. printf(3). Dostęp do nich uzyskuje się za pomocą polecenia: $ man 3 printf

Poruszanie się w manualu:

<enter> – nowy wiersz <spacja> – nowa strona <q> – koniec

Przykłady:

$ man man $ info info $ man ls $ info vi $ man ftp $ info grep $ whatis ls $ apropos list

whatis wyszukaj i wyświetl krótki opis polecenia

whereis zlokalizuj położenie polecenia lub pliku pomocy

apropos przeszukaj opis polecenia w manualu podkątem łańcuchów

STRUKTURA KATALOGÓW

/root Katalog domowy /bin Komendy (programy) dostępne dla użytkowników /sbin, Programy administracyjne, systemowe /dev Pliki specjalne, reprezentujące urządzenia /etc Pliki konfiguracyjne systemu /tmp Katalog na pliki tymczasowe /lib Biblioteki systemowe, pliki nagłówkowe /proc Katalog specjalny, informacje systemowe /lost+found Pliki odzyskane podczas sprawdzania spójności

systemu plików. /usr/local Dodatkowe oprogramowanie systemowe

/var Zmieniające sie pliki systemowe (logi, kolejki, itp.) /home Katalogi kont użytkowników (wyjątek: /root)

ZARZĄDZANIE SYSTEMEM PLIKÓW Podstawowe komendy:

Komenda Unix Opis MS DOS

ls [opcje] [pliki] Wyświetl zawartość katalogu $ ls -al /home > dir

cd [dir_name] Zmień bieżący katalog $ cd .. $ cd ~ > cd

mkdir [dir_name] rmdir [dir_name]

Utwórz/usuń pusty katalog $ mkdir my_dir > md, > rd

cp [file1] [file2] mv [file1] [file2]

Kopiuj/przesuń plik $ cp src dest > copy, > move

rm [file] Usuń plik $ rm file_name > del

rm –rf [dir_name] Usuń katalog wraz z plikami $ rm -rf my_dir > deltree

touch [file_name] Utwórz nowy, pusty plik $ touch file1 -

ln [opcje] [s] [d] Utwórz dowiązanie symboliczne$ ln –s src dest -

KATEGORIE UŻYTKOWNIKÓW I PRAWA DOSTĘPU

Każdy plik oraz katalog w systemach Unix/Linux ma określonego właściciela, który może wykonywać na nim operacje, określone prawami dostępu. Linux standardowo nie używa ACL-a (Access Control List), czyli możliwości dowolnego zdefiniowania uprawnień dla każdego użytkownika osobno do pojedynczego zasobu. Kategorie użytkowników: Trzy rodzaje praw dostępu: Kod Plik Katalog r (read) Prawo do odczytu pliku Prawo do odczytu zawartości katalogu

w (write) Prawo do zmiany pliku Prawo do zmiany zawartości katalogu

x (execute) Prawo do wykonania pliku Prawo do wejścia do katalogu

Atrybuty zbioru można wyświetlić komendą:

$ ls –l nazwa

all wszyscy użytkownicy user użytkownik, właściciel plikugroup grupy właściciela pliku other pozostali użytkownicy

ATRYBUTY ZBIORÓW (posiadanie, wyświetlanie)

execute

write

read

-rwxrw-r-- 1 user group ... nazwa_pliku g ou

user

group

other

typ

- zwykły plik d katalog czyli lista plików l dowiązanie symboliczne c urządzenie znakowe (np. modem) b urządzenie blokowe (np. dysk) p potok nazwany (pipe) s gniazdo (socket)

Dowiązanie symboliczne Specjalny rodzaj pliku, którywskazuje za pomocą nazwy nainny plik lub katalog. Może być„miękkie” lub „twarde”. W systemach Microsoft Windowsprzybliżoną rolę co dowiązaniesymboliczne pełni tzw. „skrót”(ang. shortcut).

liczba dowiązań symbolicznych

ZARZĄDZANIE PRAWAMI DOSTĘPU

Polecenia do zmiany praw dostępu:

chmod – Polecenie zamiany zezwoleń systemowych do pliku chown – Polecenie zmiany właściciela pliku chgrp – Polecenie zmiany przypisania pliku do grupy Sposób 1 nadawania praw (symboliczny):

$ chmod [kto] operator [zezwolenie][,...] nazwa_pliku

Sposób 2 nadawania praw (ósemkowy):

$ chmod kod_ósemkowy nazwa_pliku

operator: + dodaj zezwolenie – odbierz zezwolenie= zastąp zezwolenie

kto: a wszyscy u użytkownik g grupa o inni

zezwolenie: r odczyt w zapis x wykonanie

kod_ósemkowy – suma kodów ósemkowych w grupach:user r=400 w=200 x=100 group r=040 w=020 x=010 others r=004 w=002 x=001

Przykłady: Wyniki:

$ chmod 777 plik1 -rwxrwxrwx $ chmod 641 plik2 -rw-r----x $ chmod 555 plik3 –r-xr-xr-x

Przykłady:

$ chmod a+w plik1 $ chmod u-w plik2 $ chmod u=rw,o=r plik3

ARCHIWIZACJA PLIKÓW Tradycyjnie w systemach unixowych istnieje komenda do zarządzania archiwami. Pierwotnie służyła ona do zapisu danych na taśmie magnetycznej. Stąd wzięła się też jej nazwa. Komenda archiwizacji: tar (Tape ARchive) Składnia: $ tar [-opcje][…] Przykłady użycia: Utworzenie pliku tar: $ tar -cvf nazwa.tar plik1 plik2 Dodanie pliku do istniejącego arch.: $ tar -rvf nazwa.tar plik_dodawany Rozpakowanie zawartości pliku tar: $ tar -xvf nazwa_pliku.tar Wypisanie zawartości: $ tar -tf nazwa_pliku.tar

-c - tworzy nowe archiwum (create) -r - dopisuje pliki na końcu archiwum -u - zapisuje nowe lub zmienione pliki (update) -x - wyodrębnia pliki z archiwum (extract) -f nazwa - pozwala podać nazwę archiwum -t - wypisuje zawartość archiwum -v - informuje o wykonywanych operacjach (verbose)

KOMPRESJA PLIKÓW

Komendy kompresji plików: gzip, bzip2 Składnia: $ gzip [-opcje][plik]

$ bzip2 [-opcje][plik] Przykłady: Analogicznie dla bzip2, z tą różnicą, że kompresji dokonuje się z opcją -z, natomiast dekompresji z opcją –d. Komenda tar pozwala na dokonywanie również kompresji, po dodaniu dodatkowych opcji: -z kompresja/dekompresja archiwum programem gzip -j kompresja/dekompresja archiwum programem bzip2 Przykład: $ tar -czvf nazwa.tar plik1 plik2

$ gzip nazwa - kompresuj podany w nazwie plik $ gzip –d nazwa - dekompresuj podany w nazwie plik

$ gzip –r * - kompresuj wszystkie pliki w bieżącym katalogu i podkatalogach $ gzip –dr * - dekompresuj wszystkie pliki w bieżącym katalogu i podkatalogach

oddzielne zbiory wynikowe

STRUMIENIE I POTOKI Rodzaje strumieni:

Operatory przekierowania strumienia: Przykład: $ date > data_czas - zapis do pliku wydruku daty i czasu Potok – umożliwiają przesyłanie danych z jednego polecenia do drugiego. Operatorem potoku jest znak | (pionowa kreska, Shift+\) Przykład: $ ls –l /dev | more - stronicowanie wydruku ls –l /dev

1) Wejściowy (0, domyślnie klawiatura, stdin) 2) Wyjściowy (1, domyślnie ekran, stdout) 3) Błędów (2, również domyślnie ekran, stderr)

> przekierowanie strumienia wyjściowego z nadpisaniem (np. do pliku) >> przekierowanie strumienia wyjściowego z dopisaniem na końcu < przekierowanie strumienia wejściowego z nadpisaniem (np. do bufora) << przekierowanie strumienia wejściowego z dopisaniem na końcu

PRZETWARZANIE TREŚCI Pomocne komendy podczas przetwarzania plików:

$ cat [parametry] [plik] Polecenie służy do łączenie plików oraz wyświetlanie ich zawartości

Przykład kopiowania pliku: cat plik1 plik2 > plik3

$ cut [parametry] [plik] Polecenie „wycina” interesujący nas fragment tekstu z podanego pliku i go wyświetla (pokazuje) na ekranie

Wybrane opcje: -c lista – znak np. –c1-5 – pierwsze 5 znaków w każdej linii -b lista – bajt np. –b1-5 – pierwsze 5 bajtów w każdej linii -d delim – specjalny znak (domyślnie tab) np. -d :

Przykład: cut –c 4-10 plik1 – pokaż znaki 4-10 w każdej linii cut -d : -f 5- plik1 – od piątego słowa w każdej linii, delim = :

KOMENDA/JĘZYK PROGRAMOWANIA AWK awk służy do przetwarzanie treści plików. Nazwa pochodzi od nazwisk jego autorów: „Aho, Weinberger, & Kernighan”. Jako komenda może wykonywać proste operacje na tekście. Natomiast jako język, jest potężnym narzędziem do wykonywanie złożonych operacji edycyjnych. Program napisany w AWK składa się z bloków, których składnia to: Proste programy można wykonywać bezpośrednio z linii poleceń: Przykład prostego zastosowania:

warunek { polecenia }

awk ‘warunek {polecenie}’ plik

awk ‘/user/ {print}’ /etc/passwd – wyświetl linie pliku /etc/passwd, zawierające wyrażenie regularne user (musi być między znakami /)

WYSZUKIWANIE Komenda find – przeszukiwanie struktury katalogów

Składnia: $ find gdzie kryterium akcja

Program grep – (general regular expression print) bardzo rozbudowany program, który wyświetla linie pasujące (lub nie) do określonego wzorca, znajdujące się w podanych plikach.

Składnia: $ grep [opcje] wyrażenie_regularne [pliki]

gdzie Określa gdzie zacząć wyszukiwanie (domyślnie bieżący katalog) kryterium Kryterium wyszukiwania (domyślnie wszystkie pliki) akcja Co zrobić w wynikiem wyszukiwania (domyślnie -print)

Przykłady:

$ find /etc –name passwd$ find /home –name *.c

Przykłady: $ grep ‘int’ /home Wypisz linie zawierające wzorzec ‘int’ $ grep –v ‘int’ /home Wypisz linie nie zawierające wzorca ‘int’ $ grep –c ‘int’ /home Wypisz tylko nazwy plików i liczby linii ze wzorcem ‘int’

Inne: –name nazwa –user nazwa –group nazwa

WYRAŻENIA REGULARNE (1)

Wyrażenia regularne (także w Perlu, Pythonie (Google), POSIX-ie) - narzędzie słu-żącym do dopasowywania wzorców wyszukiwania i filtrowania informacji w plikach.

Najczęściej wykorzystuj się je wspólnie ze specyficznymi komendami np. find i grep (patrz powyżej: *.c w find oraz 'int' w grep).

Operator Opis Przykład Pasuje Nie pasuje | Operator OR ‘a|b|c’ ‘abc’,‘bc’ ‘de’

. Dowolny pojedynczy znak ‘plik.a’ ‘plik1a’ ‘plika’

^ Początek linii ‘^plik’ ‘plik1a’‘plikaa12’ ‘replika’

$ Koniec linii ‘plik$’ ‘nowyplik’ ‘plik1’

* Zero lub więcej wystąpień poprzedniego znaku ‘plik.*a’

‘plika’‘plikxxa’ ‘plikxyza’

‘plikb’

\ Następny znak nie jest traktowany jako specjalny

‘plik\.’ ‘plik.24’ ‘plik2’

WYRAŻENIA REGULARNE (2)

Operator Opis Przykład Pasuje Nie pasuje

[...] Dowolny znak (jeden) z podanej listy

‘[Pp]lik’ ‘Plik’ ‘plik’ ‘klik’

[^...] Dowolny znak nie występujący na liście ‘[^Pp]lik’ ‘klik’ ‘plik’

[\b] Łańcuch na krawędzi słowa ‘\bplik’ ‘pliknew’ ‘newplika’

\(...\) Określenie podwyrażenia ‘\(plik\)’ ‘plik’ -

[\n] Odwołanie do n-tego podwyrażenia (n to liczy od 1 do 9)

\(plik\).*\1 plikxplikplikxyplik plikxklik

\< ..\> Odwołanie do całego słowa ‘\<plik\>’ ‘plik’ ‘pliki’

EDYTOR TEKSTU Vi(M)

Edytor vi – najbardziej znany unixowy edytor tekstu, stworzony przez Billa Joya z Sun Microsystems. Przez jednych uwielbiany przez innych - znienawidzony!

Tryby pracy: Tryb Poleceń (Command Mode) Tryb Wstawiania (Input Mode).

Przejście do Trybu Poleceń: ESC

Przejście do Trybu Wstawiania: i, I, a, A, r, R, o, O (insert, append, replace, new line)

Uruchamianie: $ vi nazwa_pliku

Zakończenie pracy i zapis do pliku: ZZ – zapisz do pliku i wyjdź na konsolę :q! – zakończ bez zapisu do pliku :wq – zakończ z zapisem do pliku

Kasowanie tekstu (x znaków,dd linii): x, X, dd, [n]x, [n]X (usuwa n znaków)

Poruszanie się w oknie edycji: h, j, k, l (lewo, dół, góra, prawo) Ctrl-f, Ctrl-b (cały ekran – przód, tył) Ctrl-u, Ctrl-d (pół ekranu – góra, dół) Kopiowanie tekstu: [n]yw (kopiuj do bufora n słów) [n]yy (kopiuj do bufora n linii) p, P (wklejaj z bufora przed lub za) Wyszukiwanie tekstu: :/wzór, :?wzór, (wyszukaj w dół, górę) n, N (powtórz ostatnie wyszukiwanie) Polecana literatura: $ man vi $ vimtutor (krótki kurs vi(M))

INNE EDYTORY (PICO, NANO, JOE …)

Edytory bardziej przyjazne dla początkujących użytkowników. Składnik pakietu do zarządzania pocztą elektroniczną PINE w systemie UNIX. Podstawowe polecenia: Poruszanie się w edytorze: Zaznaczanie, wycinanie, wklejanie: Polecana literatura:

Ctrl-^ – przejdź do trybu zaznaczania $ man pico Ctrl-k – wytnij zaznaczony fragment $ man nano Ctrl-u – wklej zaznaczony fragment $ info nano

Ctrl-g – wywołaj pomoc Ctrl-o – zapisz do pliku Ctrl-x – zapisz plik i opuść edytorCtrl-t – sprawdzanie pisowni Ctrl-j – justowanie tekstu Ctrl-w – wyszukiwanie w pliku

Ctrl-f – przesuń do przodu o 1 znak Ctrl-b – przesuń do tyłu o 1 znak Ctrl-p – przesuń do góry o 1 linię Ctrl-n – przesuń na dół o 1 linię Ctrl-a – skok na początek bieżącej linii Ctrl-e – skok na koniec bieżącej linii

PLIKI SPECJALNE (1) Plik /etc/passwd (teraz zakodowane hasła w /etc/shadow) Plik w formacie ASCII, zawierający listę użytkowników oraz hasła. Struktura wpisów: login_name - nazwa użytkownika w systemie hasło - zakodowane hasło użytkownika UID - identyfikator użytkownika (liczbowo) GID - identyfikator grupy (liczbowo) imie_nazwisko - opisowa nazwa użytkownika katalog - katalog macierzysty ($HOME) użytkownika powłoka - program jaki uruchomić po wejściu użytkownika do systemu

login_name:hasło:UID:GID:imie_nazwisko:katalog:powłoka

tzielin:x:30068:555:Tomasz Zielinski:/home/tzielin:/bin/bash

PLIKI SPECJALNE (2) Plik /etc/group (teraz zakodowane hasła w /etc/shadow) Plik w formacie ASCII, definiujący grupy do których należą użytkownicy Struktura wpisów:

nazwa_grupy:hasło:GID:lista_użytkowników

nazwa_grupy - nazwa grupy hasło - zakodowane hasło (jeśli brak, hasło nie jest wymagane) GID - numeryczna reprezentacja grupy przez numer ID lista_użytkowników - nazwy użytkowników będących członkami grupy

PRZYKŁAD: adm:x:4:root,adm,daemon

PLIKI SPECJALNE (3) Pliki startowe (wybrane): Pliki konfiguracyjne (wybrane): Pliki konfiguracyjne powłoki (WAŻNE DLA UŻYTKOWNIKA):

/etc/inittab - ważny plik w procesie startu systemu /etc/rc - skrypt główny konfiguracyjny (czasem w /etc/rc.d) /etc/rc.config - plik konfiguracyjny używany przez /etc/rc do inicjalizacji /etc/rc.local - skrypt używany do celów administracji lokalnej

/etc/fstab - system plików, montowanie dysków /etc/profile - plik konfiguracyjny powłoki sh/bash /etc/csh.login - plik konfiguracyjny powłoki csh/tcsh /etc/shadow - zaszyfrowane hasła kont

~/.profile - lokalny skrypt konfiguracji powłoki sh ~/.cshrc - lokalny skrypt konfiguracji powłoki csh ~/.tcshrc - lokalny skrypt konfiguracji powłoki tcsh ~/.bashrc - lokalny skrypt konfiguracji powłok bash

SKRYPTY

Treść najprostszego skryptu (zawartość przykładowego pliku skrypt1.sh):

Skrypt to niekompilowany tekstowy plik wykonywalny, zawierający jakieś polecenia systemowe oraz polecenia sterujące jego wykonaniem (instrukcje, pętle itp.). Wykonywany, najczęściej podczas uruchamiania systemu, wyłącznie przez interpreter. Jego zadaniem jest przetworzenie kodu skryptu na język zrozumiały dla procesora. Obecnie skrypty częściej pisze się w Pearlu/Pythonie.

# Rodzaj shella w jakim skrypt ma być wykonany (# to początek komentarza) #!/bin/bash echo ”Moj pierwszy skrypt” # Wyświetla tekst, który obejmuje cudzysłów

Utworzonemu skryptowi należy jeszcze nadać prawo wykonywania: $ chmod u+x skrypt1.sh Uruchomienie skryptu znajdującego się w bieżącym katalogu: $ ./skrypt1.sh $sh skrypt1.sh

ZMIENNE ŚRODOWISKOWE (1)

Zmienne środowiskowe to nazwa obiektów zawierających informacje, które uży-wane są przez jeden lub wiele programów w systemie operacyjnym.

Można wyróżnić 4 rodzaje zmiennych:

Zmienne lokalne Określają konfigurację powłoki, są widoczne tylko dla powłoki dla której zostały zdefiniowane

$ set • odczytanie wartości wszystkich zmiennych lokalnych $ echo $zmienna • odczytanie wartości wybranej zmiennej $ export -n zmienna=nowa_wartość • zmiana wartości zmiennej Przykład: PS1= [\u@\h \W]\$ – ustawienie znaku zachęty

Zmienne globalne Są widoczne z poziomu każdej powłoki

$ export zmienna=nowa_wartość • zmiana wartości zmiennej

Przykład: EDITOR=vi - nazwa domyślnego edytora tekstu

ZMIENNE ŚRODOWISKOWE (2)

Zmienne specjalne Są definiowane przez system i w przeciwieństwie do innych zmiennych nie można zmieniać ich wartości

Przykłady zmiennych: $# • liczba parametrów przekazanych do programu #? • kod zakończenia polecenia lub programu wywołanego z powłoki $0 • nazwa uruchomionego programu $1,$2,... • kolejne parametry przekazywane do programu/polecenia

Zmienne programowe Są definiowane przez użytkownika w skryptach powłoki

zmienna=wartość • definiowanie zmiennej programowej $ echo $zmienna • odczytanie wartości wybranej zmiennej Przykłady zmiennych: x=123 - definiowanie zmiennej liczbowej imie=”name” - definiowanie zmiennej łańcuchowej

INSTRUKCJE WARUNKOWE (1)

Instrukcja warunkowa if: $x - wartość zmiennej x Warunek może uwzględniać:

Przykład: #!/bin/bash echo "Podaj login:" read login if [ "$login" != "mis" ] then echo „Dostep zabroniony” else echo „Witaj w systemie” fi

if warunek then polecenie1 else polecenie2 fi

• Porównania liczbowe: -gt, -lt, -ge, (większy, równy), -le (mniejszy, równy), -eq, -ne,

• Porównania tekstowe: -z (czy pusty), -n (wartość ciągu), = , != (różny), Str (czy ciąg zerowy)

• Porównania logiczne: -a ( && ) (logiczne and), -o ( || ) (logiczne or), ! (logiczne not)

• Testy na plikach: -f (istnieje plik), -s, -r, -w, -x, -d (katalog), -h (dowiązanie symb.), -c

INSTRUKCJE WARUNKOWE (2)

Instrukcja warunkowa case:

Przykład: #!/bin/bash echo "Podaj cyfre dnia tygodnia" read d case "$d" in "1") echo "Poniedzialek" ;; "2") echo "Wtorek" ;; "3") echo "Sroda" ;; "4") echo "Czwartek" ;; "5") echo "Piatek" ;; "6") echo "Sobota" ;; "7") echo "Niedziela" ;; *) echo "Nic nie wybrales" esac

case zmienna in

"wzorzec1") polecenie1 ;;

"wzorzec2") polecenie2 ;;

"wzorzec3") polecenie3 ;;

*) polecenie_domyslne

esac

PĘTLE (1) Pętla for: Pętla select: nazwa - zmienna * - aktualny katalog tr = translate/delate chars

Przykład: zamiana nazwy plików, duże litery --> małe #!/bin/bash for nazwa in * do mv $nazwa `echo $nazwa | tr \ '[A-Z]''[a-z]'` done

Przykład: #!/bin/bash echo "Co wybierasz?" select y in X Y Quit do case $y in "X") echo "Wybrales X" ;; "Y") echo "Wybrales Y" ;; "Quit") exit ;; *) echo "Nic nie wybrales" esac break # Aby przerwac prace petli done

for zmienna in listado polecenie done

select zmienna in listado polecenie done

znak kontynuacji w następnym wierszu

PĘTLE (2) Pętla while: Pętla until:

Przykład: #!/bin/bash x=1; while [ $x -le 10 ] do echo "Napis pojawil sie po raz: $x" x=$[x + 1] done

Przykład: #!/bin/bash x=1; until [ $x -ge 10 ] do echo "Napis pojawil sie po raz: $x" x=$[x + 1] done

while warunek do polecenia

done

until warunek do polecenia done

Przykładowe pliki konfiguracyjne powłok Bash i Csh/Tcsh: =========================================== Plik profile z Slackware’a (najstarsza dystrybucja Linuxa, przez niektórych uważana za jedyną prawdziwą): =========================================== # /etc/profile: This file contains system-wide defaults # used by all Bourne (and related) shells. # Set the values for some environment variables: export MINICOM="-c on" export MANPATH=/usr/local/man:/usr/man export HOSTNAME="`cat /etc/HOSTNAME`" export LESSOPEN="|lesspipe.sh %s" export LESS="-M" # If the user doesn't have a .inputrc, use the one in /etc. if [ ! -r "$HOME/.inputrc" ]; then export INPUTRC=/etc/inputrc fi # Set the default system $PATH: PATH="/usr/local/bin:/usr/bin:/bin:/usr/games" # For root users, ensure that /usr/local/sbin, /usr/sbin, and /sbin # are in the $PATH. # Some means of connection don't add these by default # (sshd comes to mind). if [ "`id -u`" = "0" ]; then echo $PATH | grep /usr/local/sbin 1> /dev/null 2> /dev/null if [ ! $? = 0 ]; then PATH=/usr/local/sbin:/usr/sbin:/sbin:$PATH fi fi

# I had problems with the backspace key using 'eval tset' # instead of 'TERM=', # but you might want to try it anyway instead of the section below it. # I think with the right /etc/termcap it would work. # eval `tset -sQ "$TERM"` # Set TERM to linux for unknown type or unset variable: if [ "$TERM" = "" -o "$TERM" = "unknown" ]; then TERM=linux fi # Set ksh93 visual editing mode: if [ "$SHELL" = "/bin/ksh" ]; then VISUAL=emacs # VISUAL=gmacs # VISUAL=vi fi # Set a default shell prompt: #PS1='`hostname`:`pwd`# ' if [ "$SHELL" = "/bin/pdksh" ]; then PS1='! $ ' elif [ "$SHELL" = "/bin/ksh" ]; then PS1='! ${PWD/#$HOME/~}$ ' elif [ "$SHELL" = "/bin/zsh" ]; then PS1='%n@%m:%~%# ' elif [ "$SHELL" = "/bin/ash" ]; then PS1='$ ' else PS1='\u@\h:\w\$ ' fi PS2='> ' export PATH DISPLAY LESS TERM PS1 PS2 # Default umask. A umask of 022 prevents new files # from being created group and world writable. umask 022

# Notify user of incoming mail. This can be overridden in the user's # local startup file (~/.bash.login or whatever, depending on the shell) if [ -x /usr/bin/biff ]; then biff y 2> /dev/null fi # Append any additional sh scripts found in /etc/profile.d/: for profile_script in /etc/profile.d/*.sh ; do if [ -x $profile_script ]; then . $profile_script fi done unset profile_script # For non-root users, add the current directory to the search path: if [ ! "`id -u`" = "0" ]; then PATH="$PATH:." fi

================================================== Plik csh.login: (konfiguracja powłok csh i tcsh) ================================================== # /etc/csh.login: This file contains login defaults used by csh and tcsh. # Set up some environment variables: if ($?prompt) then umask 022 set cdpath = ( /var/spool ) set notify set history = 100

setenv MANPATH /usr/local/man:/usr/man setenv MINICOM "-c on" setenv HOSTNAME "`cat /etc/HOSTNAME`" setenv LESS "-M" setenv LESSOPEN "|lesspipe.sh %s" set path = ( /usr/local/bin /usr/bin /bin /usr/games ) endif # If the user doesn't have a .inputrc, use the one in /etc. if (! -r "$HOME/.inputrc") then setenv INPUTRC /etc/inputrc endif # I had problems with the backspace key installed by 'tset', # but you might want to try it anyway instead of the section below it. # I think with the right /etc/termcap it would work. # eval `tset -sQ "$term"` # Set TERM to linux for unknown type or unset variable: if ! $?TERM setenv TERM linux if ("$TERM" == "") setenv TERM linux if ("$TERM" == "unknown") setenv TERM linux # Set default POSIX locale: setenv LC_ALL POSIX

# Set the default shell prompt: set prompt = "%n@%m:%~%# " # Notify user of incoming mail. This can be overridden in the user's # local startup file (~/.login) biff y >& /dev/null # Set an empty MANPATH if none exists # (this prevents some profile.d scripts # from exiting from trying to access an unset variable): if ! $?MANPATH setenv MANPATH "" # Append any additional csh scripts found in /etc/profile.d/: [ -d /etc/profile.d ] if ($status == 0) then set nonomatch foreach file ( /etc/profile.d/*.csh ) [ -x $file ] if ($status == 0) then source $file endif end unset file nonomatch endif # For non-root users, add the current directory to the search path: if (! "$uid" == "0") set path = ( $path . )

Różnice w skryptach bash i tcsh:

bash tcsh

for zmienna in lista do instrukcja done

foreach zmienna (lista) instrukcja end

while wyrazeniedo instrukcja done

while (wyrazenie) instrukcja end

if [ wyrazenie ]; then instrukcja elif [ wyrazenie ]; then instrukcja else instrukcja fi

if (wyrazenie) then instrukcja else if (wyrazenie) then instrukcja endif

case zmienna inwart1 | wart2) instrukcja;; wart3 | wart4) instrukcja;; *) instrukcja;; esac

switch (zmienna) case wart1 | wart2: instrukcja breaksw case wart3 | wart4: instrukcja breaksw default: instrukcja breaksw endsw

Komputer z MS Windows. Mój katatog: d:\ProgsC\ W nim umieszczamy: a) putty.exe – program terminala: telnet + szyfrowanie,

umożliwiający zdalną pracę „na” serwerze b) psftp.exe lub winscp419.exe – programy do

przesyłania zbiorów PC ↔ serwer c) swoje programy: Prog1.c, Prog2.c, Prog3.c, … Uruchomienie terminala na PC:

putty –ssh student.agh.edu.pl:22 (potem podajemy MojLogin i MojPassword)

Przesyłanie plików z psftp (kolejność operacji): 1) Uruchom wiersz polecenia Windows (w Akcesoriach) 2) Wydaj komendę: cd /D d:\ProgsC\ 3) Uruchom program: psftp 4) Wywołaj komendę: open student.agh.edu.pl 5) Nazwa, hasło? …MojLogin, MojPassword 6) Wyślij plik do serwera put Prog1.c (do /home) 7) Edytuj, kompiluj,… pico Prog1.c, gcc Prog1.c 8) Odbierz plik z serwera get Prog1.c (z /home)

Komputer z MS Windows. Przesyłanie plików za pomocą programu WinSCP OPCJA 1 1) Ściągnij program WinSCP (Installation package):

http://winscp.net/eng/docs/lang:pl http://winscp.net/eng/download.php

2) Zainstalug go i uruchom: Nowa (New): Nazwa hosta = student.agh.edu.pl Port = 22 Użytkownik = MyLogin Hasło = MyPassword Protokół = SFTP Zapisz (Save) Wybierz sesję (podświetl ją) Logowanie (Login) OPCJA 2 1) Ściągnij program WinSCP (Portable) 2) Uruchom go: winscp419.exe sftp:// MyLog:MyPass@]student.agh.edu.pl:22 3) Logowanie (Login) 4) Potem pracujemy jak w programie TotalCommander (Lewa, Prawa kolumna)