Προγραµµατισµός 2 The shell

Σχετικά έγγραφα
Λειτουργικά Συστήματα (ΗΥ-345) Χειμερινό Εξάμηνο

Το Shell. Προγραμματισμός II 1

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

Εισαγωγή στα Λειτουργικά Συστήματα

Λειτουργικά Συστήματα 1.1 Τι είναι Λειτουργικό Σύστημα (Operating System)

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

Μερικές άλλες χρήσιμες εντολές

Εισαγωγή στον Προγραμματισμό Μάθημα 1: Βασική Πλοήγηση σε Linux CLI. Οκτώβριος 2016 Χ. Αλεξανδράκη

Μερικές άλλες χρήσιμες εντολές

Unix: Εντολές, οργάνωση και χειρισµός αρχείων, διεργασίες

Εργαστήριο ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ UNIX

Προγραµµατισµός στην Basic

Κεφάλαιο 4 Λογισμικό συστήματος. Εφαρμογές Πληροφορικής Κεφ.4 Καραμαούνας Πολύκαρπος 1

Κεφάλαιο 3.1: Λειτουργικά Συστήματα. Επιστήμη ΗΥ Κεφ. 3.1 Καραμαούνας Πολύκαρπος

Υλοποίηση ενός προγραμματιστικού κελύφους εργασίας

$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input).

Λειτουργικά Συστήματα (Λ/Σ)

Λιβανός Γιώργος Εξάμηνο 2017Β

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

ΦΥΣ 145 Μαθηµατικές Μέθοδοι στη Φυσική. Πρόοδος 28 Μαρτίου 2009 Οµάδα 1 η

ΤΕΙΘ ΣΤΕΦ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ (UNIX) ΕΡΓΑΣΤΗΡΙΟ. 6o ΕΡΓΑΣΤΗΡΙΟ

Αβδέλαρου Κωνσταντίνα

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ I

for for for for( . */

ver Επεξεργαστές κειμένου, λογιστικών φύλλων, παρουσιάσεων Οδηγοί συσκευών (Device Drivers)

Πληροφορική I. "Λογισμικό (Software)" B. Φερεντίνος

Οργάνωση ενός σύγχρονου Υπολογιστικού Συστήματος ή Ηλεκτρονικού Υπολογιστή (Η/Υ) Τα σύγχρονα συστήματα Η/Υ έχουν την παρακάτω οργάνωση:

Λειτουργικά Συστήματα (ΗΥ321)

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία

ΚΕΦΑΛΑΙΟ Web Services

Επαναληπτικές δοµές. µτ α.τ. Όχι. ! απαγορεύεται µέσα σε µία ΓΙΑ να µεταβάλλουµε τον µετρητή! διότι δεν θα ξέρουµε µετά πόσες επαναλήψεις θα γίνουν

Λειτουργικά συστήµατα. Λογισμικό Συστήματος 1

Κεφάλαιο 5ο: Εντολές Επανάληψης

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

ΛΟΓΙΣΜΙΚΟ (software)

Εισαγωγή στην Πληροφορική

Μετάδοση εδοµένων και ίκτυα υπολογιστών ΙΙ Εργαστηριακή Άσκηση 3. Σύνδεση υπολογιστών στα Windows

Ενότητα 3 - Θέματα Εφαρμοσμένης Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Εισαγωγή στην Πληροφορική

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

Βασικές Έννοιες της Πληροφορικής

ΗΜΙΟΥΡΓΙΑ ΠΑΙΧΝΙ ΙΟΥ ΣΤΟ SCRATCH ΒΗΜΑ ΠΡΟΣ ΒΗΜΑ

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave

Μάθημα 1 ο ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΤΩΝ ΛΕΙΤΟΥΡΓΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων

Linux με τη χρήση κονσόλας

ΗΜΥ 210 ΣΧΕΔΙΑΣΜΟΣ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Χειµερινό Εξάµηνο 2016 Συµπληρωµατική ΔΙΑΛΕΞΗ 14: Περιγραφή Ακολουθιακών Κυκλωµάτων στη VHDL

Χρονοδρομολογητής Κυκλικής Επαναφοράς

ΕΡΓΑΣΙΑ ΣΤΟ ΜΑΘΗΜΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

1. ΑΡΧΕΣ ΛΕΙΤΟΥΡΓΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

Λογισµικό (Software SW) Γλώσσες

ΠΕΡΙΕΧΟΜΕΝΑ ΜΕΡΟΣ I. 1. Εισαγωγή 3 ΠΡΟΛΟΓΟΣ

Πτυχιακή Εργασία Οδηγώντας ένα Ρομποτικό Αυτοκίνητο με το WiFi. Η Ασύρματη Επικοινωνία, χρησιμοποιώντας

Κεφάλαιο 2: Λογισμικό (Software) Εφαρμογές Πληροφορικής Κεφ. 2 Καραμαούνας Πολύκαρπος

Ιστορική Αναδρομή Λειτουργικών Συστημάτων (ΛΣ) Εισαγωγή : ο πυρήνας (kernel) / ο φλοιός (shell) Β ΕΠΑΛ

1 ο ΓΥΜΝΑΣΙΟ ΘΕΡΜΗΣ. Πληροφορική Α' Γυμν. Το Λειτουργικό Σύστημα του Υπολογιστή

Λειτουργικά Συστήματα. Άσκηση Πράξη. Shell Programming

Κεφάλαιο 3: Λειτουργικά Συστήµατα

Αρχιτεκτονικές Δικτύων & Πρωτόκολλα Ι

VHDL για Σχεδιασµό Ακολουθιακών Κυκλωµάτων

Βιοµηχανικοί Αυτοµατισµοί

Εικονική Μνήμη (Virtual Μemory)

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. Εισαγωγή στο Unix

scanf() scanf() stdin scanf() printf() int float double %lf float

Λειτουργικά Συστήματα

Εκφώνηση άσκησης. Η Κρεμάλα σαν παιχνίδι. Ανάλυση. Μέρος Α Αναφoρά, ανάλυση τακτικής. Υλοποίηση του παιχνιδιού «Κρεμάλα»

Νέες τεχνολογίες εισάγονται ή χρησιµοποιούνται

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Ενότητα 1: «Εισαγωγή στην Αλγοριθμική και τον Προγραμματισμό. Απλές ασκήσεις με γλώσσα Pascal»

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Επισκόπιση. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων. Collecting Messages Statistics

Εισαγωγή στους Υπολογιστές

Εισαγωγή στην Πληροφορική & τον Προγραμματισμό

Προγραμματισμός συστημάτων UNIX/POSIX. Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes)

