Οι γονείς μας μάλλον δεν θα μάθουν ποτέ ότι το GPS στο αυτοκίνητο έχει kernel, ούτε ότι οι σύγχρονες τηλεοράσεις ενσωματώνουν κάτι που ονομάζεται process scheduler. Εμείς πάλι ξέρουμε καλύτερα, κι αυτό επειδή έχουμε ακούσει για το Linux.

Γνωρίζουμε ότι το Linux κρύβεται στα smartphones, το εγκαθιστούμε καμιά φορά σε virtual machines για να πειραματιστούμε, γνωρίζουμε ότι θα το τρέχει κι ο cloud server που σκεπτόμαστε να ενοικιάσουμε. Μήπως έχει φτάσει η ώρα να το μάθουμε από την καλή και να του πάρουμε τον αέρα; Λέμε πως ναι, έχει φτάσει. Μόνο που για να το μάθουμε πραγματικά, να το εκτιμήσουμε και να το εκμεταλλευτούμε περίπου 129 φορές καλύτερα σε σχέση με τον Μέσο Παπαδόπουλο™, οφείλουμε ν’ αδιαφορήσουμε για το περιβάλλον γραφικών και να εστιάσουμε την προσοχή μας στη γραμμή εντολών (command line).

Το κέλυφος BASH

Ακριβώς όπως στην περίπτωση των Desktop Environments (GNOME, KDE, Xfce, κ.ά.), έτσι και στην περίπτωση της γραμμής εντολών το Linux προσφέρει αρκετές εναλλακτικές. Πριν προχωρήσουμε, όμως, πρέπει να ξεκαθαρίσουμε κάτι: Όπως κάνουμε λόγο για κέλυφος γραφικών κι αναφερόμαστε σε κάποιο παραθυρικό περιβάλλον, ομοίως μπορούμε να μιλήσουμε για κέλυφος ρυθμού χαρακτήρων και ν’ αναφερθούμε σε κάποια υλοποίηση της γραμμής εντολών. Βέβαια, όταν κάποιος χρήστης του Linux κάνει λόγο για το κέλυφος ή shell (σκέτο) αναφέρεται σχεδόν πάντα στη γραμμή εντολών. Η κυρίαρχη υλοποίηση της γραμμής εντολών του Linux γίνεται από το δημοφιλέστατο BASH. Πρόκειται για τον βελτιωμένο απόγονο ενός κελύφους που έτρεχε παλιά σε συστήματα Unix κι ονομαζόταν sh. Το όνομα BASH προκύπτει από τα αρχικά των λέξεων Bourne Again SHell κι αποτελεί λογοπαίγνιο του “born again” (γεννημένος ξανά). Κάπου εδώ θα μπορούσαμε να ξεκινήσουμε ένα καμένο flamewar, συζητώντας για την υπεροχή ή όχι του BASH έναντι άλλων υλοποιήσεων. Για να ‘μαστε ειλικρινείς, ο κύριος λόγος για τον οποίο ασχολούμαστε με το BASH είναι ένας: Είναι το προκαθορισμένο shell σε όλες τις διανομές Linux και στο Mac OS X, βρίσκεται κρυμμένο στα Android και iOS devices, ενώ μας κλείνει το μάτι κι όταν παίζουμε με τα BSDs.

Για τη συνέχεια θα ακολουθήσουμε μια ομαλή πορεία εκμάθησης και θα φροντίσουμε να ξεκινήσουμε τη γνωριμία με το BASH από τα απολύτως βασικά. Άλλωστε, στόχος μας δεν είναι μόνο να βοηθήσουμε τους “φτασμένους” χρήστες, αλλά και να ενθαρρύνουμε –και κατά βάθος να πωρώσουμε– τους νεοφερμένους. Στο παρόν άρθρο θεωρούμε ότι ο αναγνώστης βρίσκεται για πρώτη φορά μπροστά από τη γραμμή εντολών. Στα επόμενα άρθρα της μίνι σειράς μας θα προχωρήσουμε σε πιο προχωρημένα ζητήματα – αλλά αυτό είναι κάτι που το περιμένατε και πραγματικά δεν υπάρχει λόγος να χάνουμε άλλο χρόνο με τις εισαγωγές.

