ΕΡΓΑΣΤΉΡΙΟ ΛΕΙΤΟΥΡΓΙΚΏΝ ΣΥΣΤΗΜΆΤΩΝ ΜΆΘΗΜΑ 6OΥ ΕΞΑΜΉΝΟΥ, ΤΟΜΈΑΣ ΛΟΓΙΚΟΎ ΚΑΙ ΥΠΟΛΟΓΙΣΤΏΝ Δρ. Α. Κομνηνός

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
ΕΙΣΑΓΩΓΗ ΣΤΟ DOS (Disk Operating System)
Advertisements

Κελύφη, Μεταβλητές και Προγραμματισμός
Παπακώστας Μιχάλης ΑΜ:
ΕΡΓΑΣΤΉΡΙΟ ΛΕΙΤΟΥΡΓΙΚΏΝ ΣΥΣΤΗΜΆΤΩΝ ΜΆΘΗΜΑ 6OΥ ΕΞΑΜΉΝΟΥ, ΤΟΜΈΑΣ ΛΟΓΙΚΟΎ ΚΑΙ ΥΠΟΛΟΓΙΣΤΏΝ Δρ. Α. Κομνηνός
ΕΡΓΑΣΤΉΡΙΟ ΛΕΙΤΟΥΡΓΙΚΏΝ ΣΥΣΤΗΜΆΤΩΝ ΜΆΘΗΜΑ 6OΥ ΕΞΑΜΉΝΟΥ, ΤΟΜΈΑΣ ΛΟΓΙΚΟΎ ΚΑΙ ΥΠΟΛΟΓΙΣΤΏΝ Δρ. Α. Κομνηνός
Σύνοψη 2ης ∆ιάλεξης Περιβάλλον MINIX Σύνοψη Μαθήματος
Δημιουργία blog (ιστολογίου) με το WordPress Συνάντηση 2 1.
Φροντιστήριο Εργ. Λειτουργικών Συστημάτων Αλγόριθμοι ανάθεσης μνήμης.
Δημιουργία blog (ιστολογίου) με το WordPress Συνάντηση 2 1.
Σύνοψη 7ης ∆ιάλεξης Λειτουργικό Σύστημα Minix Σύνοψη Μαθήματος
ΕΡΓΑΣΤΉΡΙΟ ΛΕΙΤΟΥΡΓΙΚΏΝ ΣΥΣΤΗΜΆΤΩΝ ΜΆΘΗΜΑ 6OΥ ΕΞΑΜΉΝΟΥ, ΤΟΜΈΑΣ ΛΟΓΙΚΟΎ ΚΑΙ ΥΠΟΛΟΓΙΣΤΏΝ Δρ. Α. Κομνηνός
Εργαστήριο Λειτουργικών Συστημάτων Φροντιστήριο 2– Εισαγωγή στη Bash Ντίρλης Νικόλαος.
Login Shell SunOS 5.6 login: ikantz Password: Last login: Sat Dec 2 17:26:36 from ppp16.ath.aegean Sun Microsystems Inc. SunOS 5.6 Generic August 1997.
Σύνοψη 5ης ∆ιάλεξης Λειτουργικό Σύστημα Minix Σύνοψη Μαθήματος
Εργαστήριο Λειτουργικών Συστημάτων Μάθημα 6oυ Εξαμήνου, Τομέας Λογικού και Υπολογιστών Δρ. Α. Κομνηνός/Επ. Καθ. Χ. Μακρής
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Φροντηστήριο Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Eργαλεία.
Περίληψη Αρχιτεκτονική Μικροεπεξεργαστών MIPS-32
Τεχνολογία ΛογισμικούSlide 1 Έλεγχος Καταψύκτη (Ada) Τεχνολογία ΛογισμικούSlide 39 with Pump, Temperature_dial, Sensor, Globals, Alarm; use Globals ; procedure.
Προγραμματισμός PASCAL Πληροφορική Γ' Λυκείου μέρος γ
PL/SQL.
Εισαγωγή στο UNIX και άλλα εργαλεία Pedro Trancoso Γιαννάκης Σαζεϊδης.
ΕΡΓΑΣΤΉΡΙΟ ΛΕΙΤΟΥΡΓΙΚΏΝ ΣΥΣΤΗΜΆΤΩΝ ΜΆΘΗΜΑ 6OΥ ΕΞΑΜΉΝΟΥ, ΤΟΜΈΑΣ ΛΟΓΙΚΟΎ ΚΑΙ ΥΠΟΛΟΓΙΣΤΏΝ Δρ. Α. Κομνηνός
ΕΡΓΑΣΤΉΡΙΟ ΛΕΙΤΟΥΡΓΙΚΏΝ ΣΥΣΤΗΜΆΤΩΝ ΜΆΘΗΜΑ 6OΥ ΕΞΑΜΉΝΟΥ, ΤΟΜΈΑΣ ΛΟΓΙΚΟΎ ΚΑΙ ΥΠΟΛΟΓΙΣΤΏΝ Δρ. Α. Κομνηνός
ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ Διάλεξη 3: Δείκτες Εαρινό εξάμηνο 2009 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ι. Σαρρής, τηλ.
Νευρωνικά Δίκτυα Εργαστήριο Εικόνας, Βίντεο και Πολυμέσων
Προγραμματισμός ΙΙ Διάλεξη #7: Περισσότερες Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
Δρ. Α. Κομνηνός/Δρ. Χ. Μακρής
Προγραμματισμός ΙΙ Διάλεξη #6: Απλές Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
Σχολικός εκφοβισμός τέλος!! Αντωνία Παπαδοπούλου Μαριαλένα Σπύρου Ιωάννα Φώτα ΝΟΕΜΒΡΙΟΣ 2014.
Δομές Δεδομένων 1 Στοίβα. Δομές Δεδομένων 2 Στοίβα (stack)  Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή – πρώτη εξαγωγή)  Περιορισμένος.
Head head –n L file Παραθέτει τις L πρώτες γραμμές του αρχείου file στο standard output Παράδειγμα: head –n 10 test Θα εμφανίσει τις πρώτες 10 γραμμές.
ΕΡΓΑΣΤΉΡΙΟ ΛΕΙΤΟΥΡΓΙΚΏΝ ΣΥΣΤΗΜΆΤΩΝ ΜΆΘΗΜΑ 6OΥ ΕΞΑΜΉΝΟΥ, ΤΟΜΈΑΣ ΛΟΓΙΚΟΎ ΚΑΙ ΥΠΟΛΟΓΙΣΤΏΝ Δρ. Α. Κομνηνός
Προγραμματισμός ΙΙ Διάλεξη #5: Εντολές Ανάθεσης Εντολές Συνθήκης Δρ. Νικ. Λιόλιος.
Σημαντικές ημερομηνίες 384 γέννηση στον σημερινό Σταυρό της Χαλκιδικής 367–347 πρώτη αθηναϊκή περίοδος Άσσος, Λέσβος, Μακεδονία 334–323 δεύτερη αθηναϊκή.
ΕΡΓΑΣΤΉΡΙΟ ΛΕΙΤΟΥΡΓΙΚΏΝ ΣΥΣΤΗΜΆΤΩΝ ΜΆΘΗΜΑ 6OΥ ΕΞΑΜΉΝΟΥ, ΤΟΜΈΑΣ ΛΟΓΙΚΟΎ ΚΑΙ ΥΠΟΛΟΓΙΣΤΏΝ Δρ. Α. Κομνηνός
AWK Μία εξαιρετικά δυναμική συμβολική γλώσσα προγραμματισμού και ταυτόχρονα ένα εργαλείο διαχείρισης δεδομένων. Αναζητά, τροποποιεί αρχεία, δημιουργεί.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αρχεία.
ΕΡΓΑΣΤΉΡΙΟ ΛΕΙΤΟΥΡΓΙΚΏΝ ΣΥΣΤΗΜΆΤΩΝ ΜΆΘΗΜΑ 6OΥ ΕΞΑΜΉΝΟΥ, ΤΟΜΈΑΣ ΛΟΓΙΚΟΎ ΚΑΙ ΥΠΟΛΟΓΙΣΤΏΝ Δρ. Α. Κομνηνός
P ERL One of the most respectable general-purpose scripting languages Δημητρίου Νίκος Δημητρίου Θεόδωρος Ζαβού Έλλη.
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αρχεία.
HY150Ξενοφών Ζαμπούλης HY150 Ε π ι π λέον στοιχεία της C.
Προσομοίωση Δικτύων 2n Άσκηση Δημιουργία, διαμόρφωση μελέτη επικοινωνιακών ζεύξεων.
Μάθημα 9 Λίγο απ’ όλα! HTML 5 Advanced PHP XML. HTML 5 Πρόκειται για μια νέα έκδοση της HTML που συμπληρώνει τις δυνατότητες της γλώσσας με κάποια Tags.
Προσομοίωση Δικτύων 4η Άσκηση Σύνθετες τοπολογίες, διακοπή συνδέσεων, δυναμική δρομολόγηση.
Introduction to Latent Variable Models. A comparison of models X1X1 X2X2 X3X3 Y1Y1 δ1δ1 δ2δ2 δ3δ3 Model AModel B ξ1ξ1 X1X1 X2X2 X3X3 δ1δ1 δ2δ2 δ3δ3.
Εργαστήριο «Διαχείριση & Ασφάλεια Δικτύων» Επισκόπηση Βασικών Δικτυακών Λειτουργιών Διδάσκων: Δρ. Γενειατάκης Δημήτρης Τμήμα Επιστήμης.
Μαθαίνω με “υπότιτλους”
Εισαγωγή στον Προγ/μό Η/Υ
Εισαγωγή στην Αριθμητική Ανάλυση Εισαγωγή στη MATLAB
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Αντικειμενοστραφής Προγραμματισμός ΙΙ
Εισαγωγή στον Προγ/μό Υπολογιστών
Δομές.

