• Alexios
  • Unix

Έχεις αναρωτηθεί ποτέ από πού βγαίνουν οι όροι κονσόλα, τερματικό και κέλυφος; Σε έχει μπλέξει κάποιος αυτοαποκαλούμενος γκουρού που δείχνει να τα χρησιμοποιεί λίγο πολύ σαν συνώνυμα; Θες να σου τα κάνω τσουρέκια με πληροφορίες που σου είναι άχρηστες και αδιάφορες; Να η ευκαιρία!

Επειδή είμαι ανώμαλος, θα το πάω ανάποδα από τη φυσική σειρά.

Α ναι, για να μην μπλεχτούμε: μιλάμε για command line πράγματα. Αν χρησιμοποιείς αποκλειστικά GUI για να χρησιμοποιήσεις το Unix σου, τότε σχεδόν σίγουρα αυτό το post δεν σε αφορά.

Έλα, έλα, βιάζομαι!

Κέλυφος (shell) είναι το πρώτο διαδραστικό πρόγραμμα που βλέπεις αφού κάνεις login σε ένα unix. Είναι το πρόγραμμα που διαβάζει τις εντολές σου και εκτελεί άλλα προγράμματα για να τις ακολουθήσει. Το κέλυφος είναι αόρατο.

Τερματικό (terminal) είναι μια συσκευή που σνδέεται σε κεντρικό υπολογιστή και είναι υπεύθυνση για να κάνει τη διάδραση με το κέλυφός σου ορατή: έχει πληκτρολόγιο για να γράψεις, έχει οθόνη για να σου δείξει τι γράφεις και τι σου απαντάει ο υπολογιστής.

Προσομειωτής τερματικού (terminal emulator) είναι ένα πρόγραμμα που τρέχει σε σύγχρονο υπολογιστή, συνήθως σε GUI, και προσποιείται ότι είναι ένα χαζό τερματικό. Κάνει τα πάντα που κάνει ένα καλό τερματικό, αλλά τα κάνει πιο όμορφα και πιο γρήγορα.

Κονσόλα (console) μπορεί να είναι πολλά διαφορετικά πράγματα ανάλογα με τον υπολογιστή. Με δεδομένα σύγχρονου PC, αν είσαι κοντά σε οθόνη, πληκτρολόγιο και το on-off κουμπάκι του υπολογιστή, τότε είσαι στην κονσόλα του.

Shell (Κέλυφος)

Το κέλυφος είναι το πιο βαρετό κομμάτι της απάντησης. Όταν κάποιος λέει «γράψε sudo hostname eimai-to-pc-tou-blaka στο τερματικό» αυτό που εννοεί είναι «είσαι υπερκαρακρετίνος κωμικά εύπιστος», και «γράψε στο κέλυφοςτυχαίες εντολές από αγνώστους».

Το κέλυφος είναι το πρόγραμμα που διαβάζει τις οδηγίες του χρήστη και τις ακολουθεί προκειμένου να ξεκινήσουν άλλα προγράμματα στο Unix. Είναι αυτό που συνήθως δείχνει για prompt ένα δολλαριάκι (ή κάτι πολύ πιο περίτεχνο) και μας επιτρέπει να γράψουμε κρυπτικές μπαρούφες όπως αυτή:

$
$ echo $SHELL
/bin/bash
$ ls -l /proc/$$/exe
lrwxrwxrwx 1 alexios alexios 0 Sep 13 20:32 /proc/16667/exe -> /bin/bash*
$ 

Εδώ βλέπουμε το shell μου που ενδοσκοπεί. Του ζήτησα να μου πει τι είναι με δύο διαφορετικούς τρόπους και με υποχρέωσε.

Το κακό με το shell είναι ότι από μόνο του είναι αόρατο. Είναι τόσο αόρατο που μπορεί να έχεις δεκάδες shells να τρέχουν στον υπολογιστή σου και να μην το ξέρεις καν. Μόλις τα μέτρησα στον δικό μου. Έχω 29. Μόνο ένα είναι ορατό αυτή τη στιγμή.