Πού βρίσκομαι; Πώς θα μετακινηθώ;

Κάθε φορά που ανοίγουμε ένα παράθυρο τερματικού ή συνδεόμαστε απομακρυσμένα μέσω SSH σε ένα σύστημα Linux, τοποθετούμαστε σε έναν κατάλογο που βρίσκεται κάτω από τον /home κι ονομάζεται home directory. Πρόκειται για τον κατάλογο που περιέχει όλους τους καταλόγους και τα αρχεία που ανήκουν στο λογαριασμό του χρήστη μας. Ένας τέτοιος κατάλογος υπάρχει για κάθε χρήστη του συστήματος και συνήθως το όνομά του ταυτίζεται με το username του χρήστη. Έτσι, για έναν λογαριασμό με username το pvar, η πλήρης διαδρομή (full path) για το αντίστοιχο home directory είναι η /home/pvar. Μ’ άλλα λόγια, όταν θα συνδεθούμε στο λογαριασμό του pvar, θα βρεθούμε αυτόματα στον κατάλογο /home/pvar.

Ένα από τα πρώτα ερωτήματα που προκύπτουν, αφού μάθουμε το πού βρισκόμαστε, αφορά στο πώς θα μετακινηθούμε. Όπως, πριν ακόμη κι απ’ αυτό το ερώτημα, προκύπτει ένα άλλο: Τι υπάρχει τριγύρω; Για να βλέπουμε αρχεία και καταλόγους υπάρχει το προγραμματάκι ls. Για παράδειγμα, για να εμφανίσουμε μια λίστα με τα αρχεία και τους καταλόγους που βρίσκονται στην τρέχουσα θέση μας, αρκεί να εκτελέσουμε το εξής:

ls -l

Το προγραμματάκι ls δέχεται πάρα πολλές παραμέτρους και θα ήταν άσκοπο να τις παραθέσουμε όλες. Θα σας πούμε μόνο ότι εμείς συνηθίζουμε να το χρησιμοποιούμε συνδυάζοντας την παράμετρο -l (από το list) με την παράμετρο -h (από το human), αλλά και με την παράμετρο -a (από το all). Η δεύτερη παράμετρος εξασφαλίζει ότι τα μεγέθη των αρχείων θα εμφανίζονται σε KiB, MiB, GiB ή σε οτιδήποτε άλλο βολεύει κάθε φορά. Το γιατί δεν συμβαίνει εξ ορισμού κάτι τέτοιο θα φανεί αργότερα, όταν θα μιλήσουμε για το scripting. Η τρίτη παράμετρος φροντίζει να εμφανιστούν όλα τα αρχεία ανεξαιρέτως – ακόμη και τα κρυφά. Για την ώρα, κρατείστε μόνο ότι ένας βολικός τρόπος χρήσης του ls έχει ως εξής:

ls -lha

Παρατηρείστε ότι οι τρεις παράμετροι κατά κάποιον τρόπο συμπυκνώθηκαν και δεν βάλαμε τρεις παύλες. Αν θελήσει κανείς να πληροφορηθεί για τις υπόλοιπες παραμέτρους του ls, μπορεί να χρησιμοποιήσει το σύστημα βοήθειας της γραμμής εντολών. Αναφερόμαστε στο πρόγραμμα man (από το manual). Προκειμένου να εμφανιστεί το κείμενο βοήθειας του ls, αρκεί να πληκτρολογήσουμε

man ls

Πριν επιστρέψουμε στο θέμα των καταλόγων και της πλοήγησης, σημειώστε ότι το man μπορεί να εμφανίσει το κείμενο βοήθειας που συνοδεύει κάθε πρόγραμμα της γραμμής εντολών. Το μόνο που έχουμε να κάνουμε είναι να το τρέξουμε, δίνοντας σαν παράμετρο το όνομα του εκάστοτε προγράμματος. Επίσης, προκειμένου να εγκαταλείψουμε το man αρκεί να πατήσουμε το πλήκτρο [Q].

