Petr Kulhánek kulhanek@chemi.muni.cz Národní centrum pro výzkum biomolekul, Masarykova univerzita, Kotlářská 2, CZ-61137 Brno C2110 Operační systém UNIX a základy programování 4. lekce C2110 Operační systém UNIX a základy programování - 1 - ObsahObsah ➢ Skripty skripty versus programy, editory, spouštění ➢ GNUPlot příkazy, terminály, ukázky ➢ ImageMagic příkazy, konverze eps to png C2110 Operační systém UNIX a základy programování - 2 - Skripty ➢ programy versus skripty ➢ jak psát skripty ➢ spouštění skriptů C2110 Operační systém UNIX a základy programování - 3 - Programy SkriptyProgramy Skripty zdrojový kód program vstup výstuppřeklad (kompilace) Program je soubor strojových instrukcí zpracovávaných přímo procesorem. Program vzniká překladem zdrojového kódu programovacího jazyka. Překládané jazyky: ● C/C++ ● Fortran Skript je textový soubor obsahující příkazy a řídící sekvence, které jsou vykonávány interpreterem použitého skriptovacího jazyka. Skriptovací jazyky: ● bash ● gnuplot ● awk ● JavaScript ● PHP skript interpreter vstup výstup C2110 Operační systém UNIX a základy programování - 4 - Programy SkriptyProgramy Skripty zdrojový kód program vstup výstuppřeklad (kompilace) ● snadná optimalizace ● rychlé vykonávání ● nutnost rekompilace ● nelze vytvářet samospustitelný kód skript interpreter vstup výstup ● nevyžaduje rekompilaci ● vytváření samospustitelného kódu ● špatná optimalizovatelnost ● pomalejší vykonávání C2110 Operační systém UNIX a základy programování - 5 - Jak psát skriptyJak psát skripty Jelikož jsou skripty textové soubory, lze použít libovolný textový editor umožnující uložení textu v čisté formě (bez formátovacích metadat). Textové editory: ● vi ● kwrite ● kate ● gedit K psaní scriptů lze používat i specializované vyvojové prostředí – IDE (Integrated Development Enviroment). IDE obsahuje kromě editoru i správce projektu, ladící nástroje (debugger) a další. Většinou dostupné pro komplexnější jazyky: JavaScript, Python, PHP, atd. Vývojové prostředí: ● kdevelop ● NetBeans ● Eclipse C2110 Operační systém UNIX a základy programování - 6 - Spouštění skriptůSpouštění skriptů 1) Nepřímé spouštění Spouštíme interpreter jazyka a jako argument uvádíme jméno skriptu. $ bash muj_skript_v_bashi $ gnuplot muj_skript_v_gnuplotu Skripty nemusí mít nastaven příznak x (executable). 2) Přímé spouštění Spouštíme přímo skript (shell automaticky spustí interpreter). $ ./muj_skript_v_bashi $ ./muj_skript_v_gnuplotu Skripty musí mít nastaven příznak x (executable) a interpreter (součást skriptu). C2110 Operační systém UNIX a základy programování - 7 - Určení interpretruUrčení interpretru #!/bin/bash echo “Toto je skript v bashi!” #!/usr/bin/gnuplot set xrange[0:6] plot sin(x) pause -1 Skript v bashi Skript v gnuplotu #!/absolutní/cesta/k/interpretru/skriptu Specifikace interpretru (první řádek skriptu): ● Pokud není interpreter skriptu při jeho přímém spuštění uveden, použije se interpreter shellu. ● Interpreter uvedený ve skriptu se ignoruje při nepřímém spuštění. C2110 Operační systém UNIX a základy programování - 8 - Určení interpretru ...Určení interpretru ... #!/usr/bin/env bash echo “Toto je skript v bashi!” #!/usr/bin/env gnuplot set xrange[0:6] plot sin(x) pause -1 Skript v bashi Skript v gnuplotu #!/usr/bin/env interpreter C2110 Operační systém UNIX a základy programování - 9 Pokud se absolutní cesta k interpretru mění (např. při použití softwareových modulů), lze použít následující konstrukci: Interpreter musí být v některém adresáři určeném systémovou proměnnou PATH Přímé spouštěníPřímé spouštění Spouštíme přímo skript (shell automaticky spustí interpreter). $ ./muj_skript musí mít nastaven příznak x (executable) $ chmod u+x muj_skript_v_gnuplotu Cesta (relativní či absolutní) ke skriptu je uvedena. Systém spustí uvedený soubor. $ muj_skript Cesta ke skriptu není uvedena. Shell hledá skript v adresářích určených systémovou proměnnou PATH. C2110 Operační systém UNIX a základy programování - 10 - GNUPlot ➢ úvod, interaktivní mód ➢ základní příkazy ➢ typy terminálů PM3 http://www.gnuplot.info/ C2110 Operační systém UNIX a základy programování - 11 (dokumentace, tutoriály, zdrojové kódy) GNUPlotGNUPlot GNUPlot slouží k vykreslování 2D a 3D grafů umožnující práci v interaktivním tak i skriptovacím režimu. $ gnuplot G N U P L O T Version 4.2 patchlevel 2 last modified 31 Aug 2007 System: Linux 2.6.24.5-laptop-2mnb Copyright (C) 1986 - 1993, 1998, 2004, 2007 Thomas Williams, Colin Kelley and many others Type `help` to access the on-line reference manual. The gnuplot FAQ is available from http://www.gnuplot.info/faq/ Send bug reports and suggestions to Terminal type set to 'x11' gnuplot> Interaktvní mód příkazová řádka gnuplotu C2110 Operační systém UNIX a základy programování - 12 - GNUPlot - příkazyGNUPlot - příkazy set title “graph title” nastaví název grafu set xrange[min_value:max_value] nastaví rozsah x-vé osy set yrange[min_value:max_value] nastaví rozsah y-vé osy set nokey nezobrazí legendu k datovým řadám plot “file.dat” using x_column_id:y_column_id with lines title “data title” zobrazí XY graf zobrazující data ze souboru file.dat pause -1 čeká na zmáčknutí klávesy C2110 Operační systém UNIX a základy programování - 13 - GNUPlot - terminályGNUPlot - terminály Terminál určuje kam bude graf vykreslen. set term x11 výstup je vykreslen do okna set term wxt výstup je vykreslen do okna (lepší vlastnosti) set term png size 800,600 výstup je vykreslen jako obrázek ve formátu png set output “output.png” výstup bude uložen do souboru output.png test vytiskne stránku demonstrující vlastnosti terminálu (ne všechny terminály mají stejné možnosti výstupu) C2110 Operační systém UNIX a základy programování - 14 - wxtwxt versusversus epseps C2110 Operační systém UNIX a základy programování - 15 wxt eps podporuje přerušované čáry Ukázka IUkázka I C2110 Operační systém UNIX a základy programování - 16 - Ukázka IUkázka I C2110 Operační systém UNIX a základy programování - 17 - #!/usr/bin/env gnuplot set terminal postscript enhanced eps color size 3.20,2.40 font "Arial" 14 dashlength 3 set border lw 2 #set nokey set bmargin 3.5 set rmargin 2.0 set encoding iso_8859_1 # ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ set output "Figure01a.eps" set title "minimum QM / ABF / R_{EWALD} = 8 {\305}" set xlabel "DD ({\305})" set xrange[­1.0:2.0] set xtics 0.5 set format x "%.1f" set ylabel "{/Symbol D}A (kcal mol^{­1})" set yrange[0:30] set ytics 5 set format y "%g" plot 'Figure01a/cut08_1ns/int' u 1:2 t "4x250ps" with l lw 4 lt 1 lc rgb "black", \      'Figure01a/cut08_2ns/int' u 1:2 t "4x500ps" with l lw 4 lt 1 lc rgb "red" enhanced mode (umožnuje použít indexů, symbolů, atd.) dokumentace v sekci “Enhanced postscript” manuálu gnuplotu Ukázka IIUkázka II C2110 Operační systém UNIX a základy programování - 18 - Ukázka IIUkázka II C2110 Operační systém UNIX a základy programování - 19 - # stejne nastaveni terminalu jako u ukazky I set output "Figure01b.eps" set multiplot set title "minimum QM / ABF / R_{EWALD} = 8 {\305}" set xlabel "DD ({\305})" set xrange[­1.0:2.0] set xtics 0.5 set format x "%.1f" set ylabel "{/Symbol D}A (kcal mol^{­1})" set yrange[0:30] set ytics 5 set format y "%g" plot 'Figure01b/cut08_2ns/all' u 1:($2­$4/2):($2+$4/2) t "error" with filledcurve lw 1 lt 1 lc rgb "blue", \      'Figure01b/cut08_2ns/int' u 1:2   t "4x500ps" with l lw 4 lt 1 lc rgb "red" set origin 0.45,0.30 set size 0.5,0.5 unset title set nokey set xlabel "" set xrange[1:2] set xtics 0.5 set format x "%.1f" set ylabel "" set yrange[1:2] set ytics 0.5 set format y "%g" plot 'Figure01b/cut08_2ns/all' u 1:($2­$4/2):($2+$4/2) t "" with filledcurve lw 1 lt 1 lc rgb "blue", \      'Figure01b/cut08_2ns/int' u 1:2   t "4x500ps" with l lw 4 lt 1 lc rgb "red" unset multiplot Image Magic ➢ základní příklady ➢ konverze eps to png http://www.imagemagick.org C2110 Operační systém UNIX a základy programování - 20 (dokumentace, tutoriály, zdrojové kódy) PříkazyPříkazy C2110 Operační systém UNIX a základy programování - 21 animate, compare, composite, conjure, convert, display, identify, import, mogrify, montage, stream Přehled:Přehled: Nejdůležitější: display zobrazí obrázek nebo sekvenci obrázků na obrazovce convert provede konverzi mezi různými formáty včetně různých typů operací jako je změna velikosti, ořezání, rozostření, apod. Detailní popis je dostupný v manuálových stránkách příkazů nebo na webové stránce Image Magic. Konverze eps do pngKonverze eps do png C2110 Operační systém UNIX a základy programování - 22 Vytvořené obrázky v gnuplotu ve formátu eps lze převést do formátu png následovně: $ convert input.eps output.png Vysoká kvalita pro publikační účely: $ convert -density 300x300 input.eps -units PixelsPerInch \ -density 300 -background white -flatten output.png