Κεφάλαιο 12 : ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

CE121 Προγραµµατισµός 2. Εισαγωγή σε Makefiles. CE121 -

ΕΠΛ 001: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

Λειτουργικά Συστήματα Ι. Κεφάλαιο 1 Βασικές Έννοιες Λειτουργικών Συστημάτων

ΤρόποςΑξιολόγησης: α) Εργαστήρια (Προαιρετικάµε 20% - 35% βαρύτητα µόνοθετικά) β) Τελική Γραπτή Εξέταση

Επεξεργασία Αρχείων Κειµένου

Κατανεμημένα Συστήματα

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΑ ΣΥΣΤΗΜΑΤΑ

Λειτουργικά Συστήματα

Εισαγωγή στην πληροφορική

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Βασίλειος Κοντογιάννης ΠΕ19

Transcript:

Προγραµµατισµός 2 The shell 1

CLI vs GUI! CLI (Command Line Interface) Μεγαλύτερη ευελιξία και ταχύτητα Πιο εύκολο να γίνουν πολύπλοκες λειτουργίες. find. -mtime -2 -name '*.txt' -exec sed -i.bak 's/hi/bye/g' {} \; Scripts! GUI (Graphical User Interface) Πιο εύκολο στη χρήση για αρχάριους Διευκολύνει το multitasking! Και τα δύο είναι τρόποι επικοινωνίας µε το λειτουργικό σύστηµα. 2

Shell vs Terminal! Terminal Παλιά, συσκευή επικοινωνίας µε τον ΗΥ (πληκτρολόγιο + οθόνη) Τώρα, software abstraction 3

Shell vs Terminal! Shell Πρόγραµµα το οποίο τρέχει µέσω του terminal και µας επιτρέπει να επικοινωνήσουµε µε τον kernel. Βασικός σκοπός: job control επεξεργάζεται εντολές που διαβάζει από το standard input εµφανίζει αποτελέσµατα στο standard output διαχειρίζεται διεργασίες επιτρέπει ανακατεύθυνση Ε/Ε επιτρέπει χρήση αγωγών και pipelines επιτρέπει δηµιουργία δικών µας εντολών 4

Shell vs Terminal! Shell prompt line edition input history auto completion! Terminal job control (=εκκίνηση και διαχείριση προγραµµάτων) εκτέλεση διεργασιών στο background εφόσον δεν απαιτούν αλληλεπίδραση µε το χρήστη εναλλαγή εκτέλεσης διεργασιών σύνδεση διεργασιών µέσω pipe copy + paste output history 5

Sessions & process groups! Το λειτουργικό σύστηµα οµαδοποιεί διεργασίες για ευκολότερη διαχείριση. Process group = µια συλλογή από διεργασίες µε µοναδικό pgid Session = µια συλλογή από process groups! Sessions Κάθε session συνήθως σχετίζεται µε ένα terminal, το οποίο λέγεται controlling terminal των διεργασιών αυτού του session. Οι διεργασίες του session διαβάζουν από/γράφουν σε αυτό το terminal To controlling terminal διαχειρίζεται/ελέγχει τις διεργασίες στέλνοντας σήµατα σε αυτές. 6