Τώρα που ξέρουμε τι μας περιβάλλει, είναι βέβαιο ότι η περιέργειά μας θα μεγαλώσει: Τι υπάρχει στους άλλους καταλόγους; Για τη μετακίνηση από κατάλογο σε κατάλογο προσφέρεται το προγραμματάκι cd. Η λειτουργία του είναι παρόμοια με εκείνη της εντολής cd, που διαθέτει η γραμμή εντολών των Windows. Έτσι, αν βρισκόμαστε στoν κατάλογο /home/pvar, για να μεταφερθούμε έναν κατάλογο πιο πάνω, δηλαδή στον /home, και να δούμε αν υπάρχουν άλλα home directories, αρκεί να εκτελέσουμε ένα από τα ακόλουθα:

cd /home

ή

cd ..

Η διπλή τελεία συμβολίζει τον λεγόμενο γονικό κατάλογο (parent directory), δηλαδή εκείνον μέσα στον οποίο βρίσκεται ο κατάλογος, μέσα στον οποίο τώρα βρισκόμαστε ;) Ας υποθέσουμε τώρα ότι εκτελούμε ένα ls -lha και βλέπουμε τον κατάλογο cvar. Για να μπούμε σε αυτόν μπορούμε να εκτελέσουμε ένα από τα ακόλουθα:

cd cvar

ή

cd /home/cvar

Στην πρώτη περίπτωση δίνουμε σαν παράμετρο τον κατάλογο στον οποίο θέλουμε να πάμε, εφόσον αυτός βρίσκεται στην ίδια θέση με εμάς. Η δεύτερη περίπτωση είναι πιο γενική. Σε αυτήν δώσαμε την πλήρη διαδρομή (το πλήρες path) ως τον κατάλογο cvar. Αναρωτιέστε ποια είναι η διαφορά; Το πρώτο δουλεύει μόνον όταν βρισκόμαστε στον κατάλογο home, ο οποίος φυσικά περιέχει τον κατάλογο cvar. (Ακριβέστερα, δουλεύει όταν είμαστε σε έναν κατάλογο ο οποίος περιέχει έναν άλλον, με το όνομα cvar.) Το δεύτερο δουλεύει πάντα και παντού. Εφόσον δίνουμε το πλήρες path, το πρόγραμμα cd θα ξέρει ακριβώς πού θέλουμε να πάμε. (Μόνη περίπτωση να μη δουλέψει το cd /home/cvar, είναι όταν ένας από τους καταλόγους /home ή /home/cvar δεν υπάρχει.) Αφού περιπλανηθούμε λίγο στους καταλόγους του συστήματος, είναι σίγουρο ότι κάποια στιγμή θα θελήσουμε να γυρίσουμε στον δικό μας. Για το σκοπό αυτό αρκεί να δώσουμε ένα από τα ακόλουθα:

cd

ή

cd ~

Η εκτέλεση του προγράμματος cd χωρίς καμία παράμετρο έχει σαν συνέπεια την άμεση μεταφορά μας στο home directory. Όμως στη δεύτερη περίπτωση, θα σπεύσει να παρατηρήσει κάποιος, παράμετρος υπάρχει. Πράγματι, μόνο που ο χαρακτήρας ~ (tilde) αποτελεί κατά κάποιον τρόπο μια μεταβλητή του BASH. Σ’ αυτή τη μεταβλητή αποθηκεύεται πάντα το πλήρες path του προσωπικού καταλόγου του εκάστοτε χρήστη. Έτσι, όταν εκτελεί το cd ~ ο χρήστης pvar, το BASH αντικαθιστά αυτόματα τον χαρακτήρα ~ με το /home/pvar. Για να φανεί καλύτερα η αξία αυτού του χαρακτήρα, υποθέστε ότι βρισκόμαστε στον κατάλογο /home/pvar/projects/deltacast/video/intro και θέλουμε να μεταβούμε στον /home/pvar/projects. Ο ταχύτερος τρόπος για να πετύχουμε κάτι τέτοιο είναι να δώσουμε:

cd ~/projects