Εφαρμογές Υπολογιστών
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Αλγόριθμοι Ταξινόμησης – Μέρος 3
Η ΛΟΓΙΚΗ ΟΡΓΑΝΩΣΗ ΤΟΥ.
Πρότυπα Προγραμματισμού
Εντολές Δικτύων Command Line.
Σύστημα αρχείων του UNIX, Διασωλήνωση, Άδειες πρόσβασης, ο editor vi
Σενάρια φλοιού (Shell scripts)
Το Περιβάλλον Προγραμματισμού της εντολής awk
Εντολές επεξεργασίας κειμένου (text) : sed (stream ή script editor), cut, paste, tr, sort, uniq Εντολές αναζήτησης : file, find 6ο ΕΡΓΑΣΤΗΡΙΟ ΛΕΙΤΟΥΡΓΙΚΑ.
Γλώσσα Προγραμματισμού V PHP
Find: φ σ3 = 400 [lb/ft2] CD test Δσ = 1,000 [lb/ft2] Sand 34˚ 36˚ 38˚
Λούκας Νεοκλέους - Μαρία Χαραλάμπους - Βλαδίμηρος Θεοδοσίου
Βάλια Τόλιου, Registry Manager for Greece
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Μεταγράφημα παρουσίασης:

ΕΡΓΑΣΤΉΡΙΟ ΛΕΙΤΟΥΡΓΙΚΏΝ ΣΥΣΤΗΜΆΤΩΝ ΜΆΘΗΜΑ 6OΥ ΕΞΑΜΉΝΟΥ, ΤΟΜΈΑΣ ΛΟΓΙΚΟΎ ΚΑΙ ΥΠΟΛΟΓΙΣΤΏΝ Δρ. Α. Κομνηνός

