Μάθε παιδί μου Linux (μέρος 10) | Text editors και εντολές διαχείρισης κειμένου
Τα λειτουργικά συστήματα αποτελούνται στην ουσία από πολλά μικρά ή μεγάλα
αρχεία κειμένου. Κάποια από αυτά τα χρησιμοποιούμε για να τους δώσουμε εντολές
και να τρέξουμε προγράμματα, σε κάποια άλλα αποθηκεύουμε τα προσωπικά μας
δεδομένα, ενώ υπάρχουν και αυτά με τα οποία το σύστημα μας "μιλάει" και μας
δίνει αναφορά για τη σωστή του λειτουργία! Αν θέλεις λοιπόν πραγματικά να
γνωρίζεις το σύστημά σου, θα πρέπει να μάθεις πώς να διαβάζεις, να
επεξεργάζεσαι και να αποθηκεύεις αρχεία κειμένου, οπότε σήμερα θα δούμε όλες
τις χρήσιμες εντολές που αφορούν το Linux.
Text editors: Nano, Vim και Emacs
Όταν σε έναν υπολογιστή θέλεις να ανοίξεις ένα αρχείο κειμένου, θα
χρησιμοποιήσεις έναν "επεξεργαστή κειμένου" (text editor) όπως το LibreOffice
Writer ή το Microsoft Word. Αν χρησιμοποιείς ένα σύστημα χωρίς γραφικό
περιβάλλον, μπορείς να κάνεις το ίδιο πράγμα μέσα από το τερματικό.
Μέχρι στιγμής όποτε χρειάστηκε να ανοίξουμε ένα αρχείο κειμένου για να το
επεξεργαστούμε, χρησιμοποιήσαμε το "nano", έναν text editor ο οποίος είναι
πολύ απλός στη χρήση και βρίσκεται προεγκατεστημένος σε όλα σχεδόν τα Linux
λειτουργικά συστήματα. Για κάποιο λόγο που δείχνει μεγάλο... κόμπλεξ, αν το
πεις αυτό σε έναν "έμπειρο" Λινουξά, θα γελάσει με την ασχετοσύνη σου!
Ο λόγος είναι γιατί υπάρχουν κι άλλοι, πιο ολοκληρωμένοι επεξεργαστές κειμένου
όπως το Vim και το
Emacs, για τους οποίους "σφάζονται" στα φόρουμ οι Λινουξάδες, ψάχνοντας να βρουν
ποιος είναι ο καλύτερος. Η ουσία είναι οτι το τερματικό διαθέτει τρεις text
editor για όλα τα γούστα, με τον καθένα να έχει τα θετικά και τα αρνητικά του
οπότε η συμβουλή μας σε αυτό το θέμα είναι να χρησιμοποιείτε απλά αυτόν που
σας βολεύει και όταν σταματήσει να σας εξυπηρετεί, τότε να διαλέξετε έναν
καλύτερο.
Αφού το βγάλαμε λοιπόν και αυτό από τη μέση, πάμε να δούμε τις εντολές τις
οποίες θα μάθουμε σήμερα.
Ανάγνωση μεγάλων αρχείων με την εντολή "less"
Στο άρθρο με τις
"βασικές εντολές του Linux"
είδαμε το "cat", μία εντολή με την οποία μπορούμε να προβάλουμε τα περιεχόμενα
ενός αρχείου. Για παράδειγμα για να διαβάσουμε το αρχείο "website.html" θα
δώσουμε την εντολή:
cat website.html
Όταν λοιπόν ένα αρχείο είναι πολύ μεγάλο ή μάλλον όταν περιέχει πολλές σελίδες
κειμένου, το "cat" δυσκολεύεται να μας το παρουσιάσει σωστά. Σε αυτή την
περίπτωση λοιπόν χρησιμοποιούμε το "less", το οποίο μας δείχνει το κείμενό μας
τακτοποιημένο σε γραμμές. Το καλούμε ως εξής:
less website.html
Έχοντας δώσει την εντολή "less" μπορούμε να περιηγηθούμε στο κείμενό μας
χρησιμοποιώντας τα ακόλουθα πλήκτρα:
- Βελάκια - πάνω, κάτω, δεξιά και αριστερά
- PageUp - προηγούμενη σελίδα
- PageDown - επόμενη σελίδα
- g - Αρχή του αρχείου
- G - Τέλος του αρχείου
- / - αναζήτηση (π.χ. "/κείμενο")
- h - βοήθεια
- q - έξοδος
Με τη βοήθεια του "less" λοιπόν μπορούμε να διαβάσουμε ακόμη και ολόκληρα
βιβλία μέσα από το τερματικό, σε ένα σύστημα χωρίς γραφικό περιβάλλον!
Διαφήμιση
Σύγκριση αρχείων με την εντολή "diff"
Ας πούμε τώρα οτι έχουμε γράψει μία εργασία στο αρχείο "ergasia.doc". Τη
στέλνουμε στον καθηγητή μας για να κάνει διορθώσεις και μας τη στέλνει πίσω
στο αρχείο "diorthosi.doc". Για να συγκρίνουμε τα δύο αρχεία και να δούμε τις
αλλαγές που μας έχει κάνει, θα δώσουμε την εντολή:
diff ergasia.doc diorthosi.doc
Το αποτέλεσμα θα είναι το εξής:
2,3c2,3< χρησιμοποιήσαμε το "nano", έναν επεξεργαστή κειμένου (text editor) ο οποίος είναι πολύ απλός< στη χρήση και βρίσκεται προεγκατεστημένος σε όλα σχεδόν τα Linux λειτουργικά συστήματα.---> χρησιμοποιήσαμε το "vim", έναν επεξεργαστή κειμένου (text editor) ο οποίος δεν είναι πολύ απλός> στη χρήση και δε βρίσκεται προεγκατεστημένος σε όλα σχεδόν τα Linux λειτουργικά συστήματα.
Όπως όλες οι εντολές έτσι και αυτή διαθέτει τους δικούς της δείκτες
παραμετροποίησης. Για παράδειγμα προσθέντας στην εντολή μας:
- το "-i", δε θα μας εμφανίσει αλλαγές που αφορούν κεφαλαία ή πεζά,
- το "-w", θα αγνοήσει όλες τις αλλαγές σε κενά (spaces),
- το "-y", θα μας προβάλει τις διαφορές δίπλα δίπλα σε στήλες.
Αντικατάσταση λέξεων με την εντολή "sed"
Άλλη μία εξαιρετικά χρήσιμη εντολή είναι το "sed" (εκ του "stream editor") με
την οποία μπορούμε να αντικαταστήσουμε λέξεις σε ένα κείμενο χωρίς καν να το
ανοίξουμε! Ας πούμε για παράδειγμα οτι έχω γράψει το εξής κείμενο και το έχω
αποθηκεύσει στο αρχείο "system.md":
linux is unix, linux is unix, linux is unix, linux is unixlinux is unix, linux is unix, linux is unix, linux is unixlinux is unix, linux is unix, linux is unix, linux is unix
Για να αντικαταστήσω τη λέξη "linux" με τη λέξη "unix" θα δώσω την εντολή:
sed 's/linux/unix/g' system.md
Σημείωση:
Το "s" σημαίνει "substitute" δηλαδή αντικατάσταση. Το "g" σημαίνει
"global" δηλαδή χρησιμοποιείται σε όλο το κείμενο.
Το αποτέλεσμα θα είναι αυτό:
unix is unix, unix is unix, unix is unix, unix is unixunix is unix, unix is unix, unix is unix, unix is unixunix is unix, unix is unix, unix is unix, unix is unix
Αν τώρα δώσουμε την ίδια εντολή χωρίς το "g", θα αντικατασταθεί μόνο η λέξη
"linux" που συναντάται πρώτη φορά σε κάθε σειρά. Θα δούμε το κείμενό μας έτσι
δηλαδή:
unix is unix, linux is unix, linux is unix, linux is unixunix is unix, linux is unix, linux is unix, linux is unixunix is unix, linux is unix, linux is unix, linux is unix
Μπορούμε όμως να χρησιμοποιήσουμε και άλλους δείκτες στη θέση του "g". Για
παράδειγμα:
- με το "2" θα αντικαταστασθεί η λέξη "linux" που συναντάται δεύτερη φορά σε κάθε σειρά.
- με το "3g" θα αντικατασταθούν όλες οι λέξεις "linux" της κάθε γραμμής, από την τρίτη και μετά.
Προβολή αριθμού γραμμών με "head" και "tail"
Τα αρχεία "log" του συστήματός μας είναι και αυτά αρχεία κειμένου, το οποία
περιλαμβάνουν μία λίστα συμβάντων. Κάθε νέο συμβάν δημιουργεί τη δική του
γραμμή και αποθηκεύεται εκεί. Συνήθως στα "log" θέλεις να μάθεις τι συνέβη
όταν ξεκίνησε μία υπηρεσία ή ποια είναι το τελευταία συμβάντα που δημιούργησαν
το πρόβλημα. Για αυτό το σκοπό έχουμε τις εντολές "head" και "tail", με τις
οποίες μπορούμε να διαβάσουμε τις πρώτες ή τις τελευταίες γραμμές ενός
αρχείου.
Ας πούμε λοιπόν οτι έχουμε το αρχείο "syslog" και θέλουμε να δούμε τα
περιεχόμενά του. Για να δούμε τις πρώτες 10 γραμμές θα δώσουμε την εντολή:
head syslog
Αν θέλουμε να δούμε περισσότερες γραμμές μπορούμε επίσης να δώσουμε τον ακριβή
αριθμό τους. Για παράδειγμα αν θέλουμε να δούμε 25 γραμμές η εντολή είναι η
εξής:
head -n 25 syslog
Για να δούμε τώρα τις τελευταίες γραμμές του αρχείου μας, θα δώσουμε
αντίστοιχα την εντολή "tail":
tail syslog
Με τον ίδιο τρόπο αν θέλουμε να δούμε τις τελευταίες 30 γραμμές, θα δώσουμε
την εντολή:
tail -n 30 syslog
Ειδικά για τα "log" αρχεία αξίζει να πούμε οτι ενημερώνονται ζωντανά. Μπορεί
λοιπόν να θέλουμε να βλέπουμε επί τόπου τις γραμμές που προστίθενται με τα νέα
συμβάντα. Για να ακολουθήσουμε το αρχείο "syslog" και να μας εμφανίζονται οι
νέες γραμμές στο τέλος, δίνουμε την εντολή:
tail -f syslog
Σημείωση:
Για να σταματήσουμε τη διαδικασία "follow" πατάμε Ctrl+C στο
πληκτρολόγιο.
Διαφήμιση
Αναζήτηση λέξεων σε αρχεία με την εντολή "grep"
Στο άρθρο με τις "βασικές εντολές" είδαμε επίσης το "grep", με το οποίο
μπορούμε να αναζητήσουμε λέξεις μέσα σε αρχεία κειμένου. Θα το αναφέρουμε ξανά
γιατί είναι μία από τις βασικότερες εντολές διαχείρισης κειμένου.
Ας πούμε τώρα οτι θέλω να βρω τη λέξη "το" μέσα στο αρχείο "website.html". Η εντολή που θα δώσω είναι η εξής:
grep "το" website.html
Το τερματικό θα απαντήσει μαρκάροντας όλα τα σημεία στα οποία βρίσκεται η λέξη
"το". Αυτό που δε λαμβάνει όμως υπ' όψιν είναι το "Το" (με ταυ κεφαλαίο) στην
αρχή της πρώτης πρότασης. Αν θέλουμε λοιπόν να μας εμφανίσει και αυτές τις
περιπτώσεις, προσθέτουμε στην εντολή την επιλογή "-i" ως εξής:
grep -i "το" website.html
Ταξινόμηση γραμμών με το "sort"
Ας πούμε τώρα οτι έχουμε φτιάξει μία λίστα αντικειμένων στο αρχείο "list.txt",
η οποία περιλαμβάνει διάφορα πράγματα που έχουμε αποθηκεύσει στο πατάρι. Το
κάθε αντικείμενο αποτελεί μία γραμμή στο αρχείο μας και όλα έχουν προστεθεί με
τυχαία σειρά. Για να δούμε τι έχουμε στο πατάρι μπορούμε να διαβάσουμε αυτή τη
λίστα δίνοντας την εντολή "cat" ως εξής:
cat list.txt
Αν η λίστα μας είναι μεγάλη θα πρέπει να τσεκάρουμε ένα προς ένα τα
αντικείμενά μας για να βρούμε αυτό που θέλουμε, κάτι που δεν είναι ιδιαίτερα
βολικό. Μπορούμε λοιπόν αντί του "cat" να χρησιμοποιήσουμε την εντολή "sort"
για να τα προβάλλουμε σε αλφαβητική σειρά και να βρούμε ευκολότερα αυτό που
θέλουμε. Η εντολή στην περίπτωσή μας θα είναι η εξής:
sort list.txt
Και σε αυτή την περίπτωση μπορούμε να χρησιμοποιήσουμε διάφορους δείκτες για
να δούμε με διαφορετικούς τρόπους τη λίστα μας. Για παράδειγμα:
- με το "-r" μπορούμε να δούμε τα αντικείμενά μας με αντίστροφη σειρά,
- με το "-u" να εξαφανίσουμε διπλότυπες καταχωρήσεις και
- με το "-n" να ταξινομήσουμε αντικείμενα που που τα έχουμε αριθμήσει.
Προώθηση κειμένου με το "pipe" και το "tee"
Στο άρθρο με τις
βασικές εντολές
και στο σημείο που μιλήσαμε για το "cat", είδαμε πώς μπορούμε να μεταφέρουμε
κείμενο με τους χαρακτήρες "<", ">" και ">>". Αυτές οι εντολές
ονομάζονται "stdin" (Standard In) και "stdout" (Standard Out) και συγγενεύουν
αρκετά με το "pipe" και το "tee".
Το "pipe" είναι.... ας πούμε μία εντολή, η οποία χρησιμοποιείται με το σύμβολο
"|" και μπορεί να προωθήσει το κείμενο που παράγει το τερματικό μας, όχι όμως
σε άρχεία, αλλά σε άλλες εντολές! Με το "pipe" δηλαδή μπορούμε να
χρησιμοποιήσουμε το output μίας εντολής, ως input σε μία άλλη και με αυτό τον
τρόπο να πάρουμε πιο συγκεκριμένα αποτελέσματα. Για παράδειγμα ας δούμε πώς η
μία εντολή τροφοδοτεί την επόμενη με το "pipe" ως εξής:
cat website.html | head -7 | tail -5
Η συγκεκριμένη εντολή αποτελείται από τρεις διαφορετικές εντολές που
συνδέονται με το "pipe":
- Η πρώτη θα μας φέρει τα περιεχόμενα του αρχείου "website.html" στο τερματικό.
- Από αυτό το αποτέλεσμα η δεύτερη θα κρατήσει μόνο τις επτά πρώτες γραμμές.
- Τέλος από αυτές τις επτά γραμμές, η τρίτη εντολή θα κρατήσει και θα προβάλλει μόνο τις πέντε τελευταίες.
Πάμε τώρα στην εντολή "tee" η οποία μας δίνει τη δυνατότητα να αποθηκεύουμε τα
αποτελέσματα του τερματικού, ενώ παράλληλα τα βλέπουμε να προβάλλονται σε
αυτό. Αν για παράδειγμα θέλεις να κάνεις αναβάθμιση στο σύστημά σου, αλλά τα
αποτελέσματα θέλεις να αποθηκευτούν κιόλας στο αρχείο "upgrade.log", θα δώσεις
την εντολή:
sudo apt update && sudo apt upgrade -y | tee upgrade.log
Ανοίγοντας τώρα το αρχείο "upgrade.log" θα δούμε οτι εκεί βρίσκονται όλες οι
πληροφορίες.
Εν κατακλείδι
Αυτές είναι πάνω κάτω οι βασικές εντολές για τη διαχείριση κειμένου στο Linux.
Εννοείται οτι υπάρχουν περισσότερες, αλλά με όσες μάθαμε μπορούμε πλέον εύκολα
να διαχειριστούμε οποιοδήποτε αρχείο κειμένου.
Επειδή στα μαθήματα μιλάμε κυρίως για τη χρήση του συστήματος μέσα από το
τερματικό, αξίζει να πούμε οτι η χρήση του τερματικού δεν είναι καθόλου
απαραίτητη. Στο Linux, όπως και στο Windows ή το Mac OS, τα πάντα μπορούν να
γίνουν μέσα από το γραφικό περιβάλλον με το πληκτρολόγιο και το ποντίκι.
Αν όμως θέλεις να γνωρίζεις πραγματικά οποιοδήποτε από αυτά τα λειτουργικά
συστήματα, πρέπει να ξέρεις πώς λειτουργούν από μέσα και η "πύλη" για να το
ανακαλύψεις είναι το τερματικό.
Σχόλια
Δημοσίευση σχολίου
Πες την άποψή σου ή κάνε την ερώτησή σου ελεύθερα, ακολουθώντας όμως τους στοιχειώδεις κανόνες ευγένειας.