9ο Εργαστήριο - Ο φλοιός Bash και η διαµόρφωση του

Σχετικά έγγραφα
7ο Εργαστήριο - Ο φλοιός Bash και η διαμόρφωση του

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

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

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

Shell Scripts: loops / if / test

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

ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Τµήµα Μηχανικών Πληροφορικής ΤΕ Λειτουργικά Συστήµατα (Εργαστήριο) Διδάσκων: I. Τσακνάκης. 7ο Εργαστήριο

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

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

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

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

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

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

Εισαγωγή στο λειτουργικό σύστηµα Unix

[11] Υπολογιστικά συστήματα: Στρώματα. Περιεχόμενα. Εισαγωγή. επικοινωνία εφαρμογές λειτουργικό σύστημα προγράμματα υλικό

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

3ο Εργαστήριο Βασικές εντολές διαχείρισης αρχείων σε LINUX

2.1. Οι λογαριασµοί χρηστών Σύνδεση (login) και αποσύνδεση (logout)

Πως δημιουργούμε ένα νέο αρχείο κειμένου; Με τρεις τρόπους:

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

ΧΑΡΟΚΟΠΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

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

Επαναληπτικές Ασκήσεις

Εργαστήριο Λειτουργικών Συστημάτων. Shell Programming

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

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

ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Τμήμα Μηχανικών Πληροφορικής ΤΕ Λειτουργικά Συστήματα (Εργαστήριο) Διδάσκων: I. Τσακνάκης. 8ο Εργαστήριο

2ο Εργαστήριο. Εισαγωγική στο Λ.Σ. LINUX Γενικές εντολές συστήματος και χρηστών

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

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

ΟΛΑ ΤΑ SCRIPT files πρέπει να είναι ΕΚΤΕΛΕΣΙΜΑ: $*, : ΟΛΑ - Η λίστα (ο πίνακας) με τα ορίσματα $# πλήθος παραμέτρων. one two third parameter

Εισαγωγή στην Επιστήμη της Πληροφορικής Εργαστήριο. UNIX Μέρος 1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

a = 10; a = k; int a,b,c; a = b = c = 10;

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

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

Εισαγωγή στην Αριθμητική Ανάλυση

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

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

ΑΣΚΗΣΗ 2 -ΑΚΥΡΩΣΗ ΣΗΜΑΣΙΑΣ ΕΙΔΙΚΩΝ ΧΑΡΑΚΤΗΡΩΝ

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

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

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

Προγραμματισμός Διαχείρισης Συστημάτων ΙΙ

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

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