Σύνοψη 4ης ∆ιάλεξης • Επεξεργαστής Ροών Κειμένου -- sed • Γλώσσα ∆ιαχείρισης Κειμένων -- awk • Σύνοψη Μαθήματος • Επόμενη ∆ιάλεξη

Γενικά • Το κέλυφος (shell) προσφέρει ένα εναλλακτικό περιβάλλον από την κονσόλα • Επιτρέπει τον συνδυασμό εντολών με την χρήση script • Προσφέρει εναλλακτικούς τρόπους για την επίτευξη σύνθετων ενεργειών • Επιτρέπει αποθήκευση μεταβλητών • Υπάρχουν πολλά διαφορετικά κελύφη korn, tcsh, zsh... Κάθε χειριστής έχει ένα προεπιλεγμένο κέλυφος • Η επιλογή διατηρείται στο αρχείο /etc/passwd ichatz:x:1000:1000:,,,:/home/ichatz:/bin/bash • Η εντολή chsh αλλάζει το κέλυφος • Προσφέρει αρχεία ρυθμίσεων διαφορετικά για κάθε λογαριασμό

Προώθηση Εισόδου / Εξόδου • Οι εντολές παράγουν έξοδο – χρησιμοποιούμε το επίθεμα > για την προώθηση σε κάποιο αρχείο # ls > filelist • Θα δημιουργηθεί ένα νέο αρχείο με όνομα filelist • Αν υπάρχει ήδη, το νέο αρχείο θα αντικαταστήσει το παλιό • Χρησιμοποιούμε το επίθεμα >> για την προώθηση σε κάποιο υπάρχον αρχείο • # ls -lt /root/doc >> /root/filelist • Οι εντολές απαιτούν είσοδο – χρησιμοποιούμε το επίθεμα < για την προώθηση ενός αρχείου ως είσοδο # sort < /root/filelist • Για να προωθήσουμε την έξοδο μιας εντολής στην είσοδο μιας άλλης – χρησιμοποιούμε το επίθεμα | # who | sort --ταξινόμηση καταλόγου χειριστών # ls /root | grep rc | wc –l --καταμέτρηση αρχείων ’rc’

∆ιεργασίες • Μπορούμε να εκτελέσουμε εντολές σειριακά διαχωρίζοντας τις εντολές με ; • Εκτελούνται όλες οι εντολές και όταν ολοκληρωθεί και η τελευταία, προσφέρεται νέο prompt # who | sort ; date • Μπορούμε να εκτελέσουμε εντολές παράλληλα διαχωρίζοντας τις εντολές με & • Εκτελούνται όλες οι εντολές και προσφέρεται άμεσα νέο prompt # pr junk | lpr & • Η εκτέλεση μια εντολής ειναι μια διεργασία • Η εντολή ps εμφανίζει τις τρέχουσες διεργασίες • Η εντολή wait περιμένει μέχρι να ολοκληρωθούν όλες οι εντολές που εκτελέστηκαν με &

