Ανατομία μίας εντολής

geonik250 | Πέμ, 10/16/2008 - 20:19 | 8' | 7

Πολλές φορές οι νέοι χρήστες παίρνουν απάντηση για κάποιο πρόβλημά τους στο στυλ γράψε αυτό στο terminal και θα λυθεί το πρόβλημα. Όπως είχα δει σε ένα post έγραφε ο χρήστης μετά από μία τέτοια απάντηση "εντάξει λύθηκε το πρόβλημα αλλά δεν κατάλαβα τίποτα για το πως έγινε αυτό".

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

Για να το πω διαφορετικά το πρόβλημα δεν είναι ότι δεν γνωρίζει το λεξιλόγιο αλλά το συντακτικό της γλώσσας του τερματικού.

Θα προσπαθήσω λοιπόν να δώσω τα βασικά της σύνταξης μίας εντολής ελπίζοντας να βοηθηθούν οι νέοι χρήστες.

Μία εντολή στο "τερματικό" είναι σαν μία προταση της φυσικής γλώσσσας. Κάθε λέξη έχει τη σημασία και το ρόλο της.

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

Για παράδειγμα μία απλή εντολή είναι:

$clear

Αυτή έχει μόνο το ρήμα: "clear" Λες λοιπόν στο τερματικό "κάνε clear" (το κάνε είναι το enter που πρέπει να πατήσουμε στο τέλος για να ξεκινήσει η εκτέλεση της εντολής. "το clear σημαίνει καθάρισε την οθόνη."

Άλλο παράδειγμα απλής εντολής

$ls (δείξε μου τα αρχεία του τρέχοντος καταλόγου)

Αυτή η εντολή έχει όμως και κάποιες επιπλέον δυνατότητες στη συνταξη. Μπορούμε να ορίσουμε παραμέτρους στην εκτέλεσή της. Οι παράμετροι είναι σαν τα επιρρήματα. Αλλάζουν λίγο αυτό που κάνει το ρήμα, δηλαδή στην περίπτωσή μας η εντολή.

$ls -l

Λέει δείξε μου τα αρχεία του τρέχοντος καταλόγου(ls), αλλά επιπλέον δείξε μου όλες τις λεπτομέρειες για κάθε αρχείο(-l)

Μπορούμε να βάλουμε πολλές παραμέτρους - επιρρήματα σε μία εντολή

$ls -l -a (δείξε μου τα αρχεία(ls) με τις λεπτομέρειες(-l) και μαζί δείξε και τα κρυφά αρχεία(-a))

Επειδή οι linuxαδες (και παλιότερα οι UNIXαδες) είναι τρομεροί τεμπέληδες βρήκαν έναν τρόπο να δίνουν πολλές παραμέτρους τυπογραφόντας λιγότερους χαρακτήρες. Η επόμενη εντολή κάνει ακριβώς ότι και η προηγούμενη αλλά χρειάζεται να τυπώσεις λιγότερους χαρακτήρες.

$ls -la (δείξε μου τα αρχεία (ls) και με λεπτομέρειες και τα κρυφά (-la))

Όλες οι εντολές που προέρχονται απο τα παλιά UNIX έχουν αυτή τη δυνατότητα. Να βάζεις δηλαδή μία παύλα και μετά πολλές παραμέτρους μαζί αντί να βάζεις παύλα για κάθε μία παράμετρο.

Στο linux όμως δεν έχουμε μόνο εντολές από τα παλιά αλλά και πολλές νέες. Αυτές δίνουν ακόμη μία δυνατότητα για το πως να ορίζεις παραμέτρους. Είναι τα λεγόμενα μακριά ονόματα παραμέτρων.

Για παράδειγμα

$ls --all (δείξε τα αρχεία(ls) μαζί και τα κρυφά (--all))

Με λίγη προσοχή βλέπουμε ότι η παράμετρος --all λέει το ίδιο πράγμα με την παράμετρο -a. Είναι απλά θέμα γούστου τι θέλει να χρησιμοποιεί ο καθένας. Μπορούμε μάλιστα σε μία εντολή να μπερδεύουμε μακριές και κανονικές παραμέτρους

$ls -l --all (Είναι το ίδιο με το ls -al)

Προσοχή όμως. Αν χρησιμοποιήσουμε μακριές παραμέτρους δεν μπορούμε να τις βάλουμε όλες μαζί.

Για παράδειγμα αυτό είναι σωστό

$ls --all --author

Αυτό δεν είναι

$ls --allauthor

Τέλος έχουμε και το αντικείμενο της πρότασης (της εντολής δηλαδή) που λέμε στον υπολογιστή.

Όπως το αντικείμενο σε μία πρόταση ορίζει που θα γίνει η ενέργεια του
ρήματος έτσι και το όρισμα της εντολής λέει που θέλουμε να γίνει η
ενέργειά της.

Αντί να μας δείχνει η εντολή ls πάντα τον τρέχοντα κατάλογο μπορούμε να της πούμε εμείς ποιόν να μας δείξει.

$ls /etc (δείξε μου τα αρχεία(ls) του καταλόγου /etc )

Τέλος όλα αυτά μπορούν να συνδυαστούν. Ρήμα επίρρημα αντικείμενο.

$ls -la /etc (δείξε μου τα αρχεία (ls) με λεπτομέρειες και τα κρυφά(-la) του καταλόγου /etc)

Είμαστε σε θέση τώρα να καταλάβουμε τη σύνταξη μιας πρότασης του linux (εντολής) χωρίς απαραίτητα να ξέρουμε ακριβώς τι κάνει το κάθε μέρος της. Βέβαια χρήσιμο είναι να ξέρουμε και το λεξιλόγιο αλλά το πρώτο βήμα στην κατανόηση μιας εντολής είναι η σύνταξή της.

Για παράδειγμα η ακόλουθη εντολή δεν εκτελείται γιατί δεν υπάρχει.

$kg -d green

Παρόλα αυτά όμως το νόημά της αν υπήρχε θα ήταν κάνε την ενέργεια της εντολής kg τροποποιόντας τη λειτουργία της όπως ορίζει η παράμετρος -d πάνω στο αντικείμενο green.

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

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

$man bash

και καλό διάβασμα.

Δώσε αστέρια!
Σχόλια

Εξαιρετικός !!!! Πολύ καλή παρουσίαση του τερματικού ... Μπράβο !

Η ανάλυση σου δίχνει ακριβώς αυτο που κάνει τη διαφορα στα τερματικα. Στο Linux το τερματικό δεν πέρνει απλά "ξερές"  εντολές ! Ειναι ενα "ρομαντικό" περιβάλλον οπου "μιλάς" αμεσα με τον πυρήνα (TuX) και κατεπέκταση στον υπολογηστή σου.. απλά προς χάριν ταχύτητας χρησιμοποιείται συντομογραφία των λέξεων. :)

Μπράβο! Αυτό εννοούμε όταν λέμε "αναλυτικά". Να το καταλαβαίνουν όλοι,
ακόμα και αυτοί που μπαίνουν σήμερα στο forum έστω και κάτα τύχη! :)

Όσο ζώ, μαθαίνω.