Εισαγωγή στο Λειτουργικό Σύστημα UNIX & GNU/Linux

Shells

  1. Build-in Commands

Με τον όρο "shell", εννούμε το πρόγραμμα εκείνο που δρα ως ενδιάμεσος κρίκος ανάμεσα στον υπολογιστή και τον χρήστη. Μέσω του shell, είναι δυνατόν να δωθούν εντολές στον υπολογιστή, αναλαμβάνει την διασύνδεση του ανθρώπου με τον υπολογιστή. Για όσους είναι εξοικοιωμένοι με το DOS, το UNIX shell είναι το ανάλογο του command.com.

Υπάρχουν δύο μεγάλες κατηγορίες shells. Τα γραφικά shells και τα command line shells. Ένα καλό παράδειγμα γραφικού shell είναι ο Explorer™ που εμφανίζεται στο περιβάλλον των Microsoft™ Windows™. Μέσα από αυτο, έχει κανείς την δυνατότητα να ελέγξει τον υπολογιστή και να χρησιμοποιήσει τα προγράμματα που είναι εγκατεστημένα. Είναι ένα περιβάλλον φιλικό προς τον χρήστη, περιέχει menu και εικονίδια που κατά κάποιο τρόπο αυτοματοποιούν τις διαδικασίες εκτέλεσης ενός προγράμματος. Από την άλλη πλευρά είναι συνηθισμένο διάφορα λειτουργικά συστήματα να διαθέτουν και ένα comand line shell προκειμένου να δίνεται η δυνατότητα στο χρήστη να μπορεί να έχει καλύτερο έλεγχο στη διαχείριση του υπολογιστή.

Στο UNIX υπάρχουν πολλά διαφορετικά command line shells με διάφορες δυνατότηττες το καθένα. Μερικά από τα πιο συνηθισμένα είναι τα sh, bash, ksh, csh και tcsh.

Ο τρόπος με τον οποίο ένα shell εκτελεί τις εντολές του συστήματος, είναι ο εξής: έστω ότι ο χρήστης θέλει να δει τα περιεχόμενα ενός directory. Γράφει στο shell την εντολή ls. Το shell προκειμένου να εκτελέσει στην εντολή, πρέπει να βρει αρχικά να βρεί που είναι η εντολή ώστε να μπορέσει να την "διαβάσει" και να την "εκτελέσει" (το πως γίνεται αυτό θα το δούμε αργότερα). Αφού γίνει αυτό το βήμα η εντολή εκτελείται και το shell παρουσιάζει την οθόνη το αποτέλεσμα της εντολής.

Το κάθε shell μπορεί να εκτελέσει εκτός από τις εντολές του UNIX που έχουμε ήδη παρουσιάσει (όπως την ls για παράδειγμα) και ένα αριθμό εντολών που δεν υπάρχουν (στις περισσότερες περιπτώσεις) μέσα στο Λ.Σ, αλλά είναι, όπως λέμε, εσωτερικές εντολές του shell (build-in shell commands). Υπάρχουν περιπτώσεις που κάποιες από τις εσωτερικές εντολές ενός shell, ταυτίζονται με τις εσωτερικές εντολές ενός άλλου shell. Για παράδειγμα, σχεδόν όλα τα shells διαθέτουν την εντολή pwd (print working directory) που δείχνει στον χρήστη σε ποιο directory βρίσκεται.

Ένα άλλο χαρακτηριστικό των shells είναι οι μεταβλητές του shell (shell variables). Διακρίνουμε δύο κατηγορίες μεταβλητών του shell: τις τοπικές (local) και τις μεταβλητές περιβάλλοντος (environment variables). Η διαφορά τους έγγειται στο ότι οι τοπικές μεταβλητές αφορούν το shell στο οποίο ορίζονται, ενώ οι μεταβλητές περιβάλλοντος χρησιμοποιούνται τόσο από το shell στο οποίο ορίζονται όσο και από τις διεργασίες που ξεκινούν από αυτο το shell.

Για να γίνει σαφής η χρησιμότητά τους, θα χρησιμοποιήσουμε το εξής παράδειγμα: έστω ότι χρειάζεται αναφερόμαστε συχνά σε ένα directory με το full path του, ας πούμε το /usr/local/bin. Για να μην χρειάζεται κάθε φορά να γράφουμε όλο το path, μπορούμε να ορίσουμε στο shell μια μεταβλητή με όνομα lbin με αποτέλεσμα κάθε φορά που αναφερόμαστε στην μεταβλητή με όνομα lbin το shell θα ξέρει ότι στην πραγματικότητα αναφερόμαστε στο directory με full path name /usr/local/bin. Στην πράξη, η χρήση των μεταβλητών έχει πολύ μεγαλύτερη χρησιμότητα από ότι σε αυτό το παράδειγμα και αυτό θα φανεί καλύτερα παρακάτω.

Όταν ξεκινάει η εκτέλεση ενός shell ορίζονται αυτόματα κάποιες μεταβλητές από το ίδιο το shell. Η σκοπιμότητα πίσω από αυτό, είναι ότι ο χρήστης χρειάζεται από την αρχή κάποιο βασικό περιβάλλον για να εργαστεί. Έτσι είναι αναμενόμενο το shell να ξέρει για παράδειγμα τα directories που βρίσκονται μερικές από τις πιο βασικές εντολές του συστήματος όπως η ls ή να μπορεί ανά πάσα στιγμή να δώσει πληροφορίες στα προγράμματα που εκτελεί ο χρήστης σχετικά με το ποιος τα χρησιμοποιεί, ή ποιο είναι το home directory του χρήστη, ή πως ονομάζεται ο υπολογιστής στον οποίο δουλεύει ο συγκεκριμένος χρήστης.

Αφού όμως μιλάμε για "μεταβλητές", είναι αναμενόμενο να υποθέσει κανείς ότι ανεξάρτητα με την τιμή που δίνει το shell σε κάθε μια από αυτές τις μεταβλητές, ο χρήστης μπορεί να αλλάξει την τιμή τους ώστε να τις προσαρμόσει στις ανάγκες του.