Ένα ακόμα κολπάκι με το cd σχετίζεται με το χαρακτήρα - (dash, παύλα). Ας υποθέσουμε ότι μας πιάνει μια μανία να περιπλανηθούμε στους καταλόγους του συστήματος κι εκτελούμε, διαδοχικά, τα παρακάτω:

cd /usr
cd share
cd man
cd man1
cd

Με τα παραπάνω θα οδηγηθούμε αρχικά στον κατάλογο /usr. Μετά θα μπούμε στον υποκατάλογο share, ακολούθως στον man και στη συνέχεια στον man1. Παρεμπιπτόντως, εδώ βρίσκονται οι οδηγίες χρήσης του εκάστοτε προγράμματος, τις οποίες εμφανίζει το προγραμματάκι man. Τελικά, με την εκτέλεση της τελευταίου cd, καταλήγουμε στο home directory. Ας υποθέσουμε τώρα ότι μάς έπιασε η αναποδιά και θέλουμε να ξαναπάμε στον κατάλογο man1. Η πλήρης διαδρομή του είναι η /usr/share/man/man1. Αν βαριόμαστε να γράψουμε όλο αυτό, μπορούμε να γράψουμε κάτι πολύ πιο σύντομο:

cd -

Η παύλα συμβολίζει τον προηγούμενο κατάλογο στον οποίο είχαμε βρεθεί. Έτσι, μπορούμε να επιστρέψουμε στη θέση /usr/share/man/man1 ταχύτατα. Τώρα, αν ξανατρέξουμε το cd με παράμετρο τον χαρακτήρα dash, θα μεταφερθούμε στον προηγούμενο κατάλογο όπου είχαμε βρεθεί: στο home directory. Μπορεί η μετακίνηση στον προσωπικό κατάλογο να πραγματοποιείται ούτως ή άλλως εύκολα, αλλά η αξία της παραμέτρου dash παραμένει μεγάλη. Με τη βοήθειά της μπορούμε να μετακινούμαστε με άνεση μεταξύ δύο “δυσπρόσιτων” (με μεγάλα full paths) καταλόγων.

Αν τώρα με όλα αυτά τα πήγαινε-έλα χαθούμε, υπάρχει ένα προγραμματάκι που θα μας πει αμέσως τη θέση μας. Πρόκειται για το pwd, που όταν το εκτελούμε εμφανίζει την πλήρη διαδρομή (full path) του καταλόγου στον οποίο βρισκ0όμαστε.

Πού είναι οι κατατμήσεις;

Στα Windows, οι δίσκοι και οι κατατμήσεις προσδιορίζονται με ένα αναγνωριστικό γράμμα που συνοδεύεται από τον χαρακτήρα της άνω-κάτω τελείας. Έτσι, πολύ συχνά κάνουμε λόγο για το δίσκο C:, για το δίσκο D: και πάει λέγοντας. Εδώ πρέπει να υπογραμμίσουμε δύο λεπτομέρειες: α) παρά το γεγονός ότι γίνεται λόγος για δίσκους, στην πραγματικότητα τα γράμματα αντιστοιχούν σε κατατμήσεις, β) η αντιστοίχηση των γραμμάτων στις κατατμήσεις γίνεται με μια σχετικά περίπλοκη λογική. Αν μπερδευτήκατε, το μόνο σίγουρο είναι ότι δεν φταίτε εσείς.

Στο Linux ακολουθείται μια εντελώς διαφορετική προσέγγιση, αναφορικά με την πρόσβαση στις κατατμήσεις των σκληρών δίσκων. Κατ’ αρχάς, για ν’ αποκτήσουμε πρόσβαση σε μια κατάτμηση πρέπει πρώτα να κάνουμε τη λεγόμενη προσάρτηση (mount). Με απλά λόγια, πρέπει να αντιστοιχίσουμε στην κατάτμηση κάποιον κατάλογο. Μετά απ’ αυτή τη σύνδεση καταλόγου και κατάτμησης, τα περιεχόμενα της κατάτμησης θα εμφανίζονται ως περιεχόμενα του καταλόγου. Έτσι, για να δούμε τα αρχεία της κατάτμησης αρκεί να μπούμε στον κατάλογο, στον οποίο έγινε η προσάρτηση. Η παράδοση θέλει όλα τα συστήματα Unix να διαθέτουν τον κατάλογο /mnt. Αυτός προορίζεται για τη δημιουργία άλλων καταλόγων στο εσωτερικό του, στους οποίους θα προσαρτηθούν αργότερα οι κατατμήσεις των δίσκων μας. Παρόμοια αποστολή έχει κι ο κατάλογος /media, στις σύγχρονες διανομές Linux που προορίζονται για χρήση desktop. Μέσα στον συγκεκριμένο κατάλογο δημιουργούνται άλλοι, στους οποίους προσαρτώνται αυτόματα τα δισκάκια CD/DVD, τα USB sticks και πάει λέγοντας. Η διαδικασία της προσάρτησης θα μας απασχολήσει σε επόμενο άρθρο της σειράς μας.

