ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Τµήµα Μηχανικών Πληροφορικής ΤΕ Λειτουργικά Συστήµατα (Εργαστήριο) Διδάσκων: I. Τσακνάκης 7ο Εργαστήριο Συµπίεση αρχείων Χρήση ειδικών χαρακτήρων στην γραµµή εντολών 1
Συµπίεση αρχείων Στα λειτουργικά συστήµατα Unix και Linux χρησιµοποιούνται διάφορες εφαρµογές για συµπίεση και αποσυµπίεση των αρχείων. Για το σκοπό αυτό χρησιµοποιουνται 2 βασικές εντολές: gzip και compress. tar Η εντολή tar παίρνει ως ορίσµατα αρχεία ή καταλόγους και τα συνενώνει σε ένα ενιαίο αρχείο, συνήθως για να συµπιεστεί. Με την ίδια εντολή µπορούµε να κάνουµε και την αντίστροφη ενέργεια. Function letters και η λειτουργεία τους: -c, create a new archive -d, find differences between archive and file system -t, list the contents of an archive -u, only append files newer than copy in archive -x, extract files from an archive Παραδείγµατα: tar cf a.tar test1 test2 συνένωσε τους φακέλους test1 και test2, όλους τους φακέλους τους και τα αρχεία τους, σε ένα αρχείο µε όνοµα a.tar tar tf a.tar εµφάνισε τα περιεχόµενα του αρχείου a.tar tar xf a.tar δηµιούγησε (extract) τους φακέλους test1 και test2, όλους τους φακέλους τους και τα αρχεία τους gzip και gunzip Η εντολή gzip παίρνει όρισµα ένα αρχείο το οποίο το συµπιέζει, προσθέτει σ' αυτό την επέκταση.gz και διαγράφει το πρωτότυπο αρχείο. Για να αποσυµπιέσουµε ένα αρχείο, χρησιµοποιούµε την εντολή gunzip ή την εντολή gzip µε την επιλογή -d αλλά πρέπει το αρχείο που θέλουµε να αποσυµπιέσουµε να έχει την επέκταση.gz. Με την επιλογή -S µπορούµε να καθορίσουµε την δική µας επέκταση και µε την επιλογή -l µπορούµε να δούµε τα συµπιεσµένα ή αποσυµπιεσµένα µεγέθη των αρχείων κατά τη διάρκεια της συµπίεσης ή της αποσυµπίεσης. Με την επιλογή -t µπορούµε να ελέγξουµε την ακεραιότητα του συµπιεσµένου αρχείου. Η εντολή gunzip µπορεί να αποσυµπιέσει και αρχεία που έχουν δηµιουργηθεί µε την εντολή compress που παρουσιάζεται παρακάτω. 2
Παράδειγµα: $ gzip mydir.tar Συµπιέζει το αρχείο mydir.tar στο αρχείο mydir.tar.gz και διαγράφει το mydir.tar. bzip2 και bunzip2 Η εντολή bzip2 παίρνει όρισµα ένα αρχείο το οποίο το συµπιέζει, προσθέτει σ' αυτό την επέκταση.gz2 και διαγράφει το πρωτότυπο αρχείο. Επιτυγχάνει συνήθως καλύτερα αποτελέσµατα από την gzip. zip Η εντολή zip χρησιοποιείται τόσο για την συµπίεση όσο και για την αποσυµπίση αρχείων. Είναι συµβατή µε την εφαρµογή winzip και pkzip των Windows. Σε αντίθεση µε τις προηγούµενες εντολές µπορεί να συµπιέσει περισσότερα από ένα αρχεία. compress και uncompress Η εντολή compress παίρνει όρισµα ένα αρχείο το οποίο το συµπιέζει, προσθέτει σ' αυτό την επέκταση.z και διαγράφει το πρωτότυπο αρχείο. Παράδειγµα: $ compress mydir.tar Συµπιέζει το αρχείο mydir.tar στο αρχείο mydir.tar.z και διαγράφει το mydir.tar. 3
Χρήση ειδικών χαρακτήρων στην γραµµή εντολών Η γραµµή εντολών του φλοιού bash παρέχει πολλές ευκολίες στο χρήστη. Οι σηµαντικότερες από αυτές είναι: Αντικατάσταση µεταχαρακτήρων (File globbing) File globbing: είναι η λειτουργία αντικατάστασης των wildcards (ή µεταχαρακτήρων ή χαρακτήρων-µπαλαντέρ) Ø *, ταιριάζει µε οποιοδήποτε πλήθος χαρακτήρων Ø?, ταιριάζει µε ένα µόνο (οποιοδήποτε) χαρακτήρα Ø [a-z], ταιριάζει µε οποιοδήποτε χαρακτήρα ανήκει σε αυτό το εύρος Ø [^a-z], ταιριάζει µε οποιοδήποτε χαρακτήρα δεν ανήκει σε αυτό το εύρος Η εντολή echo µπορεί να χρησιµοποιηθεί για να ελέγξουµε αν η αντικατάσταση των µεταχαρακτήρων έγινε όπως σκοπεύαµε, πριν εκτελέσουµε µία εντολή µε µεταχαρακτήρες. Το πλήκτρο Tab Το πλήκτρο Tab χρησιµοποιείται για να συµπληρώσουµε το όνοµα εντολής ή αρχείου (που πρέπει να είναι όρισµα σε µία εντολή) Αγκύλες {} Οι αγκύλες { και } χρησιµοποιούνται για να δηµιουργούµε πρότυπα συµβολοσειρών. Για το διαχωρισµό των συµβολοσειρών χρησιµοποιείται ο χαρακτήρας κόµµα (,). Αν ο πρώτος χαρακτήρας είναι κόµµα, εννοείται η κενή συµβολοσειρά. H εντολή echo x{a,b} είναι ισοδύναµη µε την echo xa xb. H εντολή cp file.txt{,-save} είναι ισοδύναµη µε την cp file.txt file.txt-save. Αποτελέσµατα εντολών Μπορείτε να συµπεριλάβετε τα αποτελέσµατα της εκτέλεσης µίας εντολής, χρησιµοποιώντας το $( ) ή τα ``. Οι εντολές: echo "This machine is named: $(hostname)" echo "This machine is named: `hostname`" παράγουν τα ίδια αποτελέσµατα. Αρχικά θα εκτελεστεί η εντολή hostname και το αποτέλεσµά της θα αντικατασταθεί στην εντολή που δώσαµε. 4
Μαθηµατικές πράξεις Ορισµένες µαθηµατικές πράξεις µπορούν να εκτελεστούν από το φλοιό. Με χρήση της εντολής expr:, π.χ. echo Area: `expr $X \* $Y`. Η χρήση της expr δεν είναι βολική γιατί έχει αυστηρό συντακτικό. Με χρήση της $[ ]: Οι εντολές echo Area: $[$X*$Y] echo Area: $[ $X * $Y ] και echo Area: $[ $X*$Y ] είναι ισοδύναµες, γιατί το συντακτικό είναι ανεκτικό. Βασικές πράξεις που εκτελούνται από το φλοιό και οι τελεστές τους: πρόσθεση (+), αφαίρεση (-), πολλαπλασιασµός (*), διαίρεση (/), ύψωση σε δύναµη (**), υπόλοιπο διαίρεσης (%). Στη σελίδα bash του man, τµήµα ARITHMETIC EVALUATIONS, υπάρχει πλήρης κατάλογος των αριθµητικών πράξεων που µπορεί να εκτελέσει ο φλοιός. Ακύρωση της σηµασίας των ειδικών χαρακτήρων Για να ακυρώσουµε την σηµασία των ειδικών χαρακτήρων και να τους χειριστούµε ως συνηθισµένους χαρακτήρες πρέπει να ενηµερώσουµε το φλοιό. Ο χαρακτήρας backslash (\) Η εντολή echo Your cost: \$5.00 δεν θα αναζητήσει µεταβλητή (ακυρώνεται η ειδική σηµασία του χαρακτήρα $). Έστω ότι θέλουµε να βρούµε όλα τα αρχεία που βρίσκονται στον τρέχοντα κατάλογο και το όνοµά τους ξεκινάει από file*. Αν εκτελέσουµε την εντολή: find file* ο φλοιός θα µας επιστρέψει όλα τα αρχεία των οποίων το όνοµα αρχίζει µε "file". Εµείς όµως θέλουµε να επιστραφούν µόνο τα αρχεία των οποίων το όνοµα αρχίζει µε "file*". Για να βρούµε αυτό που ψάχνουµε πρέπει να δώσουµε την εντολή ως find file\* Μονά και διπλά εισαγωγικά Ορισµένες φορές θέλουµε να ακυρώσουµε την ειδική σηµασία πολλών χαρακτήρων στη σειρά, π.χ. στην εντολή echo \*\*\* SALES \*\*\* 5
είναι πιο βολικό (και πιο σωστό) να χρησιµοποιήσετε τα µονά ή τα διπλά εισαγωγικά. Τα µονά εισαγωγικά ακυρώνουν την ειδική σηµασία όλων των χαρακτήρων. Τα διπλά εισαγωγικά ακυρώνουν την ειδική σηµασία όλων των χαρακτήρων εκτός από τους $, $(), $[], `, \,!. Σε πολλές περιπτώσεις η χρήση µονών ή διπλών εισαγωγικών παράγει τα ίδια αποτελέσµατα. Συνδυασµοί πλήκτρων για τη γραµµή εντολών <Ctrl+a>, µετακίνηση στην αρχή της γραµµής <Ctrl+e>, µετακίνηση στo τέλος της γραµµής <Ctrl+u>, διαγραφή µέχρι την αρχή της γραµµής <Ctrl+k>, διαγραφή µέχρι το τέλος της γραµµής Δηµιουργία εκτελέσιµων αρχείων script Για να δηµιουργήσουµε ένα αρχείο που εκτελεί συγκεκριµένες εντολές, το δηµιουργούµε µε τον επεξεργαστή nano και όνοµα που τελειώνει µε την επέκταση.sh. Π.χ. δηµιουργήστε το αρχείο area.sh, το οποίο θα µπορεί να υπολογίζει το γινόµενο των αριθµών 5 και 3: #!/bin/bash x = 5 y = 3 ans=$[ $x * $y ] echo "$x * $y = $ans" Σώζουµε το αρχείο. Για να το κάνουµε εκτελέσιµο δίνουµε την εντολή: chmod +x area.sh Για να το εκτελέσουµε δίνουµε την εντολή:./area.sh Τροποποιήστε το αρχείο ώστε να διαβάζει από το χρήστη 2 αριθµούς που αυτός επιθυµεί και να του εµφανίζει την επιφάνεια. Χρησιµοποιήστε την εντολή: read -p "Enter two numbers: " x y η οποία δέχεται ως είσοδο 2 αριθµούς από το πληκτρολόγιο που χωρίζονται µε τον κενό χαρακτήρα (space) και καταχωρίζονται στις µεταβλητές x και y. 6