Κατάλογος διεργασιών • Παράμετρος a -- εμφάνιση διεργασιών που δημιουργήθηκαν από κονσόλες Στήλη PID -- μοναδική ταυτότητα διεργασίας Στήλη TTY -- κονσόλα που δημιούργησε την διεργασία • Στήλη TIME -- συνολικός χρόνος εκτέλεσης • Στήλη CMD -- εντολή που εκτελέστηκε # ps –a PID TTY TIME CMD 106 c1 0:01 -sh 4114 co 0:00 /bin/sh /usr/bin/packman 2114 co 0:00 -sh 6762 c1 0:00 ps –a 87 c2 0:00 getty 90 c3 0:00 getty

Εργαλεία διαχείρισης διεργασιών • Τερματισμός διεργασίας – εντολή kill [PID] • Μπορούμε να εκτελέσουμε μια εντολή με διαφορετική προτεραιότητα • πρόθεμα nice # nice pr junk | lpr & • Μπορούμε να καθυστερήσουμε την εκτέλεση μιας εντολής • πρόθεμα at # at 1500 ls -l / /root /dir | wc > allfiles pr allfiles | lpr ; date > lpr-endtime & date > lpr-starttime ˆD at: /usr/spool/at/ created #

Μεταβλητές Περιβάλλοντος • Μπορούμε να χρησιμοποιούμε τις μεταβλητές από την γραμμή εντολών • Χρησιμοποιούμε τον τελεστή $ bash-3.00# myvar="hello"; echo $myvar hello bash-3.00# myvar="ls -la" bash-3.00# $myvar drwxr-xr-x2 ako2 staff Jan 13:44 Applications drwx ako2 staff Mar 12:32 Desktop drwx ako2 staff Mar 11:55 Documents bash-3.00#

Χειρισμός Μεταβλητών • Οι εντολές env, printenv εμφανίζουν την λίστα με τις ΚΑΘΟΛΙΚΕΣ μεταβλητές • Η εντολή set εμφανίζει την λίστα με τις ΤΟΠΙΚΕΣ μεταβλητές • Για να ορίσουμε μια ΚΑΘΟΛΙΚΗ μεταβλητή χρησιμοποιούμε την εντολή export • ∆ήλωση μεταβλητών σύμφωνα με το περιεχόμενο • String variables -- myvar = "value» • Integer variables -- declare -i myvar • Constant variables -- readonly me="ichatz" • Array variables -- declare -a MYARRAY MYARRAY[0]="one"; MYARRAY[1]=5; echo ${MYARRAY[*]} • Τα ονόματα των μεταβλητών είναι case-sensitive • Η εντολή unset διαγράφει μια μεταβλητή

Τοπικές – Καθολικές Μεταβλητές • Για να ορίσουμε μια ΚΑΘΟΛΙΚΗ μεταβλητή χρησιμοποιούμε την εντολή export 1o shell 2o shell Κλείνω 2 ο shell 2o shell

Κέλυφος και κείμενο • Το κέλυφος είναι ένα περιβάλλον προγραμματισμού: μπορούμε να γράψουμε τα δικά μας προγράμματα (shell scripts) σαν μια γραμμή στη γραμμή εντολών ή σαν αυτόνομα αρχεία script.sh • που δηλώνουν και χειρίζονται μεταβλητές $var • που δέχονται εντολές ροής ελέγχου (if-else, for, break... ) • που δέγονται ορίσματα ($1, $2) που κάνουν αριθμητικές πράξεις (expr $tmp = $tmp + 1) • που χρησιμοποιούν δυνατότητες του κελύφους (pipes, I/O redirection) • Στο Unix τα πάντα είναι ένα αρχείο - θέλουμε να μπορούμε να χειριστούμε απλά κείμενο, ειδικά την έξοδο εντολών • Οι ουσιαστικές πληροφορίες διαχείρισης του συστήματος καταγράφονται σε κείμενο : /proc, /etc, /etc/rc.d, /usr/src...

∆ημιουργία Νέων Εντολών • Μπορούμε να δημιουργήσουμε νέες εντολές • Σε ένα αρχείο κειμένου εισάγουμε τις εντολές • Εκτελούμε την νέα εντολή με την χρήση του sh • Ορίζουμε πρόσβαση εκτέλεσης στο αρχείο και το ‘καλούμε’ απευθείας • Μπορούμε να περάσουμε παραμέτρους σε ένα script • Ονομάζονται command-line arguments • Χρησιμοποιούμε τις παραμέτρους σαν μεταβλητές • ∆υνατότητα μαθηματικών εκφράσεων με ακέραιους

Σύνδεση με τα προηγούμενα • Από που αντλείται η δύναμη του προγραμματισμού SHELL ? • Στο Unix όλα είναι ένα αρχείο → output redirection είναι βασικά εγγραφή/ανάγνωση κατάλληλων file descriptors. • Το περιβάλλον του κελύφους έχει λογική όπως οι γλώσσες προγραμματισμού: for, foreach, if-else, switch, variables, evaluation... • Υπάρχουν άπειρες μικρές εντολές των οποιών τα αποτελέσματα, χρήσει των παραπάνω, μπορούν να συνδυαστούν: finger Bob | grep Login | awk’{print$2":"$4""$5}’| lp • ∆ιαχείριση κειμένου δίνει επιπλέον δύναμη: sed και awk.