Διαχείριση καταλόγων

Τώρα που μάθαμε να τριγυρνάμε με άνεση στους καταλόγους του συστήματος, μπορούμε να δούμε το πώς δημιουργούνται και πώς διαγράφονται. Για τη δημιουργία διατίθεται το εργαλείο mkdir, ενώ για τη διαγραφή υπάρχουν τα rmdir (remove directory) και rm (remove). Η μόνη παράμετρος που απαιτούν τα πρώτα δύο είναι το όνομα ή η πλήρης διαδρομή του καταλόγου. Για παράδειγμα αν δώσουμε

mkdir /home/pvar/documents

το σύστημα θα δημιουργήσει τον κατάλογο documents, μέσα στον προσωπικό μας κατάλογο (/home/pvar). Βέβαια, αν βρισκόμασταν ήδη εντός του προσωπικού μας καταλόγου, θα μπορούσαμε να είχαμε δώσει και το εξής:

mkdir documents

Το rmdir χρησιμοποιείται με τον ίδιο ακριβώς τρόπο. Ωστόσο, για να διαγραφεί ένας κατάλογος με το rmdir θα πρέπει να είναι άδειος. Αυτό συνεπάγεται ότι η χρήση του rmdir είναι μάλλον ακίνδυνη: Είναι αδύνατο να χάσουμε δεδομένα, διαγράφοντας κατά λάθος έναν κατάλογο με το rmdir. Δυστυχώς, αυτή η δικλείδα δεν υφίσταται στην περίπτωση του rm. Το συγκεκριμένο πρόγραμμα προορίζεται για τη διαγραφή αρχείων, αλλά με χρήση της παραμέτρου -r (recursively) μπορεί να διαγράψει και καταλόγους. Η συγκεκριμένη παράμετρος έχει σαν συνέπεια τη διαγραφή όλων των αρχείων, όλων των υποκαταλόγων, όλων των αρχείων των υποκαταλόγων, όλων των υποκαταλόγων των υποκαταλόγων και πάει λέγοντας. Με λίγα λόγια, όταν εκτελούμε το rm με την παράμετρο -r και στη συνέχεια έναν κατάλογο, είναι σίγουρο ότι θα διαγραφεί πλήρως. Όπως αντιλαμβάνεστε, το rm απαιτεί τεράστια προσοχή. Ας εξετάσουμε όμως και ένα μικρό σενάριο: Ας υποθέσουμε ότι έχουμε δημιουργήσει αρκετούς καταλόγους, εκτελώντας τα ακόλουθα:

mkdir /home/pvar/docs
mkdir /home/pvar/music
mkdir /home/pvar/video
mkdir /home/pvar/projects
mkdir /home/pvar/projects/deltacast/video
mkdir /home/pvar/projects/deltacast/music

Ας υποθέσουμε επίσης ότι βρισκόμαστε στο home directory κι αποφασίζουμε να σβήσουμε τον κατάλογο /home/pvar/video. Για το σκοπό αυτό θα μπορούσαμε να εκτελέσουμε το εξής:

rm -r video

…ή το εξής:

rm -r /home/pvar/video

