Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης
Περίληψη Προηγούμενου Επισκόπηση αρχείων και επεξεργασία κειμένου Εντολές file, wc, more, less, df Επεξεργαστές κειμένου nano, vi
Σημερινό μάθημα Δικαιώματα πρόσβασης σε αρχεία Ιστορικό εντολών και επανεκτέλεσηεντολών history Φίλτρα head, tail, sort Ανακατεύθυνση δεδομένων(redirection) και Σωλήνωση διεργασιών (piping) και Αναζήτηση αρχείων (find) και αναζήτηση μοτίβου (grep)
Δικαιώματα πρόσβασης σε αρχεία (File Permissions) Προσδιορίζουν τι μπορεί και τι δεν μπορεί να κάνει ο κάθε χρήστης σε κάποιο αρχείο ή φάκελο Είναι απαραίτητα για τη ασφάλεια του όλου συστήματος Αρχεία, προγράμματα και λειτουργικό Παράδειγμα: Δεν θέλετε άλλοι χρήστες να βλέπουν τα αρχεία σας Δεν πρέπει να διαγραφούν αρχεία του συστήματος κατά λάθος Ο μόνος χρήστης που μπορεί να έχει πρόσβαση σε όλα τα αρχεία είναι ο διαχειριστής (root) Η αλλαγή δικαιωμάτων πρόσβασης σε αρχεία και φακέλους είναι πολύ εύκολη διαδικασία στο linux
Τι είναι τα permissions Υπάρχουν 3 είδη πρόσβασης τα για ένα αρχείο ή φάκελο και συμβολίζονται με 3 γράμματα: r read - μπορείς να διαβάσεις τα περιεχόμενα ενός αρχείου/φακέλου w write - μπορείς να αλλάξεις τα περιεχόμενα ενός αρχείου/φακέλου x execute μπορείς να εκτελέσεις το αρχείο, εάν αυτό είναι το εκτελέσιμο ενός προγράμματος ή για ένα directory εκτελέσιμο σημαίνει ότι κάποιος χρήστης μπορεί να εισέλθει σε αυτό με την εντολή cd Για κάθε αρχείο/φάκελο υπάρχουν 3 είδη χρηστών για τους οποίους μπορείς να προσδιορίσεις permissions u owner ο ιδιοκτήτης, ο χρήστης στον οποίο ανήκει το αρχείο/φάκελος g group - κάθε αρχείο ανήκει σε ένα μοναδικό group o others υπόλοιποι: οι χρήστες που δεν είναι ούτε ο ιδιοκτήτης ούτε το group Δηλαδή τρία είδη πρόσβασης για τρία είδη χρηστών
Εμφάνιση δικαιωμάτων ls l, π.χ. $ ls -l cylinder.py -rwxr-xr-x 1 mary students 171 Jun 8 11:37 cylinder.py
Αλλαγή δικαιωμάτων Με την εντολή chmod. Σύνταξη: chmod [permissions] [path] Όπου [permissions]: 1. Για ποιόν αλλάζουμε δικαιώματα? [ugoa] - user (or owner), group, others, all 2. Πρόσθεση ( + ) ή αφαίρεση δικαιώματος ( - )? 3. Ποιο δικαίωμα αλλάζουμε? - read ( r ), write ( w ) or execute ( x ) Παραδείγματα: chmod g+wx frog.png chmod go-x data.txt chmod a+rwx *
Ιστορικό Εντολών Κάθε φορά που ο χρήστης εκτελεί μια εντολή στο terminal, η εντολή αποθηκεύεται σε ένα κρυφό αρχείο Αυτό μου επιτρέπει να επανεκτελώ εντολές που έχω εκτελέσει στο παρελθόν, χωρίς να τις ξαναγράφω, π.χ. με βελάκια Για να δω όλες τις εντολές που έχουν καταχωρηθεί στο ιστορικό χρησιμοποιώ την εντολή history Μου παράγει λίστα με κάθε εντολή αριθμημένη, π.χ.: 501 pwd 502 ls -l cylinder.py 503./cylinder.py 504 man history 505 history Για να επανεκτελέσω μια εντολή μπορώ επίσης να δώσω στο terminal θαυμαστικό (!) ακολουθούμενο από το νούμερό της εντολής στο ιστορικό: $!502 ls -l cylinder.py -rwxr-xr-x 1 Administrators None 171 Jun 8 11:37 cylinder.py
Άσκηση Βρείτε το αρχείο όπου αποθηκεύεται το ιστορικό του χρήστη στο ubuntu και στο cygwin
Φίλτρα Στο Linux τα φίλτρα είναι βοηθητικά προγράμματα τα οποία διαβάζουν αρχεία ASCII και τα μετασχηματίζουν με κάποιο τρόπο. Παράδειγμα Δείξε τις 4 πρώτες γραμμές από το αρχείο mydata.txt head -4 mydata.txt Δείξε τις 10 τελευταίες γραμμές tail -10 mydata.txt Ταξινόμησε αλφαβητικά τις γραμμές ενός αρχείου: sort mydata.txt
Ροές Δεδομένων προγραμμάτων Κάθε διεργασία που εκτελείται στο command line συσχετίζεται με τρεις ροές δεδομένων (data streams): STDIN (0) - Standard input (δεδομένα εισόδου στο πρόγραμμα) STDOUT (1) - Standard output (δεδομένα εξόδου) STDERR (2) - Standard error (μηνύματα λάθους) Η σωλήνωση και η ανακατεύθυνση αφορά τον τρόπο με τον οποίο ενώνουμε αυτές τις ροές μεταξύ προγραμμάτων και αρχείων
Ανακατεύθυνση ροών σε αρχείο (Redirection to file) Επιτελείται με τα σύμβολα > και < Παραδείγματα Redirecting to file ls > myoutput Redirecting from file wc -l < myoutput wc -l < mydata.txt > myoutput Append output to file ls >> mydata.txt Redirecting STDERR ls -l video.mpg blah.foo 2> errors.txt
Σωλήνωση Διεργασιών (Pipelines) H σωλήνωση διεργασιών επιτρέπει τη σύνδεση προγραμμάτων σε σειρά, ώστε η έξοδος του ενός να χρησιμοποιείται σαν είσοδος στο επόμενο. Η σωλήνωση επιτυγχάνεται με το σύμβολο Παραδείγματα: ls head -3 ls head -3 tail -1 ls head -3 tail -1 > myoutput ls -l /etc tail -10 sort ls l /etc less
Αναζήτηση αρχείων στο σύστημα Μπορεί να γίνει αναζήτηση με διάφορα κριτήρια, όπως: Όνομα αρχείου, permissions, μέγεθος, τύπος, ημερομηνία τροποποίησης, owner, group, κ.λ.π. Εντολή find [path] [options] [what_to_find] Παραδείγματα: find. -name tecmint.txt find /home -name "*.txt find /home -iname tecmint.txt αγνόησε εάν το όνομα είναι με κεφαλαία ή μικρά γράμματα find /home -type d -name mathimata find / -size +50k -size -100k βρες τα αρχεία με μέγεθός s, όπου 50kbytes <s <100kbytes
H εντολή grep Κάνει αναζήτηση σε δεδομένα κειμένου και επιστρέφει τις γραμμές του κειμένου που περιέχουν μία λέξη ή γενικότερα ένα μοτίβο (pattern). Σύνταξη: grep [options] <pattern> [path] Παραδείγματα: grep mellon mydata.txt Βρες τη λέξη mellon στο αρχείο mydata.txt grep n mellon mydata.txt Επιστρέφει και τον αριθμό γραμμής
grep & find Προσοχή: πολλοί φοιτητές συγχέουν τις δύο αυτές εντολές Το grep θα το χρησιμοποιείτε όταν θέλετε να αναζητήσετε μια λέξη μέσα σε ένα κείμενο Το find θα το χρησιμοποιείτε όταν θέλετε να αναζητήσετε ένα αρχείο στο file system
Ερωτήσεις/Ασκήσεις 1. Αποθηκεύστε τις 5 πρώτες εντολές του ιστορικού εντολών στο αρχείο data.txt 2. Αλλάξτε τα δικαιώματα πρόσβασης στο αρχείο data.txt ώστε να μην μπορείτε να αλλάξετε τα περιεχόμενά του. Εν συνεχεία διαγράψτε το αρχείο αυτό. Τι παρατηρείτε? 3. Βρείτε όλες τις εντολές δημιουργίας φακέλου που βρίσκονται στο ιστορικό 4. Ποια εντολή πρέπει να γράψετε σε Linux CLI για να δείτε ποιες είναι οι εντολές διαγραφής αρχείου που έχουν εκτελεστεί στις 20 πιο πρόσφατες εντολές του ιστορικού.