Γενικά για τον sed • sed: Stream Editor: • Είσοδος από αρχείο ή pipe - έξοδος αντίστοιχα • Φιλτράρει και επεξεργάζεται το κείμενο εισόδου και το δίνει στην έξοδο, τροποιημένο κατά τον τρόπο που επισημάνθηκε και δίχως ισχυρή επανατροφοδότηση: συνήθως με κάποια εύρεση pattern και αντικατάσταση. • Επεξεργάζεται αρχεία κειμένου ανά γραμμές • Τον χρησιμοποιούμε όταν η γνώση για την πληροφορία δεν βρίσκεται τόσο στη δομή του αρχείου (γραμμές, στήλες) όσο στο κείμενο του

Αρχές Λειτουργίας • pattern space = το υφιστάμενο κείμενο όπως επεξεργάζεται (data buffer) • while (readline) { • διαβάζει μια γραμμή εισόδου από το προκαθορισμένο ρεύμα εισόδου ή από αρχείο, μια-μια κάθε φορά, στο χώρο προτύπων • σε κάθε γραμμή, ο sed εκτελεί μια σειρά από εντολές επεξεργασίας (που έχουν γραφτεί από το χρήστη) επί του pattern space • γράφει το χώρο προτύπων στο ρεύμα εξόδου }

Σύνταξη εντολής • sed ’ ’ • address: ένας αριθμός γραμμής του κειμένου εισόδου ή ένα πρότυπο που εμπεριέχεται σε slashes ( /pattern/ ). Καθορίζει που θα εφαρμοστεί η εντολή, σε ποιές γραμμές - αν δεν ορίζεται, η sed θα εφαρμοστεί σε κάθε γραμμή της εισόδου • Το πρότυπο περιγράφεται με regular expressions, όπως η grep • Εάν δοθούν δυο διευθύνσεις χωρισμένες με κόμμα (,), η εντολή λειτουργεί στο πεδίο γραμμών μεταξύ της πρώτης και δεύτερης διεύθυνσης, συμπεριλαμβανομένων των ιδίων • ! = NOT (εφαρμογή στις διευθύνσεις εκτός αυτών που περιγράφηκαν)

Συνήθεις Εντολές Επεξεργασίας

Αντικατάσταση • Η πλέον συνήθης εντολή: • sed s ’pattern/replacement/ ’ • pattern: πρότυπο που αναζητούμε • replacement: το string που θα αντικαταστήσει το πρότυπο • flags (προεραιτικά): • n (number): ποια τον αριθμό εμφάνιση του προτύπου θα αντικατασταθεί • g (global): αντικατάσταση όλων (όχι μόνο της πρώτης εμφάνισης) των προτύπων που εμφανίζονται στην τρέχουσα γραμμή • p (print): εκτύπωση του περιεχομένου του pattern space

Αρχείο προς παραδειγματισμό! • bash-3.1# cat -n example.sed 1 This is the first line of an example text. 2 It is a text with erors. 3 Lots of erors. 4 So many erors, all these erors are making me sick. 5 This is a line not containing any errors. 6 This is the last line.

Παραδείγμα 1 • bash-3.1# sed ’s/erors/errors/g’ example.sed This is the first line of an example text. It is a text with errors. Lots of errors. So many errors, all these errors are making me sick. This is a line not containing any errors. This is the last line. Τι θα συμβεί αν στην εντολή αντικαταστήσουμε το g με τον αριθμό 2; Τι αν το απομακρύνουμε εντελώς;

Παραδείγμα 2 ˆ Αρχή γραμμής - $ Τέλος γραμμής bash-3.1# sed ’s/ˆ/> /’ example.sed > This is the first line of an example text. > It is a text with erors. > Lots of erors. > So many erors, all these erors are making me sick. > This is a line not containing any errors. > This is the last line. Τι θα συμβεί αν στην εντολή αντικαταστήσουμε το ˆ με $ ;

Παραδείγμα 3 • bash-3.1# sed -e ’s/erors/errors/g’ -e ’s/last/final/g’ example.sed • (ή, εναλλακτικά) • sed ’s/erors/errors/g; s/last/final/g’ example.sed This is the first line of an example text. It is a text with errors. Lots of errors. So many errors, all these errors are making me sick. This is a line not containing any errors. This is the final line.

́Αλλοι ειδικοί χαρακτήρες • _ ή (κόμμα) Μπορούν να πάρουν τη θέση του / για αναγνωσιμότητα • \: escape character • & Αντιστοιχεί στο πρότυπο που έχει βρεθεί (αναφερόμαστε πάντα στην τρέχουσα γραμμή) • Προσοχή στο τι αποτελεί σύμβολο regular expression και τι όχι

