Εργαστήριο 4: Εργαλεία Συστήματος UNIX Στο εργαστήριο θα μελετηθούν: Εργαστηριακή Άσκηση 2 Παραδείγματα χρήσης awk Αρίθμηση και Μαθηματικοί Υπολογισμοί Βρόγχοι Πίνακες Διδάσκων: Γιώργος Χατζηπολλάς 3-1
Εργαστηριακή Άσκηση 2 Γενικά Θέμα: η υλοποίηση ενός προγράμματος συλλογής και ανάλυσης ιστοσελίδων HTML (Hypertext Markup Language) απότοπαγκόσμιο Πλέγμα Πληροφοριών Στόχος: η εξοικείωση με προχωρημένες τεχνικές προγραμματισμού στο κέλυφος Bash, και η εκτίμηση της ευκολίας με την οποία μπορεί κανείς να δημιουργήσει ένα σύνθετο προγράμματα, μέσω system utilities. εντολή exec, πίνακες, διαχείριση σημάτων (signals), συνθήκες ελέγχου, δομές επανάληψης, regular expressions, stream editors (sed, awk) και χρήση συναρτήσεων με τα προαναφερθέντα. Σκοπός: ησυγγραφήενόςεξειδικευμένουcrawler, ο οποίοςθα διανύει ένα υποσύνολο των ιστοσελίδων του Τμήματος Πληροφορικής, τις αποθηκεύει στο /tmp, και στην συνέχεια θα δημιουργεί ένα μεγάλο λεξικό με την συχνότητα εμφάνισης λέξεων στοανακτημένοσύνολοιστοσελίδων. Αυτή η διαδικασία θα πρέπει να επαναλαμβάνετε αυτόματα δυο φορές την μέρα. 3-2
Εργαστηριακή Άσκηση 2 Ανάκτηση Ιστοσελίδας Βήματα ανάκτησης της ιστοσελίδας του τμήματος πληροφορικής στο κέλυφος bash 1. Άνοιγμα ενός καναλιού επικοινωνίας (tcp socket) με τον διαθέτη www.cs.ucy.ac.cy, στην θύρα 80, για ανάγνωση/γραφή. exec 5<>/dev/tcp/www.cs.ucy.ac.cy/80 2. Αποστολή αίτησης για ανάκτηση της σελίδας /index.html echo -e "GET /index.html HTTP/1.0\n" >&5 3. Εκτύπωση του αποτελέσματος στην οθόνη cat <&5 4. Κλείσιμο της κατεύθυνσης εξόδου του καναλιού exec 5>&- 5. Κλείσιμο της κατεύθυνσης εισόδου του καναλιού exec 5<&- Βάση της επικεφαλίδας του html αρχείου μπορούμε να δούμε κατά πόσο η σελίδα έχει κατέβει εντάξει ή υπάρχει κάποιο πρόβλημα 3-3
Εργαστηριακή Άσκηση 2 Αράχνη (Crawler) Κατά βάθος διερεύνηση (breadth-first-traversal) του γράφου που εκφράζει τον δικτυακό χώρο του http://www.cs.ucy.ac.cy/. Οι εξωτερικοί σύνδεσμοι πρέπει να αγνοούνται To βάθος διερεύνησης (depth) θα δίνεται από τον χρήστη είτε ως command line parameter είτε ως αρχείο εισόδου Ανάκτηση μόνο.htm,.html και text αρχείων Οι ιστοσελίδες πρέπει να αποθηκεύονται στο /tmp/$userid/data με την χρήση δομημένου καταλόγου, ο οποίος είναι πανομοιότυπος με τον κατάλογο του διαθέτη WWW /tmp/$userid/data/www.cs.ucy.ac.cy/index.html /tmp/$userid/data/www.cs.ucy.ac.cy/education/index.html /tmp/$userid/data/www.cs.ucy.ac.cy/people/graduate.html Δημιουργία του αρχείου brokenurl.txt περιέχει όλα τα URLs τα οποία δεν είναι προσβάσιμα. http://www.cs.ucy.ac.cy/indexxxxx.html http://www.cs.ucy.ac.cy/indexxυυxx.html 3-4
Εργαστηριακή Άσκηση 2 Επεξεργαστής Λεξιλογίου η δημιουργία ενός φίλτρου το οποίο επεξεργάζεται κάθε ανακτημένη ιστοσελίδα και εξάγει όλες τις λέξεις. Στις λέξεις αυτές, δεν περιλαμβάνονται τα HTTP headers, τα HTML tags, και οι ειδικοί χαρακτήρες HTML HTML TAG: Οτιδήποτε περικλείεται μεταξύ των συμβολών < >. π.χ. <html> <a href=ssss>, <td bgcolor= red width= 100% > HTML Ειδικοί Χαρακτήρες: Οτιδήποτε περικλείεται μεταξύ & και ; π.χ. & &nsbp; Á HTTP headers: Οτιδήποτε περικλείεται μεταξύ των συμβολών HTML TAGS <head> και </head> Το σύστημα δημιουργεί πάντοτε το λεξικό, ανεξάρτητα εάν διακοπεί η λειτουργία του προγράμματος από κλείσιμο του κελύφους. To σύστημα επαναλαμβάνει την δημιουργία του λεξικού 2 φορές την μέρα και αποθηκεύετε με κατάληξη την ημερομηνία και ώρα ανάκτησης. Το λεξικό είναι case-insensitive. 3-5
Εργαστηριακή Άσκηση 2 Γενικές Οδηγίες Το σύστημα δεν αφήνει ποτέ άχρηστα και μεταβατικά αρχεία στον δίσκο, ανεξάρτητα εάν διακοπεί η λειτουργία του προγράμματος από κλείσιμο του κελύφους; Το σύστημα πρέπει να χρησιμοποιεί τεχνικές δομημένου προγραμματισμού με την χρήση συναρτήσεων Το σύστημα πρέπει να ελαχιστοποιεί την χρήση πόρων του συστήματος (αρχεία, μνήμης, κτλ); Το σύστημα πρέπει να μειώνει όσο το δυνατό περισσότερο τον χρόνο διεκπεραίωσης της ανάκτησης και επεξεργασίας των δεδομένων. Σημειώστε ότι η πιο πάνω περιγραφή θα σας επιτρέψει να δημιουργήσετε ένα σχετικά απλό crawler η οποία και αποτελεί την ελάχιστη προδιαγραφή του συστήματος που πρέπει να παραδώσετε. 3-6
Χρήση μεταβλητών στην awk Παραδείγματα Οι μεταβλητές αυτές μπορούν να πάρουν αριθμητική (ακέραια ή πραγματική) τιμή ή συμβολοσειρά ΔΕ ΔΗΛΩΝΟΝΤΑΙ Εξ ορισμού, οι μεταβλητές που ορίζουμε αρχικοποιούνται με την αριθμητική τιμή 0 ( null string) Παραδείγματα BEGIN { sum = 0 } { sum ++ } END { print sum } Μετρά τον αριθμό των γραμμών της εισόδου Χρήση μεταβλητής NR awk 'END{print NR}' 3-7
Χρήση μεταβλητών στην awk Παραδείγματα Έστω ότι έχουμε ένα αρχείο με 3 στήλες Ταυτότητα Μισθός ανά ώρα Ώρες Εργασίας Τυπώνει τον αριθμό των υπαλλήλων που δούλεψαν περισσότερες από 15 ώρες $3 > 15 { emp = emp + 1} END { print emp, employees worked more than 15 hrs } { pay = pay + $2 * $3 } END { print NR, employees print total pay is, pay print average pay is, pay/nr } Τυπώνει τον αριθμό των υπαλλήλων, το συνολικό κόστος πληρωμής καιτομέσομισθό 3-8
Χρήση μεταβλητών στην awk Παραδείγματα Αρίθμησης και Υπολογισμού Τυπώστε το συνολικό μέγεθος των αρχείων σε Mb που βρίσκονται στον τρέχον φάκελο και έχουν αλλαχτεί κατά το μήνα Νοέμβριο. ls -lg awk '$5 == "Nov" { sum += $6 } END { print sum Mb } Τυπώστεόλεςτιςγραμμέςγιατιςοποίεςτοπρώτοπεδίοείναι διαφορετικό από την προηγούμενη awk '$1!= prev { print; prev = $1 }' file Τυπώστεκαιταξινομίστεμεαντίστροφηαλφαβητικήσειράόλατα login names (πρώτη στήλη) που βρίσκονται στο αρχείο /etc/passwd awk -F ":" '{ print $1 }' /etc/passwd sort -r awk -F ":" '{ print $1 "sort -r" }' /etc/passwd 3-9
Χρήση μεταβλητών στην awk Παραδείγματα Χρήσης Βρόγχων Γράψετε ένα awk script το οποίο παίρνει ένα αρχείο με τρείς στήλες, προσθέτει τις στήλες κάθε γραμμής και υπολογίζει το άθροισμά τους. Το αποτέλεσμα πρέπει να φαίνεται ως μαθηματικές πράξεις BEGIN {print "Print Totals"} {total = $1 + $2 + $3} {print $1 " + " $2 " + " $3 " = "total} END {print "End Totals"} Τυπώστε κάθε πεδίο κάθε γραμμής του αρχείου filename σε ξεχωριστή γραμμή awk '{for(i=1;i<=nf;i++) print $i }' filename Αντίστρεψε τις γραμμές του αρχείου filename awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' filename 3-10