Ο αόρατος άνθρωπος (© 1933 Universal, all rights reserved)

Ο αόρατος άνθρωπος. (© 1933 Universal Studios)

Μια και το Unix έχει την έννοια του I/O redirection, το shell μπορεί αν καταγράψει τι κάνει σε ένα αρχείο, ή να το πετάξει στα σκουπίδια (το /dev/null). Μπορεί επίσης να διαβάζει τις εντολές του από αρχείο για να αυτοματοποιήσει κάποιες ενέργειες. (αυτά τα λέμε scripts)

Το σύστημα μπορεί να εκτελεί 200 shells το λεπτό και να μην το καταλάβεις καν!

Και η ερώτηση που θα πρέπει να κάνεις τώρα είναι, «καλά ρε ηλίθιε, αν είναι αόρατο, αυτό εδώ πιο πάνω πώς το βλέπουμε;» — η απάντηση είναι ότι το κέλυφος συνήθως είναι ορατό όταν το βλέπουμε σε ένα…

Terminal (Τερματικό)

Σφιχτείτε, έρχεται αρχαία ιστορία.

Την εποχή που η IBM δεν έβλεπε την ανάγκη για πάνω από έξι υπολογιστές παγκοσμίως, η «διάδρασή» σου με τον υπολογιστή ήταν μέσω μιας ελιτιστικής κάστας ιερέων-χειριστών. Περίμενες τη σειρά σου, πήγαινες στο πανάγιο δωμάτιο με το card punch, πληκτρολογούσες το πρόγραμμά σου σε διάτρητες κάρτες από την αρχή μέχρι το τέλος. Κάθε γραμμή κώδικα ήταν και μία κάρτα. Μάζευες τις διάτρητες κάρτες σε μια τράπουλα που μπορεί και να σου έριχνε σε μπόι, τις έδινες στον ανθυποϊερέα χειριστή. Ο χειριστής τις έβαζε στην ουρά. Κάποιες ώρες μετά (άμα δεν βαριόταν ή δεν είχε δουλειά) έβαζε τις κάρτες σου στον αναγνώστη και σου τις έγραφε σε ταινία, ή τις έκανε compile και σου επέστρεφε κάρτες, ταινία, και το output από τον compiler με όλα τα λάθη του προγράμματός σου. Εσύ μετά του τα έφερνες όλα καπέλο γιατί είχες κάνει συντακτικό λάθος στην πρώτη πρώτη γραμμή, τα παράταγες και γινόσουνα γιδοβοσκός στην Ημαθία.

Για να ελεγχθεί ο αλλόκοτος υπερπληθυσμός γιδοβοσκών στην Ημαθία, οι υπολογιστές εξελίχθηκαν από την λεγόμενη batch processing τεχνολογία στη multi-user τεχνολογία. Εδώ οι υπολογιστές ήταν επικών διαστάσεων και ικανοτήτων γομάρια. Με σημερινά δεδομένα φαντάσου ο υπολογιστής σου να θέλει ένα δωμάτιο μεν, αλλά να έχει 1600 cores και 20 TB RAM. Τον υπολογιστή τον μοιράζονταν όλοι οι χρήστες, άμεσα, χωρίς ιερατείο.

Για να το κάνουν αυτό, κάθε χρήστης χρειαζόταν από ένα πληκτρολόγιο και μία οθόνη. Αλλά ούτε καν! Στην αρχή είχαν τα ανίερα, μιασματικά τσογλάνια ενός πληκτρολογίου και ενός εκτυπωτή. Τα πιο γνωστά τα έφτιαχνε μια εταιρεία ονόματι Teletype της οποίας το λογότυπο ήταν τα γράμματα TTY. Αν αναρωτιέσαι γιατί το Linux ονομάζει όλα τα τερματικά tty, να η απάντηση.