Sessions & process groups! Process groups Μόνο ένα process group του session µπορεί να είναι στο foreground κάθε στιγµή. Όλα τα άλλα είναι στο background. Μπορούµε να ξεκινήσουµε ένα process απευθείας στο backround βάζοντας & στο τέλος της εντολής εκτέλεσής του. Μπορούµε να φέρουµε ένα process group στο foreground στο background µε fg. Μόνο µια διεργασία που είναι στο foreground µπορεί να διαβάζει από το terminal. Αν το terminal παράγει ένα σήµα αυτό αποστέλεται στο process group που βρίσκεται στο foreground. Αν µια διεργασία είναι στο background και θέλει να διαβάσει από το terminal, το terminal στέλνει στο process group της σήµα SIGTTIN. Το shell είναι υπεύθυνο να ανιχνεύει αν µια διεργασία έχει σταµατήσει και να παρέχει τη δυνατότητα στο χρήστη να τη συνεχίσει και γενικά να εναλλάσσει διεργασίες ανάµεσα στο foreground και στο background. 7

Shell & process groups! Γράφω./prog στο shell για να εκτελέσω το πρόγραµµα prog. Τι συµβαίνει? Το shell κάνει fork Το παιδί µπαίνει σε δικό του process group. Το παιδί επιστρέφει στο default το χειρισµό σηµάτων που σχετίζονται µε job control (γιατί? τι ήταν πριν?) Το παιδί κάνει exec το prog Το shell µπαίνει στο background ώστε να εκτελεστεί το παιδί στο foreground Το shell περιµένει να τελειώσει το παιδί. Όταν το παιδί τερµατίσει, το shell µπαίνει πάλι στο foreground. 8

Shell & process groups! Γράφω cat στο shell. Μετά Ctrl-C. Ποιος λαµβάνει το σήµα και τι θα συµβεί?! Γράφω exec cat στο shell. Μετά Ctrl-C. Ποιος λαµβάνει το σήµα και τι θα συµβεί? 9

Shell & process groups! Γράφω./prog & στο shell. Τι συµβαίνει? Οµοίως µε πριν αλλά το prog εκτελείται στο background, ανεξάρτητα από το shell. Το shell παραµένει στο foreground. Αν το prog χρειαστεί να διαβάσει από το terminal, θα σταµατήσει. Αν το prog χρειαστεί να γράψει στο terminal, συνήθως µπορεί (εξαρτάται από ρυθµίσεις) 10

Shell & process groups! Γράφω./prog1./prog2 στο shell. Τι συµβαίνει? Το shell δηµιουργεί το pipe και κάνει fork Τα παιδιά µπαίνουν όλα σε ένα νέο process group. Κάθε παιδί κάνει reset το χειρισµό σηµάτων. Κάθε παιδί κάνει τα κατάλληλα dup και µετά exec Το shell µπαίνει στο background. Το shell περιµένει να τελειώσουν τα παιδιά. 11

Shell & process groups! Γράφω./prog1./prog2 στο shell και πριν ολοκληρωθεί η εκτέλεση, γράφω ctrl-c. Τι συµβαίνει? Αποστέλεται SIGINT στο process group που βρίσκεται στο foreground, άρα και στο prog1 και στο prog2. 12

Shell & process groups! Γράφω./prog1./prog2 & στο shell. Τι συµβαίνει? Οι διεργασίες prog1, prog2 εκτελούνται στο background. Μπορώ να τις επαναφέρω στο foreground µε την εντολή fg Τι θα συµβεί αν η prog1 χρειάζεται να πάρει είσοδο από το standard input? 13

Shell programming! Μπορούµε να: γράψουµε εντολές του shell σε ένα αρχείο να εκτελέσουµε το αρχείο! Με άλλα λόγια, µπορούµε να δούµε το shell ως γλώσσα προγραµµατισµού Ορίζουµε µεταβλητές Χρησιµοποιούµε δοµές ελέγχου κι επανάληψης Ορίζουµε συναρτήσεις Το τελικό "προϊόν" λέγεται shell script. 14

Shell programming! Η πρώτη γραµµή ξεκινά πάντα µε #! και προσδιορίζει ποιο shell θέλουµε να εκτελέσει τον κώδικα που ακολουθεί (όχι απαραίτητα το ίδιο µε αυτό που τρέχουµε). πχ. #!/bin/bash! Όποια άλλη γραµµή ξεκινά µε # αντιµετωπίζεται ως σχόλια και αγνοείται.! Το αρχείο έχει τυπικά επέκταση.sh! Για να εκτελέσουµε ένα αρχείο myscript.sh είτε γράφουµε sh myscript.sh είτε θέτουµε execute permission µε χρήση chmod και εκτελούµε κανονικά./myscript.sh 15

Παράδειγµα #!/bin/sh for dir in * do if [ -d $dir ] then cd $dir for i in *.java do sed -i '' '/^package/d' $i done cd.. fi done 16

Παράδειγµα! Θυµηθείτε την προηγούµενη διάλεξη: Για να µετρήσουµε το χρόνο εκτέλεσης ενός σύντοµου προγράµµατος, µπορούµε απλά να το τρέξουµε πολλές φορές και να διαιρέσουµε το χρόνο µε το πλήθος εκτελέσεων. Πώς θα το κάναµε αυτό µε ένα script? 17

18