Παραδείγμα 4 • bash-3.1# sed ’s/[ˆ ]*/(&)/’ example.sed (This) is the first line of an example text. (It) is a text with erors. (Lots) of erors. (So) many erors, all these erors are making me sick. (This) is a line not containing any errors. (This) is the last line. Τι θα συνέβαινε αν το pattern ήταν • [^a-z]/+/ ?

Παραδείγμα 5 • Εκτύπωση μόνο των γραμμών που υπακουούν στο πρότυπο μετά την αλλαγή τους κατά τους όρους της αντικατάστασης που ορίστηκε: • bash-3.1# sed -n ’s/erors/errors/gp’ example.sed It is a text with errors. Lots of errors. So many errors, all these errors are making me sick.

Εστίαση σε συγκεκριμένες γραμμές • Μπορούμε να εστιάσουμε σε συγκεκριμένες γραμμές τις αλλαγές μας, δηλώνοντας τις γραμμές με τον αριθμό τους. • bash-3.1# sed ’1,3 s/erors/errors/g’ example.sed This is the first line of an example text. It is a text with errors. Lots of errors. So many erors, all these erors are making me sick. This is a line not containing any erors. This is the last line.

Εστίαση σε συγκεκριμένες γραμμές • Το ίδιο μπορούμε να κάνουμε δίνοντας ένα κοινό τους pattern • bash-3.1# sed ’/line/li/re’ example.sed • This was the first rene of an example text. • It is a text with errors. • Lots of errors. • So many errors, all these erors are making me sick. • This was a rene not containing any errors. • This was the last rene.

∆ιαγραφή sed -e ’/\/\ * /,/\ * \// s/.\+//’ -e ’s/ˆ[ \t]\+//’ -e’/ˆ$/ d’ file.c

sed -- απλά παραδείγματα • Αντικάτεστησε το "foo" με το "bar" μόνο στις γραμμές που περιέχουν το "baz" • sed ’/baz/s/foo/bar/g’ • Σβήσε τα κενά από την αρχή και από το τέλος κάθε γραμμής • sed ’s/ˆ[ \t]*//;s/[ \t]*$//’ • Πρόσθεσε 5 κενά στην αρχή κάθε γραμμής • sed ’s/ˆ/ /’ • Σβήσε όλες τις κενές γραμμές από ένα αρχείο (όπως η "grep ’.’ ") • sed ’/ˆ$/d’

Γενικά για την awk • awk: Alfred Aho, Peter Weinberger, and Brian Kernighan • mini Γλώσσα προγραμματισμού σχεδιασμένη να βρίσκει και να ταιριάζει πρότυπα και να εκτελεί εντολές σε αυτά → Perl • Μπορεί να επενεργήσει επί των δεδομένων εισόδου της με σύνθετες, αναδρομικές συναρτήσεις (όπως στη C) • Επεξεργάζεται αρχεία κειμένου ανά πεδία • Τον χρησιμοποιούμε περισσότερο όταν η γνώση για την πληροφορία βρίσκεται στη δομή του αρχείου (γραμμές, στήλες) • Για πιο σύνθετες πράξεις, όπως αναδρομική εργασία σε συμβολοσειρές ή η μορφοποίηση εξόδου • ́Οταν είναι απαραίτητες ευκολίες μιας υψηλού επιπέδου C-like γλώσσας, όπως πίνακες και εντολές ελέγχου ροής

Χαρακτηριστικά • Σε σύνταξη μοιάζει με τη C • Χειρίζεται την είσοδο, το διαχωρισμό πεδίων και τη διαχείριση μνήμης αυτόματα • Ενσωματωμένοι τύποι δεδομένων για συμβολοσειρές και αριθμούς • ́Οχι δηλώσεις τύπων μεταβλητών • Κατάλληλη αριθμητική επεξεργασία • Μεταβλητές και ροή ελέγχου στις ενέργειες • Βολικός τρόπος πρόσβασης πεδίων μέσα σε γραμμές • Ευέλικτη εκτύπωση • Ενσωματωμένες συναρτήσεις αρίθμησης και συμβολοσειρών

∆ομή • ́Ενα πρόγραμμα awk αποτελείται από: • ́Ενα προεραιτικό βήμα που εκτελείται πριν το διάβασμα εισόδου BEGIN • ́Ενα ζευγάρι πρότυπο – ενέργεια (pattern -- action) • επεξεργάζεται τα δεδομένα ειδόδου • εφαρμόζει την εντολή action για κάθε matching • ́Ενα προεραιτικό βήμα που εκτελείται μετά το διάβασμα εισόδου END

Πεδία και τελεστές • ́Ενα πρόγραμμα awk μπορεί να είναι ιδιαίτερα πολύπλοκο. • Για να τρέξουμε ένα awk πρόγραμμα μπορούμε να δώσουμε ένα σύντομο program και input files (προεραιτικά, αφού τα δεδομένα μπορεί να έρχονται από pipe ή redirection) ως ορίσματα γραμμής εντολής • awk ’program’ [input_file(s)] • ́Η στη θέση του ’program’ να δώσουμε ένα αρχείο με τις εντολές που αυτό θα περιέχει: • awk -f program_file input_files