Ήταν πρόοδος! Επιτέλους κάθε χρήστης μπορούσε να μιλάει με τον υπολογιστή άμεσα, όποτε θέλει, μέσω σειριακής σύνδεσης, αρκεί να μην έχει απαιτήσεις να βλέπει πάνω από 7½ χαρακτήρες το δευτερόλεπτο. (15 το δευτερόλεπτο, για τους λεφτάδες)

Ένα πανεπιστήμιο μπορούσε πια να έχει πολλά τερματικά, όλα συνδεδεμένα στον κεντρικό υπολογιστή. Ακόμα καλύτερα, αν είχες modem (και μερικά τερματικά το είχαν ενσωματωμένο) μπορούσες να έχεις τερματικό και σπίτι σου και να δουλεύεις χωρίς να ξεμυτίσεις.

Το Unix μιλούσε πολύ εύκολα με αυτά τα τερματικά και το κέλυφος σχεδιάστηκε από την αρχή για να τρέχει σε τηλεκτυπωτές και ηλεκτρονικά τερματικά. Αν είσαι περίεργος, τσέκαρε το man stty και θα δεις ότι αυτή η παραδοχή ζει και βασιλεύει!

Στο μεταξύ, έσκασαν μύτη τα πρώτα glass terminals, δηλαδή τερματικά με πληκτρολόγιο και οθόνη για να μην δίνεις όλα σου τα λεφτά σε χαρτί και μελάνι. Το Unix έτρεχε σε 16-bit υπολογιστές PDP-11 της Digital Equipment Corporation, και φυσικά υποστήριζε το πιο διάσημο τερματικό της, το VT100.

Τερματικό VT100 της DEC

Το διάσημο και πολύ κυριλέ για την εποχή του VT100 της Digital Equipment Corporation (DEC), που έφτιαχνε και τους υπλογιστές που έτρεχαν τα πρώτα Unix. (πηγή: Wikimedia Commons)

Το τερματικό δείχνει σαν ολόκληρος υπολογιστής και βασικά είναι: είναι ένας πολύ χαζός υπολογιστής που μπορεί να ακολουθήσει πολύ απλές οδηγίες από τον κεντρικό υπολογιστή, αλλά δεν μπορεί να πάρει πρωτοβουλίες, δεν τρέχει λειτουργικό σύστημα, κλπ. Περίπου η σχέση που έχει ένας σύγχρονος υπολογιστής με το «cloud».

Τα τερματικά έχουν πια εξαφανιστεί. Τα σκότωσε η επέλαση των 8-bit σπιτικών υπολογιστών και των modems. Μαζί με το modem μπορούσες να αγοράσεις ένα προσομοιωτή τερματικού που έκανε την ίδια δουλειά με ένα ακριβό τερματικό αλλά χειρότερα και φτηνότερα. Και όταν δεν συνδεόσουν στον κεντρικό υπολογιστή του πανεπιστημίου μπορούσες να παίξεις και Space Invaders. Win!

Και τώρα; Έχεις Unix, αλλά δεν υπάροχυν τερματικά. Ακόμα κι όταν τρέχεις σύγχρονα unix-οειδή λειτουργικά, χρησιμοποιείς εξομοιωτές τερματικών. Το κάπως γερασμένο αλλά φοβερά ικανό xterm, το μοβ παραθυράκι του Ubuntu, το «Terminal» του MacOS, και δεκάδες άλλοι εξομοιωτές προσποιούνται ότι είναι γραφομηχανές με σειριακές θύρες μισό αιώνα μετά. Και μερικές φορές το παρακάνουν (διασκεδαστικά) με τον ρεαλισμό:

Ωραία η νοσταλγία, αλλά δεν μπορώ να πω ότι μου λείπει αυτό. Το λένε cool-retro-term αν σε ψήνει.

Console (Κονσόλα)