for for for for( . */

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

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

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

Σημειωματάαριο Δευτέρας 16 Οκτ. 2017

char name[5]; /* define a string of characters */

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Σύντομη εισαγωγή στο εργαστήριο

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

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα;

Διαδικασιακός Προγραμματισμός

ιαχείριση Πληροφοριών στο ιαδίκτυο

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

Εισαγωγή στον Προγραμματισμό

Τυπικές χρήσεις της Matlab

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

επιµέλεια Θοδωρής Πιερράτος

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

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

Προγραμματισμός Διαχείρισης Συστημάτων Ι

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

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Εντολές ελέγχου ροής if, for, while, do-while

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Εντολές Ελέγχου & Επανάληψης

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

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

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

Επιλογή και επανάληψη. Λογική έκφραση ή συνθήκη

wc -l <file1 10 ή να μετρήσω πόσες γραμμές δίνει μια οποιαδήποτε άλλη εντολή π.χ. η finger : finger wc -l 8

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

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Ανάπτυξη και Σχεδίαση Λογισμικού

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

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

*? [xyz] [^xy] [!0-9] [:alpha:] [:digit:]

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

PERL. Δήμος Παύλου Δημήτρης Κουζαπάς

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

Σύντομη εισαγωγή στο λειτουργικό σύστημα Linux

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

Δίκτυα Η/Υ στην Επιχείρηση

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές

1st exercise of work2 - REMARKS

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Επισκόπηση Λ.Σ. Εργαστηριακές Ασκήσεις

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

Οι δείκτες στη γλώσσα C

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

ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΑΘΕΡΕΣ ΜΕΤΑΒΛΗΤΕΣ

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

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

Ψευδοκώδικας. November 7, 2011

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

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

2.Shell, users, groups και privilegies

Transcript:

ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Τµήµα Μηχανικών Πληροφορικής ΤΕ Λειτουργικά Συστήµατα (Εργαστήριο) Διδάσκων: I. Τσακνάκης 9ο Εργαστήριο - Ο φλοιός Bash και η διαµόρφωση του Ο φλοιός γενικά Μεταβλητές Ψευδώνυµα (aliases) Αρχεία εκκίνησης φλοιού Ο Φλοιός login Επεξεργασία της γραµµής εντολών από το φλοιό Ασκήσεις 1

Ο φλοιός Bash και η διαµόρφωση του Ο φλοιός γενικά Ανάλογα µε το σύστηµα Unix ή Linux που χρησιµοποιούµε µας διατίθενται και διαφορετικά κελύφη (shells). Για κάθε χρήστη στη συνέχεια "φορτώνεται" στην κύρια µνήµη ένα διαφορετικό αντίγραφο του φλοιού που παρέχει ένα σύστηµα επικοινωνίας µεταξύ του χρήστη και του Unix ή Linux. Οι πιο διαδεδοµένοι φλοιοί είναι οι Bourne shell (sh), C shell (csh), Korn shell (ksh), Enhanced C shell (tcsh), Bourne Again Shell (bash), rc, pdksh, tcsh, zsh και ash. Οι φλοιοί συσχετίζονται µεταξύ τους αφού έχουν κοινά στοιχεία και λειτουργίες ή ανήκουν όπως θα λέγαµε στην ίδια οµάδα.! Για να δείτε τους διαθέσιµους φλοιούς του συστήµατος, δώστε την εντολή : cat /etc/shells.! Για να διαπιστώσετε το φλοιό που χρησιµοποιείτε, δώστε την εντολή: echo $SHELL.! Για αλλαγή του φλοιού, δώστε την εντολή: chsh, πληκτρολογήστε τον κωδικό σας εφόσον ζητηθεί και µετά τη διαδροµή για το νέο φλοιό. Ο φλοιός Bash µεσολαβεί µεταξύ του πυρήνα και του περιβάλλοντος του χρήστη χωρίς να αποτελεί τµήµα του λειτουργικού συστήµατος. Είναι µία επιπλέον εντολή του λειτουργικού συστήµατος. ανιχνέυει τις εντολές και εκτελεί τις εφαρµογές. Μετατρέπει την είσοδο του χρήστη σε παραγωγική διαδικασία, διερµηνεύει εντολές και συνδέει τη γραµµή εντολών µε το υπόλοιπο σύστηµα. Επιπλέον είναι και γλώσσα προγραµµατισµού αφού διαθέτει δικές του εντολές, διατηρεί λίστα µεταβλητών, χρησιµοποιεί µεταβλητές περιβάλλοντος και ειδικούς χαρακτήρες, επιτρέπει τη δηµιουργία συναρτήσεων, ενώ διαθέτει µηχανισµούς αντικατάστασης εντολών και ακύρωσης των ειδικων χαρακτήρων. Αν φανταστούµε τον πυρήνα (kernel) του λειτουργικού συστήµατος Linux στο κέντρο µιας σφαίρας, τότε ο φλοιός είναι το εξωτερικό επίπεδο που περιβάλει τον πυρήνα. Παραµετροποίηση (διαµόρφωση) του φλοιού bash Ο φλοιός διαµορφώνεται µε τη χρήση διαφόρων µηχανισµών, όπως:! τοπικές µεταβλητές,! ψευδώνυµα,! συναρτήσεις,! τις εντολές set και shopt. Εξάλλου, ο φλοιός διαµορφώνει άλλες εντολές και εφαρµογές, µέσω των µεταβλητών περιβάλλοντος. Όλες οι ρυθµίσεις, µπορούν να γίνουν είτε για ένα 2

σύστηµα από το διαχειριστή, είτε για κάθε χρήστη ξεχωριστά από τους ίδιους τους χρήστες. Μεταβλητές Γενικά Οι µεταβλητές έχουν θεµελιώδη σηµασία για την παραµετροποίηση, τόσο του φλοιού όσο και οποιασδήποτε άλλης εφαρµογής. Μία µεταβλητή είναι µία ετικέτα για κάποια τιµή. Η τιµή µπορεί να αλλάζει µε την πάροδο του χρόνου, από ένα σύστηµα σε ένα άλλο, από τον ένα χρήστη στον άλλο. Όµως η ετικέτα είναι σταθερή. Έτσι, ένα shell script (δηλαδή, ένα αρχείο που περιέχει εντολές προς τον φλοιό) µπορεί να τοποθετεί µια τιµή στο $HOME, που δεν είναι τίποτα άλλο παρά µία αναφορά στο home directory του χρήστη. Η τιµή αυτή διαφέρει από χρήστη σε χρήστη, αλλά πάντα αναφέρεται στο home directory του χρήστη που εκτελεί το script. Οι µεταβλητές είναι δύο ειδών: τοπικές µεταβλητές ή µεταβλητές φλοιού (local variables, shell variables) που χρησιµοποιούνται µόνο από τον φλοιό και µεταβλητές περιβάλλοντος (environment variables) που χρησιµοποιούνται από το φλοιό για να περνάει τιµές στις εφαρµογές που καλεί. Το αποτέλεσµα είναι ότι οι τοπικές µεταβλητές χρησιµοποιούνται για την παραµετροποίηση του ίδιου του φλοιού, ενώ οι µεταβλητές περιβάλλοντος χρησιµοποιούνται για την παραµετροποίηση άλλων εντολών. Για να δούµε τις µεταβλητές και τις τιµές τους χρησιµοποιούµε τις εντολές set, env και echo. Η εντολή set εµφανίζει όλες τις µεταβλητές, η env µόνο τις µεταβλητές περιβάλλοντος και η echo την τιµή µίας µόνο µεταβλητής. Τοπικές µεταβλητές Οι τοπικές µεταβλητές (ή µεταβλητές φλοιού) είναι µεταβλητές που ο φλοιός δεν τις περνάει σε άλλες εντολές. Χρησιµοποιούνται για την ρύθµιση του ίδιου του φλοιού. Χρησιµοποιούνται επίσης και σε shell scripts, όπως θα δούµε και σε άλλη παράγραφο. Ο χρήστης έχει τη δυνατότητα να ορίσει, στον τρέχοντα φλοιό που εργάζεται, τις δικές του τοπικές µεταβλητές. Δηµιουργία τοπικής µεταβλητής Για να ορίσουµε µία µεταβλητή, δίνουµε την εντολή: VARIABLE=VALUE Συµβατικά, τα ονόµατα των µεταβλητών είναι µε κεφαλαία γράµµατα. Τα ονόµατα των µεταβλητών και οι τιµές τους δεν πρέπει να περιέχουν κενούς χαρακτήρες. Έτσι αν η τιµή περιέχει κενά, πρέπει να χρησιµοποιούνται διπλά εισαγωγικά ("). Π.χ. WELCOME="Welcome to Linux" Για να εµφανίσουµε την τιµή µιας µεταβλητής, χρησιµοποιούµε την echo: Π.χ. echo $WELCOME Πρέπει να επισηµανθεί ότι, για να αναφερθούµε στην τιµή µίας µεταβλητής χρησιµοποιούµε το χαρακτήρα $ πριν από το όνοµα της µεταβλητής. Παράδειγµα $ first_name=john $ surname=tsaknakis 3

Τότε η εντολή : $ echo $first_name $surname, θα εµφανίσει : John Tsaknakis. Για µία πλήρη λίστα των τοπικών µεταβλητών, συµβουλευτείτε το τµήµα Shell variables στη σελίδα bash του man. Συνήθεις τοπικές µεταβλητές! HISTFILESIZE: ορίζει πόσες εντολές αποθηκεύονται στο αρχείο του ιστορικού.! HISTFILE: ορίζει το όνοµα του αρχείου στο οποίο αποθηκεύονται οι εντολές του ιστορικού.! HISTSIZE: ορίζει πόσες εντολές «θυµάται» ο φλοιός κατά τη διάρκεια της συνεδρίας του χρήστη.! COLUMNS: ορίζει το πλάτος (σε χαρακτήρες) του τερµατικού.! LINES: ορίζει το ύψος (σε γραµµές) του τερµατικού.! Η µεταβλητή PS1, ορίζει τη µορφή του συµβόλου προτροπής εντολών (prompt) και µπορεί να διαµορφωθεί από το χρήστη µε ακολουθίες χαρακτήρων. Μερικοί από τους χαρακτήρες (escape sequences) που χρησιµοποιούνται για τη µορφοποίηση τoυ prompt είναι οι: - \d για την ηµεροµηνία - \h για το όνοµα της µηχανής - \t για την ώρα - \u για το όνοµα χρήστη - \w για τον τρέχοντα κατάλογο εργασίας - \! για τον αύξοντα αριθµό της εντολής στο ιστορικό - \$ για ενδεικτικό απλού χρήστη (εµφανίζει #) ή χρήστη µε δικαιώµατα διαχείρισης (εµφανίζει $) Παράδειγµα: Η εντολή : PS1="\u@\h:\w<\!>\$" θα εµφανίζει το prompt ως εξής: adam@ekdd-srv-01:/tmp<235>$ Για µία πλήρη λίστα των escape sequences συµβουλευτείτε το τµήµα PROMPTING στη σελίδα bash του man. Μεταβλητές περιβάλλοντος Οι τοπικές µεταβλητές υπάρχουν µόνο µέσα στον τρέχοντα φλοιό. Ο φλοιός περνάει σε άλλους φλοιούς µόνο τις µεταβλητές περιβάλλοντος, όπως είναι για παράδειγµα η µεταβλητή EDITOR, η οποία χρησιµοποιείται για να γνωρίζουν οι διάφορες εφαρµογές µε ποια εφαρµογή προτιµά ο χρήστης να επεξεργάζεται αρχεία κειµένου. Οι µεταβλητές περιβάλλοντος υπάρχουν στον οικείο κατάλογο και στον κατάλογο /etc. Για τον φλοιό bash, οι προκαθορισµένες µεταβλητές περιβάλλοντος ορίζονται στο αρχείο /etc/profile και για τον κάθε χρήστη στο αρχείο.bash_profile που υπάρχει στον προσωπικό του κατάλογο. 4

Δηµιουργία µεταβλητής περιβάλλοντος Ο παραδοσιακός τρόπος για τη δηµιουργία µία µεταβλητής περιβάλλοντος είναι πρώτα να δηµιουργήσουµε µία τοπική µεταβλητή και µετά να την κάνουµε export σε µεταβλητή περιβάλλοντος. Παράδειγµα: $ EDITOR=/usr/bin/vim $ export EDITOR Με την πρώτη εντολή δηµιουργείται µία τοπική µεταβλητή EDITOR που περιέχει το εκτελέσιµο αρχείο µαζί µε το path της εφαρογής κειµένου που προτιµά ο χρήστης και µε την δεύτερη εντολή η µεταβλητή EDITOR µετατρέπεται σε µεταβλητή περιβάλλοντος. Ο φλοιός bash υποστηρίζει και συντετµηµένη σύνταξη. $ export EDITOR=/usr/bin/vim Συνήθεις µεταβλητές περιβάλλοντος Ορισµένες συχνά χρησιµoποιούµενες µεταβλητές περιβάλλοντος είναι οι παρακάτω:! HOME. Είναι το πλήρες όνοµα διαδροµής - µονοπάτι για το home directory του χρήστη! LOGNAME. Είναι ο κωδικός χρήστη (user ID) ή το όνοµα του λογαριασµού (π.χ. tsaknakis).! LANG. Εϊναι το αναγνωριστικό της προκαθορισµένης γλώσσας που πρέπει να χρησιµοποιούν οι εφαρµογές.! PWD. Είναι ο τρέχων κατάλογος εργασίας.! EDITOR. Εϊναι ο επιθυµητός text editor του χρήστη! LESS. Είναι οι επιλογές για την εντολή less.! SHELL. Είναι το µονοπάτι για το φλοιό στον οποίο κάνατε login.! USER. Είναι το όνοµα του λογαριασµού του χρήστη.! TERM. Ορίζει τον τύπο του τερµατικού που χρησιµοποιείτε. Σε περίπτωση που το τερµατικό σας δε δουλεύει σωστά, π.χ. επειδή ανοίξατε ένα δυαδικό αρχείο, εκτελέστε την εντολή reset.! PATH. Η µεταβλητή PATH περιέχει µία λίστα καταλόγων στους οποίους βρίσκονται οι εντολές. Έτσι, όταν δεν δίνουµε µονοπάτι για µία εντολή, ο φλοιός αναζητά την εντολή στους καταλόγους αυτούς και εκτελεί την πρώτη που συναντά και ταιριάζει µε την εντολή της οποίας την εκτέλεση ζητήσαµε. Η εντολή which ψάχνει στη λίστα των καταλόγων και επιστρέφει το πλήρες µονοπάτι της εντολής που θα εκτελεστεί. Για παράδειγµα, η εκτέλεση της εντολής which less, θα µας ενηµερώσει για το πλήρες µονοπάτι του αρχείου το οποίο θα εκτελεστεί όταν ζητήσουµε την εκτέλεση της εντολής less. Για να εκτελέσουµε την εντολή less που βρίσκεται σε άλλο αρχείο και όχι σε αυτό που επιστρέφει η which, αρκεί να ζητήσουµε την εντολή µαζί µε το µονοπάτι της, π.χ../less.! PS1. Εϊναι το κύριο προτρεπτικό σήµα (prompt string) που εµφανίζει το Λ.Σ. (π.χ. $). 5

! PS2. Εϊναι ο δείκτης > που χρησιµοποιείται για να συνεχιστεί η συµπλήρωση της εντολής στην από κάτω γραµµή.! ΤΖ. Χρησιµοποιείται για τον καθορισµό της ζώνης ώρας (time zone) του συστήµατος.! MAIL. Ορίζει το γραµµατοκιβώτιο (mailbox) του χρήστη. Πρόκειται για το αρχείο που αποθηκεύονται τα µηνύµατα που λαµβάνει ο χρήσης µέσω ηλεκτρονικού ταχυδροµείου (π.χ. /var/mail/john).! MAILCHECK. Ορίζει κάθε πότε το σύστηµα θα ελέγχει αν υπάρχει νέο µήνυµα (email) στο γραµµατοκιβώτιο του χρήστη. Για παράδειγµα αν έχει τιµή 300 το Λ.Σ. κάθε 5 λεπτά θα πραγµατοποιεί έλεγχο για τη λήψη νέου email και στην περίπτωση νέας άφιξης θα εµφανίσει το µήνυµα : "You have mail". Χρήσιµες εντολές Οι εντολές env, set, unset, printenv και echo, εµφανίζουν τις µεταβλητές περιβάλλοντος και τις τιµές τους.! Η εντολή env εµφανίζει τις µεταβλητές περιβάλλοντος που υπάρχουν στο κέλυφος.! Η εντολή set εµφανίζει όλες τις µεταβλητές που υπάρχουν στο κέλυφος.! Η εντολή unset χρησιµοποιείται για να αφαιρεθεί µία εντολή από το κέλυφος.! Η εντολή printenv µπορεί να χρησιµοποιηθεί για να τυπώσει το περιεχόµενο µιας µεταβλητής, όταν δοθεί το όνοµα της (π.χ. printenv PWD). Για µία πλήρη λίστα των τιµών που δέχεται η set, συµβουλευτείτε το τµήµα SHELL BUILT-IN COMMANDS στη σελίδα bash του man. Ψευδώνυµα (aliases) Τα ψευδώνυµα είναι συντοµογραφίες µεγαλύτερων εντολών. Αν υπάρχουν εντολές που τις χρησιµοποιείτε συχνά αλλά είναι αρκετά µεγάλες, µπορείτε να τις κάνετε µικρότερες χρησιµοποιώντας ψευδώνυµα µε την εντολή alias. Για να ορίσετε ένα ψευδώνυµο µε την alias, πρώτα θα πρέπει να επιλέξετε το κατάλληλο αρχείο, για να τροποποιήσετε αναλογα µε το κέλυφος που χρησιµποιείτε:! Αν είστε χρήστης του bash πρέπει να χρησιµοποιείτε το αρχείο : ~/.bashrc! Αν είστε χρήστης του kash πρέπει να χρησιµοποιείτε το αρχείο : ~/.kashrc! Αν είστε χρήστης του csh πρέπει να χρησιµοποιείτε το αρχείο : ~/.cshrc Πριν από κάθε τροποποίηση προτείνεται η διατήρηση ενός αντίγραφου ασφαλείας. Στη συνέχεια εκτελέστε την εντολή: nano.bashrc µε την οποία επιλέγετε ο διορθωτής nano για την τροποποίηση του αρχείου.bashrc (για το φλοιό bash). Αφού προσθέσουµε όσα ψευδώνυµα θέλουµε, αποθηκεύσουµε τις τροποποιήσεις και βγαίνουµε από τον διορθωτή κειµένου nano. 6

Παραδείγµατα! Με την εντολή : alias quit="logout", δηµιουργούµε το ψευδώνυµο quit για την εντολή logout.! Με την εντολή : alias c=clear, δηµιουργούµε το ψευδώνυµο c για την εντολή clear.! Με την εντολή : alias rm="rm -i", δηµιουργούµε το ψευδώνυµο rm για την εντολή rm -i. Έτσι κάθε φορά που καλείται η εντολή rm θα εκτελείται η rm -i. Για να χρησιµοποιήσπυµε την εντολή rm, αντί του alias της (rm i), δίνουµε την εντολή βάζοντας µπροστά της το χαρακτήρα \: \rm r Junk. Αν θέλουµε να δούµε όλα τα ψευδώνυµα,τότε καλούµε την εντολή alias χωρίς ορίσµατα. Για να δούµε ένα συγκεκριµένο ψευδώνυµο, χρησιµοποιούµε την εντολή alias µε το ψευδώνυµο που θέλουµε να δούµετο ως όρισµα του. π.χ. alias dir. Αρχεία εκκίνησης φλοιού Τα shell startup scripts (αρχεία εκκίνησης φλοιού) εκτελούνται κατά την εκκίνηση του φλοιού από τον χρήστη. Οι περισσότερες από τις ρυθµίσεις που είδαµε µέχρι τώρα ισχύουν µόνο για τον τρέχοντα φλοιό. Ωστόσο, προφανώς, όλοι οι χρήστες επιθυµούν οι ρυθµίσεις τους (µεταβλητές, ψευδώνυµα και άλλες ρυθµίσεις) να ισχύουν γενικά (όποτε ξεκινούν ένα νέο φλοιό) και όχι µόνο στον τρέχοντα φλοιό. Γι αυτό το λόγο χρησιµοποιούµε τα shell startup scripts, δηλαδή αρχεία εντολών που εκτελούνται κατά την εκκίνηση του φλοιού. Οι περισσότερες από αυτές τις ρυθµίσεις γίνονται από το διαχειριστή του συστήµατος, αλλά και οι χρήστες µπορούν να ρυθµίζουν ότι αφορά το περιβάλλον εργασίας τους. Αυτό γίνεται µε την επεξεργασία των startup scripts που βρίσκονται στο home directory κάθε χρήστη. Ο Φλοιός login O φλοιός login είναι ο πρώτος φλοιός που εκτελείται για κάθε χρήστη, είναι δηλαδή ο φλοιός στον οποίο γίνεται η επιβεβαίωση της ταυτότητας του χρήστη. Οι φλοιοί που ξεκινούν από τον χρήστη µε άλλο τρόπο και όχι µε το login, π.χ. µε την εκτέλεση της εντολής bash, καλούνται no-login shell. Η διαφορά µεταξύ των login και no-login shells είναι ότι εκτελούνται διαφορετικά αρχεία εκκίνησης (startup scripts). Σειρά εκτέλεσης startup scripts! Στα login shells εκτελούνται, µε τη σειρά, τα ακόλουθα startup scripts: 1. /etc/profile 2. /etc/profile.d 3. ~/.bash_profile 4. ~/.bashrc 5. /etc/bashrc Κάθε script µπορεί να κάνει αλλαγές σε ότι έχει οριστεί ήδη σε προηγούµενο script. Έτσι η µεταβλητή PATH ορίζεται στο script /etc/profile αλλά, κατόπιν, αλλάζει η τιµή της στο ~/.bash_profile. 7

! Στα no-login shells εκτελούνται, µε τη σειρά, τα ακόλουθα startup scripts: 1. ~/.bashrc 2. /etc/bashrc 3. /etc/profile.d Όπως βλέπετε, τα no-login shells εκτελούν κάποια από τα script που εκτελούν τα login shells αλλά µε διαφορετική σειρά. Τυπικές εντολές στα startup scripts Οι τυπικές εντολές που µπαίνουν στα startup scripts είναι οι ακόλουθες:! ορισµοί τοπικών µεταβλητών, όπως η PS1,! ορισµοί µεταβλητών περιβάλλοντος, όπως η PATH και η LESS,! ορισµοί ψευδωνύµων ή ενδεχοµένως αναίρεση ανεπιθύµητων ψευδωνύµων που ορίστηκαν νωρίτερα µε άλλο script. Αρχεία startup scripts Ιδιαίτερο ρόλο κατέχουν τα παρακάτω αρχεία - scripts: 1. Το αρχείο /etc/profile. Το αρχείο /etc/profile είναι το πρώτο που εκτελείται όταν ξεκινά ένα login shell. Τα no-login shells δεν εκτελούν το script αυτό. Το αρχείο αυτό είναι «καθολικό», εκτελείται δηλαδή για όλους τους χρήστες του συστήµατος που χρησιµοποιούν ως login shell ένα φλοιό τύπου Bourne (όπως ο sh και ο bash). Στο script αυτό ορίζονται οι τιµές των µεταβλητών PATH, USER, LOGNAME, MAIL, HOSTNAME, HISTSIZE και INPUTRC καθώς επίσης εκτελούνται και τα scripts που βρίσκονται στον κατάλογο: /etc/profile.d. Στον κατάλογο /etc/profile.d περιέχονται πρόσθετα shell scripts,τα οποία µπορούν να επεξεργαστούν µόνο από τον διαχειριστή και όχι από τους χρήστες. 2. Τα αρχεία ~/.bash_profile και ~/.bashrc. Τα αρχεία ~/.bash_profile και ~/.bashrc ανήκουν στη δικαιοδοσία του χρήστη. Ο χρήστης µπορεί να θέσει µεταβλητές, ψευδώνυµα, και εντολές που θέλει να εκτελούνται όταν εκκινεί ένα shell. Το αρχείο ~/.bash_profile εκτελείται για login shells µόνο, ενώ το ~/.bashrc εκτελείται από login και no-login shells. Μην βάζετε ποτέ στο ~/.bashrc script εντολές που έχουν έξοδο στην οθόνη, όπως π.χ. η εντολή date. Τέτοιες εντολές πρέπει να µπαίνουν στο script ~/.bash_profile µόνο. 3. Το αρχείο ~/.bash_logout Το αρχείο ~/.bash_logout χρησιµοποιείται σπάνια. Εκτελείται κάθε φορά που ο χρήστης βγαίνει από το login shell, δηλαδή κάθε φορά που ο χρήστης βγαίνει από το σύστηµα. Είναι πολύ χρήσιµο για να εκτελούµε προγράµµατα κατά την έξοδό µας από το σύστηµα. Ενδεικτικά αναφέρουµε:! Αντίγραφο ασφαλείας των αρχείων του χρήστη.! Διαγραφή προσωρινών αρχείων. 8

Επεξεργασία της γραµµής εντολών από το φλοιό Η διαδικασία της επεξεργασίας της γραµµής εντολών από το φλοιό είναι αρκετά σύνθετη. Μία αρκετά απλή εκδοχή της διαδικασίας αυτής είναι:! Η γραµµή εντολών χωρίζεται σε λέξεις που χωρίζονται από κενά, tab, αλλαγές γραµµών, και άλλους ειδικούς χαρακτήρες όπως:,,, &, ;, (, ), <, >.! Αντικατάσταση συναρτήσεων και ψευδωνύµων.! Επέκταση των χαρακτήρων { και } και δηµιουργία των αντίστοιχων συµβολοσειρών.! Αντικατάσταση του χαρακτήρα ~ µε την κατάλληλη συµβολοσειρά (~, ~bob, ~/files).! Αντικατάσταση παραµέτρων και µεταβλητών.! Αντικατάσταση των $, ${ }, $ (( )), $ [ ], $ ( ).! Η γραµµή χωρίζεται σε λέξεις ξανά.! Αντικατάσταση µεταχαρακτήρων σε ονόµατα αρχείων (file globbing).! Ανακατεύθυνση σε αρχεία, >, >>, <, <<, 2>, 2>>.! Η εντολή εκτελείται. Συνθήκες Στο Unix δεν υπάρχει ξεχωριστή έννοια συνθήκης όπως σε άλλες γλώσσες. Οποιαδήποτε εντολή µπορεί να χρησιµοποιηθεί σαν συνθήκη. Για παράδειγµα µια εντολή read µπορεί να είναι συνθήκη για κάποιον βρόχο. Εφόσον η εντολή εκτελείται σωστά επιστρέφει κωδικό σωστής εκτέλεσης και η «συνθήκη» επαληθεύεται. Εφόσον εκτελεστεί λάθος επιστρέφει κωδικό λάθους και η συνθήκη είναι ψευδής. Ο κωδικός αυτός στο UNIX επιστρέφεται στην παράµετρο $? και για σωστή εκτέλεση είναι ο αριθµός 0 ενώ για λάθος εκτέλεση είναι ο αριθµός 1. Ορισµένες εντολές επιστρέφουν περισσότερους κώδικες για λάθος εκτέλεση όπως πχ η εντολή expr που θα δούµε παρακάτω. if Η εντολή if χρησιµοποιείται για εκτέλεση εντολών κάτω από συνθήκες. Η σύνταξή της είναι η ακόλουθη. if <συνθήκη>; then <εντολές> elif <συνθήκη>; then <εντολές> else <εντολές> fi Τα τµήµατα elif και else είναι προαιρετικά, ενώ µπορούµε να έχουµε οσαδήποτε elif θέλουµε. Στην εκτέλεση της if εκτελούνται ΜΟΝΟ οι εντολές του ενός βρόχου, εκείνου που πληροί την συνθήκη. Μπορούµε να έχουµε πολλές if την µια µέσα στην άλλη. Η κάθε if πρέπει να βρίσκεται εξ ολοκλήρου µέσα σε ένα και µόνο µπλοκ της αµέσως προηγούµενης if. 9

test Η πιο συνηθισµένη εντολή-συνθήκη είναι η εντολή test. Η εντολή test παίρνει εσωτερικά συνθήκες µε την έννοια που τις έχουµε γνωρίσει σε άλλες γλώσσες. Μπορεί να συγκρίνει αριθµούς (µόνο ακέραιους) να συγκρίνει strings, να δεχτεί λογικούς τελεστές και να κάνει πολλά ακόµα ενδιαφέροντα πράγµατα. Άµα η εσωτερική συνθήκη της test ισχύει η test σαν εντολή επιστρέφει 0 στο $?, όπως κάθε εντολή που εκτελείται σωστά, ενώ άµα δεν ισχύει επιστρέφει 1. Η ανοιχτή αγκύλη ( [ ) είναι ένας δεσµός (link) στην test και έτσι η εντολή µπορεί να γραφτεί και µε την χρήση αγκύλων. Σε αυτήν την περίπτωση χρειάζεται να κλείσει η εντολή µε την κλειστή αγκύλη ( ] ). Προσοχή στην σύνταξη όταν χρησιµοποιούµε αγκύλες γιατί πρέπει να βάλουµε κενά µετά την ανοιχτή ( [ ) και πριν την κλειστή αγκύλη. ( ] ) Συνήθως η εντολή test γράφεται µε αγκύλες γιατί είναι πιο ευκολοδιάβαστη και σπάνια την βλέπουµε γραµµένη αλλιώς. Θα δείξουµε παραδείγµατα και µε τους δυο τρόπους γραφής: test s filename γράφεται και [ -s filename ] test r filename γράφεται και [ -r filename ] Ο παρακάτω πίνακας περιέχει της χρήσεις των παραµέτρων που δέχεται η test (options). Προσοχή στα κενά µέσα στα [ ]. 1. Εξετάζοντας αρχεία: [ -s file ] Το αρχείο δεν είναι άδειο [ -r file ] Το αρχείο είναι readable. Έχουµε δικαίωµα να το διαβάσουµε. [ -w file ] Το αρχείο είναι writeable. Έχουµε δικαίωµα να γράψουµε σε αυτό [ -x file ] Το αρχείο είναι executable. Έχουµε δικαίωµα να το εκτελέσουµε [ -f file ] Το αρχείο υπάρχει και είναι απλό αρχείο [ -d file ] Το αρχείο υπάρχει και είναι κατάλογος (directory) [ -c file ] Το αρχείο υπάρχει και είναι ειδικό αρχείο χαρακτήρων. Συνήθως συσκευή χαρακτήρων όπως ένα modem. [ -b file ] Το αρχείο υπάρχει και είναι ειδικό αρχείο τύπου block. Συνήθως συσκευή block όπως ένας σκληρός δίσκος 2. Εξετάζοντας strings Προσοχή στα κενά στις δυο πλευρές του = και των άλλων συµβόλων. [ -z string ] Το µήκος του string είναι µηδενικό. (0 χαρακτήρες) [ -n string ] Το µήκος του string είναι µη µηδενικό (έχει χαρακτήρες) [ string1 = string2 ] Τα δυο strings είναι ίδια [ string1!= string2 ] Τα δυο strings είναι διαφορετικά [ string ] Το string δεν είναι null 10

3. Εξετάζοντας ακεραίους. Προσοχή και εδώ στα κενά [ int1 eq int2 ] Οι δυο ακέραιοι είναι ίσοι [ int1 ne int2 ] Οι δυο ακέραιοι είναι άνισοι [ int1 ge int2 ] Ο πρώτος ακέραιος είναι µεγαλύτερος ή ίσος µε τον δεύτερο [ int1 gt int2 ] Ο πρώτος ακέραιος είναι µεγαλύτερος από τον δεύτερο [ int1 le int2 ] Ο πρώτος ακέραιος είναι µικρότερος ή ίσος µε τον δεύτερο [ int1 lt int2 ] Ο πρώτος ακέραιος είναι µικρότερος από τον δεύτερο 4. Λογικοί τελεστές. Προσοχή και εδώ στα κενά! condition Άρνηση συνθήκης. Λογικός Τελεστής NOT Condition1 a condition2 Λογικός τελεστής ΚΑΙ (AND). Επιστρέφεται αληθής τιµή όταν ΚΑΙ οι δυο συνθήκες είναι αληθείς. Condition1 o condition2 Λογικός τελεστής Ή (OR). Επιστρέφεται αληθής τιµή όταν τουλάχιστον µια συνθήκη είναι αληθής. \( group \) Ειδικές παρενθέσεις που χρησιµοποιούνται για οµαδοποίηση συνθηκών. (escaped parentheses) Παραδείγµατα: if [ $3 = Monday ] Εξετάζει αν η τρίτη παράµετρος είναι το string Monday. Αν αυτό συµβαίνει είναι αληθής if [ -s /etc/passwd ] Εξετάζει αν το αρχείο /etc/passwd έχει κάτι µέσα γραµµένο και δεν είναι άδειο. Αν συµβαίνει αυτό τότε η συνθήκη είναι αληθής. Η εκτέλεση της εντολής δείχνει ταυτόχρονα ότι το αρχείο υπάρχει αλλά δεν µας λέει τι είναι. Θα µπορούσε πχ να είναι κατάλογος if [! -d /etc/group ] Εξετάζει αν το αρχείο /etc/group είναι κατάλογος. Με την άρνηση της συνθήκης η test είναι αληθής όταν το αρχείο ΔΕΝ είναι κατάλογος. (Πράγµα που συµβαίνει γιατί το αρχείο /etc/group είναι κανονικό αρχείο) if [ -u /bin/passwd ] Εξετάζει αν το αρχείο /bin/passwd έχει δικαίωµα SUID πράγµα που συµβαίνει οπότε η συνθήκη είναι αληθής και η test επιστρέφει 0. (κωδικός σωστής εκτέλεσης) if [ $? eq 0 ] Εξετάζει αν εκτελέστηκε σωστά η προηγούµενη εντολή. Αν όντως εκτελέστηκε σωστά η συνθήκη είναι αληθής. 11

if [ $? eq 1 ] Εξετάζει αν εκτελέστηκε λάθος η τελευταία εντολή. if [ \( $? eq 0 \) a \( $? eq 1 \) ] Για να είναι αληθής αυτή η συνθήκη πρέπει ταυτόχρονα η τελευταία εντολή να εκτελέστηκε ΚΑΙ σωστά ΚΑΙ λάθος, πράγµα αδύνατον οπότε η συνθήκη είναι ΠΑΝΤΑ ψευδής if [ \( $? eq 0 \) o \( $? eq 1 \) ] Για να είναι αληθής αυτή η συνθήκη πρέπει η τελευταία εντολή να έδωσε κωδικό σωστής εκτέλεσης 0 ή λάθος εκτέλεσης 1. Αληθής ΠΑΝΤΑ σχεδόν για όλες τις εντολές. Εξαιρούνται µόνο ορισµένες που επιστρέφουν και άλλους κωδικούς σφάλµατος όπως πχ η expr if [ $# -gt 5 ] Εξετάζει αν ο αριθµός παραµέτρων είναι µεγαλύτερος του 5 if [ -f /etc/printcap ] Εξετάζει αν το αρχείο /etc/printcap είναι κανονικό αρχείο και υπάρχει. while Η εντολή while χρησιµοποιείτε όπως σε όλες τις γλώσσες για την εκτέλεση ενός κύκλου εντολών κάτω από κάποια συνθήκη. (Conditional loop). Η σύνταξή της είναι ως εξής: while <συνθήκη>;do <εντολές> done Θυµίζουµε ότι στην θέση της συνθήκης µπαίνει κάποια εντολή. (Συνήθως η εντολή test) Ο βρόχος while εκτελείτε όσο η συνθήκη είναι αληθής. Όσο δηλαδή η εντολή που παίζει το ρόλο της συνθήκης επιστρέφει κωδικό σωστής εκτέλεσης (κωδικός 0). until Παρόµοια µε τον βρόχο while. Η until όµως εκτελείται όσο η συνθήκη είναι ψευδής. Μόλις η συνθήκη γίνει αληθής σταµατάει η εκτέλεση του βρόχου. Η σύνταξή της είναι: until <συνθήκη>;do <εντολές> done expr Η εντολή expr χρησιµοποιείτε για να υπολογίζει αριθµητικές εκφράσεις ακεραίων. Ως γνωστό το κέλυφος του UNIX δεν αναγνωρίζει αριθµούς, οπότε τον ρόλο αυτό τον αναλαµβάνει η expr. Παραδείγµατα: i=`expr $i +1` Προσθέτει το 1 στο i και βάζει το αποτέλεσµα ξανά στο i. var=`expr $var 5` Αφαιρεί το 5 από το var και βάζει το αποτέλεσµα ξανά στο var 12

var1=`expr $var \* 3` Πολλαπλασιάζει το var µε το 3 και βάζει το αποτέλεσµα στο var1 var2=`expr $var \/ 4` Διαιρεί το var µε το 4 και βάζει το αποτέλεσµα στο var2 Προσοχή όλη η έκφραση περικλείεται σε ανάποδα εισαγωγικά (`) που σηµαίνουν ότι η εντολή εκτελείται. Η χρήση του \ πριν από το * και το / είναι αναγκαία γιατί αυτά τα σύµβολα για το κέλυφος είναι µεταχαρακτήρες. Παράδειγµα expr σε while loop. i=1 while [ $i lt 100 ];do echo $i i=`expr $i + 1` done Η χρήση του i είναι για µετρητής εκτελέσεων του βρόχου. H expr επιστρέφει κωδικό εκτέλεσης µεγαλύτερο ή ίσο του 2 όταν προσπαθούµε να κάνουµε πράξεις µε µεταβλητές που ΔΕΝ είναι αριθµοί. Άσκηση test1 Κάντε ένα πρόγραµµα σεναρίου κελύφους (script) µε µια παράµετρο που να δηµιουργεί ένα αρχείο µε όνοµα την παράµετρο. Αν δοθεί χωρίς παράµετρο να δηµιουργεί το myfile.txt. Για περισσότερες από µια παραµέτρους να βγαίνει µήνυµα λάθους. Αν το αρχείο µε όνοµα την παράµετρο υπάρχει να κάνει έλεγχο επικάλυψης (overwrite) να µας ρωτάει τι να κάνουµε και να κάνει ότι του πούµε. Λύση: if [ $# -gt 1 ];then echo usage: test1 parameter elif [ $# -eq 0 ]; then touch myfile.txt else if [ -f $1 ];then echo file $1 exists. Overwrite? Yy/Nn read answer if [ \( $answer!= y \) a \( $answer!= Y \) ];then echo file NOT overwritten else >$1 echo file $1 overwritten fi else touch $1 echo file $1 created fi fi 13

Ασκήσεις 1. Δηµιουργείστε ένα ψευδώνυµο το οποίο να εµφανίζει το history, µε αντίστροφη σειρά εκτέλεσης. 2. Στην άσκηση αυτή θα δηµιουργήσετε νέα ψευδώνυµα και θα τα αποθηκεύσετε ώστε να µπορείτε να τα χρησιµοποιήσετε ξανά. Φτιάξτε ένα ψευδώνυµο της εντολής clear που θα έχει το όνοµα c. Ελέγξτε ότι φτιάξατε το ψευδώνυµο και εκτελέστε το. Τώρα θα φτιάξετε ένα ακόµη ψευδώνυµο, µε όνοµα lr. Το ψευδώνυµο lr, θα εκτελεί την εντολή ls µε τις ακόλουθες επιλογές. (α) Το ψευδώνυµο θα εµφανίζει τη «µακρυά» µορφή της εντολής ls (long listing) (β) To ψευδώνυµο θα δείχνει και τα κρυφά αρχεία (γ) Θα εµφανίζει δείκτη (indicator) για το είδος του αρχείου, δίπλα στο όνοµα κάθε αρχείου (δ) Θα εµφανίζει τα αποτελέσµατα, ταξινοµηµένα κατά το χρόνο τελευταίας τροποποίησής τους (modification time) (ε) Τα αποτελέσµατα θα ταξινοµούνται µε αντίστροφη σειρά Θα χρειαστεί να συµβουλευτείτε την εντολή man για την εντολή ls. Τα ψευδώνυµα που έχετε φτιάξει, δεν θα ισχύουν αν βγείτε από το σύστηµά σας. Θα χρειαστεί να τα αποθηκεύσετε, προκειµένου να είναι διαθέσιµα στο µέλλον. Ανοίξτε το αρχείο ~/.bashrc και κάτω από τη γραµµή: #User specific aliases and functions προσθέστε τα δύο ψευδώνυµα που φτιάξατε. Βγείτε από το σύστηµά σας και µπείτε ξανά. Δοκιµάστε τα ψευδώνυµα που αποθηκεύσατε. Σβήστε από το ~.bashrc την καταχώριση που κάνατε. 3. Στην άσκηση αυτή θα αλλάξετε την προτροπή εντολών σας (prompt). Αν χρειαστεί συµβουλευτείτε τη σελίδα bash του man (ψάξτε για τη συµβολοσειρά PROMPTING). Σε ένα τερµατικό, δείτε την τιµή της προτροπής εντολών. (α) Αλλάξτε την προτροπή σε "UBUNTU -> ". Προσέξτε να προσθέσετε ένα κενό χαρακτήρα µετά το > ώστε να ξεχωρίζουν οι εντολές από την προτροπή. (β) Τώρα να αλλάξετε την προτροπή ώστε να δείχνει το όνοµα του συστήµατός σας (hostname) και το χαρακτήρα $. (γ) Αλλάξτε την προτροπή εντολών ώστε να δείχνει και τον αύξοντα αριθµό εντολής από το ιστορικό. (δ) Αλλάξτε την προτροπή εντολών ώστε να δείχνει και το πλήρες µονοπάτι του τρέχοντα καταλόγου εργασίας, ανάµεσα στο όνοµα συστήµατος και την αρίθµηση των εντολών. Να εµφανίζει το χαρακτήρα : 14

(ε) Τώρα ανοίξτε το αρχείο ~/.bashrc και αποθηκεύστε την τελευταία µορφή της προτροπής. Αφού αποθηκεύσετε το αρχείο, ανοίξτε ένα νέο τερµατικό για να ελέγξετε ότι η προτροπή σας είναι όντως η επιθυµητή. Αφαιρέστε την αλλαγή που κάνατε στο ~/.bashrc 4. Όταν µία εντολή περιέχει µία άλλη εντολή περιεχόµενη σε backquotes (` `), ο φλοιός εκτελεί πρώτα την εντολή που βρίσκεται µέσα στα (` `) και το αποτέλεσµα αντικαθιστάται πριν την εκτέλεση της πρώτης εντολής. Χρησιµοποιήστε αυτή τη δυνατότητα για να εκτελέσετε την εντολή ls l για το πλήρες όνοµα του αρχείου που εκτελείται όταν τρέχετε gzip. Απάντηση: ls l `which gzip` 15