Δομή προτύπων - ενεργειών • Κάθε εντολή προγράμματος πρέπει να έχει ένα πρότυπο ή μια ενέργεια ή και τα δυο • Εξ’ ορισμού (προκαθορισμένο) πρότυπο είναι να ταιριάξει με όλες τις γραμμές • Εξ’ ορισμού (προκαθορισμένη) ενέργεια είναι να εκτυπώσει την υφιστάμενη καταγραφή • Τα πρότυπα απλά παρατίθενται, ενώ οι ενέργειες εσωκλείονται μέσα σε { } • Η awk ανιχνεύει μια ακολουθία γραμμών, μια-μια, ψάχνοντας για γραμμές που ταιριάζουν με το πρότυπο

Πρότυπα • Προσδιορισμός κατά πόσον μια ενέργεια-δράση πρόκειται να εκτελεστεί • Μπορεί να είναι: • Το ειδικό token BEGIN ή END • Κανονική έκφραση (εσωκλειόμενο μέσα σε / /) • Σχεσιακές ή string αντιστοιχίες εκφράσεων – > = <= == • Το σύμβολο ! δίνει το αντίθετο της αντιστοιχίας • Συνδυασμός των πιο πάνω χρησιμοποιώντας λογικούς τελεστές && ή || • π.χ. /NYU/ && (name == “UNIX Tools”) • Pattern1 ? Pattern2 : Pattern3 • If Pattern1 is true, then Pattern2, else Pattern3

Ενέργειες-δράσεις • Περιλαμβάνει λίστα από εκφράσεις όπως στη C • ++ Increment, -- Decrement • ^ Exponentiation • +-! Πρόσθεση, Αφαίρεση, Άρνηση • * / % Πολλαπλασιασμός, διαίρεση, modulus • Εκτελείται για κάθε γραμμή που ταιριάζει το πρότυπο • Εάν δε δοθεί πρότυπο, η δράση εκτελείται για κάθε γραμμή εισόδου • Εάν δε δοθεί δράση, όλες οι γραμμές που ταιριάζουν με το πρότυπο στέλλονται στο ρεύμα εξόδου

Εγγραφές (records) • Κάθε γραμμή της εισόδου είναι ένα record • Το υφιστάμενο record μπορεί να παραπεμφθεί με το σύμβολο $0 • Πεδίο – Field • Κάθε λέξη σε ένα record ονομάζεται πεδίο (field) • Κάθε πεδίο αριθμείται και παραπέμπεται ως εξής: – $1 είναι η πρώτη λέξη, $2 είναι η δεύτερη λέξη κλπ

Ειδικές προκαθορισμένες μεταβλητές • RS • Ο χαρακτήρας που δρα ως ο οριοθέτης του record • Εξ’ ορισμού είναι το τέλος της γραμμής (newline) • Μπορεί να αλλάξει στην BEGIN ενέργεια • FS • Ο χαρακτήρας που δρα ως ο οριοθέτης του πεδίου (field) • Εξ’ ορισμού είναι το white space (κενό διάστημα, tab κλπ) • Μπορεί να ξανα-ορισθεί με την –F επιλογή • » awk –Fc : ρυθμίζει το FS με το χαρακτήρα c • Μπορεί να αλλάξει και στην BEGIN ενέργεια • NF • Αριθμός πεδίων στο υφιστάμενο record • NR • Συνολικός αριθμός records που έχουν διαβαστεί μέχρι στιγμής • OFS • Output Field Separator • Εξ’ ορισμού είναι το μονό κενό διάστημα • ORS • Output Record Separator

Παραδείγμα 1 • Εκτύπωσε όλη την είσοδο τυπώνοντας πριν ένα START και μετά ένα STOP • awk ’BEGIN {print "START"} • {print $0} • END {print "STOP"}’ • foo.txt • Εκτύπωσε μου τα ονόματα των αρχείων στον τρέχων κατάλογο και τους χρήστες τους ls -l | awk ’ BEGIN { print "File\tOwner" } { print $8, "\t", $3} END { print "done"} ’ Προσέξτε τα αυτάκια ! Αν τα ξεχάσετε, το πρόγραμμα σας δε θα τρέξει !

Παραδείγμα 2 • bash-3.1# cat example.awk Line number 1 Line number 2 Line number 3 Line number 4 bash-3.1# awk ’BEGIN {print "Hello you"} /2/ {print $0} END {print "goodbye"}’ example.awk Hello you Line number 2 goodbye