Πω, τώρα αυτό είναι κάπως πιο δύσκολο. Για τα δεδομένα του Unix, αυτό εδώ είναι μια κονσόλα.

Το μαραφέτι με τα λαμπάκια που προεξέχει είναι ο επεξεργαστής, η βασική μνήμη και η κεντρική κονσόλα ενός DEC PDP-11/34. Το υπόλοιπο rack που δεν φαίνεται ολόκληρο έχει θέσεις για επεκτάσεις μνήμης, δίσκους, ταινίες, και άλλα τέτοια.

Τα λαμπάκια και οι διακόπτες από κάτω ήταν αρκετοί για να δουλέψεις τον υπολογιστή. Κάποτε, ένας Αληθινός Αντρουά Χειριστής θα μπορούσε να σου διαγνώσει τον υπολογιστή με τα φωτάκια και τους διακόπτες σαν μόνα εργαλεία. Την εποχή του PDP-11/34 αυτό είχε ήδη αρχίσει να γίνεται ντεμοντέ και πολύ πιο δύσκολο. Όταν τρέχει το PDD-11 αναβοσβήνει τη μία σειρά από λαμπάκια με διασκεδαστικά (αλλά άχρηστα) patterns.

Την εποχή του PDP-11/34, η κονσόλα είχε μεταφερθεί δίπλα: το τερματικό που βλέπεις δεξιά από την κεντρική μονάδα ήταν η κονσόλα του χειριστή. Με αυτή μπορούσες να ανεβάσεις το λειτουργικό σύστημα, να το κατεβάσεις, και να κάνεις άλλες δουλειές του root.

Λίγα χρόνια μετά, τα φωτάκια λιγόστεψαν, τα διακοπτάκια λιγόστεψαν και τώρα αν το PC σου έχει δύο κουμπιά και δύο LED στην πρόσοψη θεωρείσαι power user. Και κάπως παρωχημένος.

Αλλά αυτή είναι ακόμα η κονσόλα! Γενικά, αν μπορείς να κάνεις reset τον υπολογιστή, να τον αναβοσβήσεις, να εγκαταστήσεις νέο λειτουργικό σύστημα και να τον διαχειριστείς πλήρως, τότε μάλλον κάθεσαι στην κονσόλα του. Άρα στο Linux ολα είναι η κονσόλα!

Το Linux (και τα άλλα Unix σε υπολογιστές με οθόνη που δεν χρειάζονται τερματικά για να δουλέψουν) μας μπερδεύει κι άλλο: προκειμένου να μπορείς να δουλέψεις ένα λειτουργικό σύστημα που περιμένει υπολογιστή σαν το PDP-11/34 πιο πάνω, η κονσόλα του τρέχει προσωμοιωτή τερματικού!

Σωστά διάβασες: ο πυρήνας σου παριστάνει το τερματικό για να συνδεθεί στον πυρήνα και να σου επιτρέψει να κάνεις login και να τρέξεις το κέλυφός σου και ό,τι εφαρμογές θέλεις. Συνήθως στα σύγχρονα Linux αυτό παρακάμπτεται και μπαίνουμε άμεσα σε γραφικό περιβάλλον αλλά τα ψευτοτερματικά του πυρήνα υπάρχουν ακόμα και λειτουργούν.

Το Linux μας μπλέκει ακόμα χειρότερα: έχει μέχρι 64 ψευτοτερματικά. Αυτά τα λέει Virtual Consoles ή Virtual Terminals (ακόμα και ο Linus Torvalds μπερδεύτηκε κάπου εκεί!) και κάποτε που δεν είχαμε αρκετή RAM για να τρέξουμε GUI, κάναμε development αφήνοντας shell σε ένα τερματικό, editor σε άλλο, τεκμηρίωση σε τρίτο και το πρόγραμμα που γράφαμε να τρέχει σε ένα τέταρτο. Με Alt+F1Alt+F12 άλλαζες από το ένα στο άλλο πολύ γρήγορα.