Upload
nguyendiep
View
215
Download
0
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
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) 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/..)
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)