Παραδείγμα 3 • Εκτύπωσε τις γραμμές των οποίων τα πεδία είναι > 3 και καλύπτουν το πρότυπο /file/ αλλιώς εκτύπωσε τις γραμμές των οποίων τα πεδία είναι ≤ 3 και ξεκινούν με το and bash-3.1# cat example2.awk Just a text file. Nothing to see here. Some lines have more fields than others and some ( <- blank line) are blank. bash-3.1# awk ’NF>3 ? /file/ : /ˆand/ {print $0}’ example2.awk Just a text file. Nothing to see here. and some

Παραδείγμα 4 • Εκτύπωσε όλα τα αρχεία μη μηδενικού μεγέθους με κατάληξη.txt bash-3.1# ls -l | awk ’BEGIN {print "List of all.txt files"} /.txt$/ && $5>0 {print "line number:" NR, "file", $9, "of size:", $5} END {print "OK!!"}’ List of all.txt files line number:9 file file+1.txt of size: 10 line number:12 file output.txt of size: 4898 line number:13 file processes.txt of size: line number:16 file test-cut.txt of size: 55 line number:19 file test-sort.txt of size: 124 line number:20 file test-tr.txt of size: 40 OK!!

awk -- απλά παραδείγματα (1) • Τύπωσε τις δύο πρώτες στήλες (default FS=" ") με αντίστροφη σειρά • awk ’{ print $2, $1 }’ file • Τύπωσε τη στήλη 3 αν η στήλη 1 είναι μεγαλύτερη από τη στήλη 2 • awk ’$1 > $2 {print $3}’ file • Τύπωσε τη γραμμή εμφάνισης, τον αριθμό των στηλών και τη στήλη 1 κάθε γραμμής • awk ’{print NR, NF, $1}’ file • Εκτύπωσε το 2 ο πεδίο σε ένα αρχείο όπου τα πεδία είναι χωρισμένα με ? • awk –F “?” ‘{print $2}’ file • Τύπωσε το αρχείο file αφού διαγράψεις τη 2η στήλη του • awk ’{$2 = ""; print}’ file

Μεταβλητές • Η awk μπορεί να ορίσει και να χρησιμοποιήσει μεταβλητές • BEGIN { sum = 0 } { sum ++ } END { print sum } • Οι μεταβλητές αυτές μπορούν να πάρουν αριθμητική (ακέραια ή πραγματική) τιμή ή συμβολοσειρά • ΔΕ ΔΗΛΩΝΟΝΤΑΙ • Εξ’ ορισμού, οι μεταβλητές που ορίζουμε αρχικοποιούνται με την αριθμητική τιμή 0 ( ->null string)

awk -- απλά παραδείγματα (2) • Τύπωσε όλες τις γραμμές που διαφέρουν ανά δύο στην πρώτη στήλη • awk ’$1 != prev { print; prev = $1 }’ file • Τύπωσε μόνο την τελευταία γραμμή • awk ’{line = $0} END {print line}’

awk - μεταβλητές, ροή ελέγχου • Λειτουργίες με μεταβλητές: • Βρες το άθροισμα και τον μέσο όρο των αριθμών της 1ης στήλης • awk ’{ s += $1 } END {print "sum is", s, " average is", s/NR}’ • Ροή ελέγχου: for loop • Τύπωσε όλες τις στήλες με αντίθετη σειρά • awk ’{ for (i = NF; i > 0; --i) print $i }’ file • Ροή ελέγχου: if-else • Τύπωσε όλες τις μη κενές γραμμές των οποίων οι δυο πρώτες στήλες είναι ίσες • awk ’NF > 0 { if($1 == $2) print $0}’ file

awk - μορφοποίηση εξόδου και συνδυασμοί • Μορφοποίηση με printf • Τύπωσε και στοίχισε όλα τα αρχεία < 1000 bytes και τα μεγέθη τους • ls -l | awk ’ {if($5<1000) printf ("File: %10s - Size %5d\n", $9, $5)}’ ̃ }’ • Συνδυαστικό παράδειγμα • Πρόσθεσε τους αριθμούς από τις πρώτες μισές γραμμές του file awk ’ { while(counter <= NR/2 ){ for(i=1 ; i<=NF; i++) sum += $i counter++ } } END {printf("sum of first %2d lines: %3d\n", counter, sum)}’ file

Σύνοψη Μαθήματος • Περιβάλλον προγραμματισμού UNIX • Ο επεξεργαστής ροών κειμένου sed • Η γλώσσα προγραμματισμού για διαχείριση κειμένων awk

Βιβλιογραφία • Βιβλίο ‘Το περιβάλλον Προγραμματισμού UNIX’’ (B.Kernighan, R.Pike) • Κεφάλαιο 4: Φίλτρα

Επόμενη ∆ιάλεξη • Εισαγωγή στο Λ.Σ. MINIX 3 Επανάληψη από μάθημα ‘Λειτουργικά Συστήματα Ι’ Κεφάλαιο 1: Παραδοσιακά Λειτουργικά Συστήματα Κεφάλαιο 2: ∆ιεργασίες • Αντίστοιχα κεφάλαια από ‘Σύγχρονα Λειτουργικά Συστήματα’ (A.Tanenbaum)