Εφόσον βρισκόμαστε ήδη στο /home/pvar, η εκτέλεση καθενός από τα παραπάνω θα είχε το ίδιο ακριβώς αποτέλεσμα: Τη διαγραφή του καταλόγου video, ο οποίος βρίσκεται στον προσωπικό μας κατάλογο. Τι θα συνέβαινε όμως, αν βρισκόμασταν στον κατάλογο /home/pvar/projects/deltacast; Σε αυτή την περίπτωση, η εκτέλεση του rm με τον πρώτο τρόπο θα αποτελούσε τραγικό σφάλμα: Θα διαγραφόταν ο κατάλογος /home/pvar/projects/deltacast/video. Μια καλή συνήθεια, λοιπόν, η οποία μπορεί να μας σώσει από δυσάρεστες εκπλήξεις, είναι να χρησιμοποιούμε πάντα την πλήρη διαδρομή του εκάστοτε καταλόγου. Κι αν όχι πάντα (είμαστε και λίγο τεμπέληδες, πώς να το κάνουμε) τουλάχιστον οποτεδήποτε πρόκειται για διαγραφή.

Σημεία που αξίζουν την προσοχή μας

Στο σημείο αυτό οφείλουμε ν’ αναφέρουμε ορισμένες λεπτομέρειες. Κατ’ αρχάς, το κέλυφος BASH είναι αυτό που λέμε case sensitive. Με απλά λόγια, κάνει διάκριση μεταξύ πεζών και κεφαλαίων. Επομένως, το BASH δεν θα παραπονεθεί καθόλου αν δημιουργήσουμε τον κατάλογο documents και στη συνέχεια τον κατάλογο Documents, στην ίδια θέση (στο ίδιο επίπεδο, δηλαδή). Παρ’ όλο που τα ονόματα των δύο καταλόγων είναι πρακτικά ίδια, το κέλυφος θα τους διακρίνει από το αρχικό γράμμα, που στη μία περίπτωση είναι πεζό και στην άλλη κεφαλαίο. Αυτή η διάκριση μπορεί να προκαλέσει από μια απλή σύγχυση έως έναν μη ευκαταφρόνητο πονοκέφαλο. Επομένως, όταν θέλουμε να μεταφερθούμε σε κάποιον κατάλογο (ή ακόμα χειρότερα να τον διαγράψουμε), πρέπει να πληκτρολογούμε το όνομά του με μεγάλη προσοχή.

Μια ακόμα λεπτομέρεια αφορά στο γεγονός ότι το cd αποτελεί πρόγραμμα κι όχι κάποια εντολή, φορτωμένη στη μνήμη του συστήματος. Ακριβώς γι’ αυτό, αν αντί του cd /home δίναμε cd/home (χωρίς το κενό, δηλαδή) το κέλυφος θα μάς έλεγε ότι δεν υπάρχει τέτοιο πρόγραμμα. Αυτό το ξεκαθαρίζουμε για να μη θορυβηθούν όσοι έρχονται από τη γραμμή εντολών των Windows. Σ’ εκείνο το περιβάλλον, είτε βάζαμε κενό μεταξύ του cd και του καταλόγου είτε όχι, η μετακίνησή μας θα γινόταν κανονικά.

Περισσότερα βασικά προγράμματα

Μέχρι στιγμής αναφερθήκαμε στην πλοήγηση και στη βασική διαχείριση των καταλόγων, αλλά δεν είπαμε τίποτα για τα απλά αρχεία. Προφανώς, το τι μπορούμε να κάνουμε με ένα αρχείο εξαρτάται από το περιεχόμενό του. Στη συνέχεια λοιπόν θα αναφέρουμε μόνο τα απολύτως βασικά για το χειρισμό τους. Ας υποθέσουμε ότι υπάρχει το αρχείο my_notes.txt στο home directory του λογαριασμού μας, καθώς κι ότι θέλουμε να το μεταφέρουμε στον κατάλογο /home/pvar/documents. Κάτι τέτοιο επιτυγχάνεται με τη βοήθεια του προγράμματος mv:

mv /home/pvar/my_notes.txt /home/pvar/documents

Με την ευκαιρία, πριν πούμε οτιδήποτε άλλο για το mv αξίζει να δούμε πόσο απλούστερα θα μπορούσε να γραφτεί το παραπάνω:

mv ~/my_notes.txt ~/documents

Νομίζουμε ότι η αξία του χαρακτήρα ~ έχει αρχίσει να φαίνεται. Για να επιστρέψουμε στο θέμα μας, το πρόγραμμα mv δέχεται δύο παραμέτρους: η πρώτη αφορά στο αρχείο που θέλουμε να μετακινήσουμε, ενώ η δεύτερη περιγράφει τον προορισμό. Σημειώστε ότι η λειτουργία του mv δεν περιορίζεται μόνο στα αρχεία αλλά καλύπτει και τους καταλόγους. Με άλλα λόγια, με τη βοήθεια του mv μπορούμε να μετακινήσουμε κι ολόκληρους καταλόγους, μαζί με τα περιεχόμενά τους. Με την ίδια ακριβώς λογική χρησιμοποιείται και το πρόγραμμα cp, το οποίο πραγματοποιεί αντιγραφές. Έτσι, αν μας ενδιέφερε να αντιγράψουμε το προαναφερθέν αρχείο κι όχι να το μετακινήσουμε, θα δίναμε κάτι τέτοιο:

cp ~/my_notes.txt ~/documents

Αξίζει ν’ αναφέρουμε εδώ έναν ακόμα χαρακτήρα, ο οποίος αποκτά ιδιαίτερο νόημα στη γραμμή εντολών. Πρόκειται για την τελεία. Όπως αναφέραμε νωρίτερα, οι δύο τελείες αναφέρονται στο γονικό κατάλογο. Ε, λοιπόν, η μία τελεία αναφέρεται στον κατάλογο στον οποίο βρισκόμαστε. Αναρωτιέστε πώς μπορεί να φανεί χρήσιμο κάτι τέτοιο; Ας υποθέσουμε ότι βρισκόμαστε στον κατάλογο /home/pvar/documents/deltahacker/issue16 και θέλουμε να μεταφέρουμε εδώ το αρχείο /home/pvar/delta_notes.txt. Αν αγνοούσαμε την ιδιαίτερη ερμηνεία που επιδέχεται ο χαρακτήρας της τελείας, θα έπρεπε να δώσουμε κάτι τέτοιο:

cp ~/my_notes.txt ~/documents/deltahacker/issue16

Χάρη στην τελεία, όμως, το παραπάνω απλοποιείται ως εξής:

cp ~/my_notes.txt .

Δεν μπορείτε να πείτε, η γραμμή εντολών του Linux φροντίζει ώστε να μην κουραζόμαστε ;) Πριν ολοκληρώσουμε την αναφορά μας στα βασικά προγράμματα για το χειρισμό των αρχείων, αξίζει να υπενθυμίσουμε ένα πρόγραμμα που συναντήσαμε και νωρίτερα. Πρόκειται για το rm, το οποίο πραγματοποιεί διαγραφές. Νομίζουμε ότι ο τρόπος χρήσης του έχει γίνει ήδη σαφής. Για να διαγράψουμε το αρχείο my_notes.txt, θα αρκούσε να δώσουμε κάτι τέτοιο:

rm ~/home/pvar/my_notes.txt

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

Πόσες εντολές έχουν “τα Linux”;

Όσο τραγικό λάθος είναι λέει κανείς “τα Linux”, άλλο τόσο είναι να μιλάει για “εντολές του Linux”. Το Linux δεν έχει εντολές. Το BASH βέβαια έχει, αλλά τις περισσότερες φορές χρησιμοποιούμε τα διάφορα προγραμματάκια που προορίζονται για τη γραμμή εντολών. Από αυτά, μάλιστα, τα πιο διαδεδομένα ονομάζονται core utilities και συνοδεύουν όλες τις διανομές Linux. Τα core utilities βρίσκονται στους φακέλους /bin, /sbin, /usr/bin και /usr/sbin του συστήματος. Χαρακτηριστικά μέλη αυτής της ομάδας προγραμμάτων είναι τα ls, cd, rm, mv, cp, mkdir, rmdir, cat και διάφορα άλλα, που θα αναφέρουμε σε επόμενα άρθρα της σειράς.

Βαριέστε την πληκτρολόγηση;

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

Ιστορικό (history). Κάθε φορά που εκτελούμε ένα πρόγραμμα στη γραμμή εντολών, όλα όσα πληκτρολογήσαμε καταγράφονται σ’ ένα ειδικό αρχείο του συστήματος. Έτσι, αν θελήσουμε να επαναλάβουμε την εκτέλεση της προηγούμενης “εντολής” μας, αρκεί να πατήσουμε το πάνω βελάκι του πληκτρολογίου. Το BASH θα ανακαλέσει όσα είχαμε γράψει την αμέσως προηγούμενη φορά κι εμείς θα αρκεί να δώσουμε ένα [ENTER]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, το κέλυφος θα εμφανίσει την προ-προηγούμενη “εντολή” και πάει λέγοντας. Γενικότερα, χρησιμοποιώντας το πάνω και το κάτω βελάκι μπορούμε να ανατρέχουμε ταχύτατα σε ολόκληρο το ιστορικό, όλων όσων έχουμε εκτελέσει κατά καιρούς. Μόλις βρούμε αυτό που θέλουμε να εκτελέσουμε, αρκεί να πατήσουμε το [ENTER]. Εναλλακτικά, αν η ιδέα του να ξεφυλλίζουμε ολόκληρο το ιστορικό φαντάζει κουραστική κι εκνευριστική, μπορούμε να πραγματοποιήσουμε μια αναζήτηση: αρκεί να πατήσουμε το συνδυασμό πλήκτρων [CTRL+R] και να πληκτρολογήσουμε ένα μέρος της “εντολής” που αναζητάμε. Το BASH θα εμφανίσει την πιο πρόσφατη γραμμή που εκτελέσαμε, η οποία περιείχε αυτό που ψάχνουμε. Αν το αποτέλεσμα της αναζήτησης δεν είναι το επιθυμητό, μπορούμε να την επαναλάβουμε πατώντας ξανά το συνδυασμό [CTRL+R]. Έτσι θα εμφανιστεί η αμέσως παλιότερη εντολή που είχαμε εκτελέσει και περιείχε αυτό που ψάχνουμε.

Αυτόματη συμπλήρωση (TAB completion). Στην περίπτωση που δεν θυμόμαστε ολόκληρο το όνομα ενός αρχείου ή καταλόγου (όπως επίσης κι όταν το θυμόμαστε αλλά βαριόμαστε να το πληκτρολογήσουμε), αρκεί να δώσουμε τα πρώτα γράμματα του ονόματος και να πατήσουμε το πλήκτρο [TAB]. Κάνοντας κάτι τέτοιο το BASH πραγματοποιεί μια αναζήτηση στα αρχεία και στους καταλόγους με βάση όσα έχουμε πληκτρολογήσει. Εφόσον βρει κάποιο αρχείο ή κατάλογο που ταιριάζει, συμπληρώνει το όνομά του αυτόματα. Έτσι, αν έχουμε στον προσωπικό μας κατάλογο ένα αρχείο με το όνομα the file with the disturbingly long name και θέλουμε να το διαγράψουμε, αρκεί να γράψουμε rm ~/the και να πατήσουμε το [TAB]. Με αυτόν τον τρόπο το μακροσκελές όνομα του αρχείου θα συμπληρωθεί αυτόματα κι εμείς θα δώσουμε ένα μόνο [ENTER].

Πριν σας αφήσουμε να πειραματιστείτε και να εξοικειωθείτε με όσα είδαμε, θα σας πούμε κάτι ακόμα: Για να καθαρίσετε την οθόνη αρκεί να εκτελέσετε το πρόγραμμα clear ή, πολύ πιο απλά, να πατήσετε το συνδυασμό πλήκτρων [CTRL+L].

Άρθρα της σειράς

Μέρος 14: Αρχική προσέγγιση

Μέρος 24: Πρώτη επίθεση

Μέρος 34: Πλήρης έλεγχος

Μέρος 44: Προγραμματισμός στο BASH

~Spir@l Evolut10n

Σας άρεσε το post; Αν ναι μπορείτε να στηρίξετε το ðhacker, χωρίς κατ’ ανάγκη να ξοδέψετε χρήματα.