Μάθε παιδί μου Linux (μέρος 10) | Text editors και εντολές διαχείρισης κειμένου

The Matrix terminal

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

Text editors: Nano, Vim και Emacs


Όταν σε έναν υπολογιστή θέλεις να ανοίξεις ένα αρχείο κειμένου, θα χρησιμοποιήσεις έναν "επεξεργαστή κειμένου" (text editor) όπως το LibreOffice Writer ή το Microsoft Word. Αν χρησιμοποιείς ένα σύστημα χωρίς γραφικό περιβάλλον, μπορείς να κάνεις το ίδιο πράγμα μέσα από το τερματικό. 

Μέχρι στιγμής όποτε χρειάστηκε να ανοίξουμε ένα αρχείο κειμένου για να το επεξεργαστούμε, χρησιμοποιήσαμε το "nano", έναν text editor ο οποίος είναι πολύ απλός στη χρήση και βρίσκεται προεγκατεστημένος σε όλα σχεδόν τα Linux λειτουργικά συστήματα. Για κάποιο λόγο που δείχνει μεγάλο... κόμπλεξ, αν το πεις αυτό σε έναν "έμπειρο" Λινουξά, θα γελάσει με την ασχετοσύνη σου!

Ο λόγος είναι γιατί υπάρχουν κι άλλοι, πιο ολοκληρωμένοι επεξεργαστές κειμένου όπως το Vim και το Emacs, για τους οποίους "σφάζονται" στα φόρουμ οι Λινουξάδες, ψάχνοντας να βρουν ποιος είναι ο καλύτερος. Η ουσία είναι οτι το τερματικό διαθέτει τρεις text editor για όλα τα γούστα, με τον καθένα να έχει τα θετικά και τα αρνητικά του οπότε η συμβουλή μας σε αυτό το θέμα είναι να χρησιμοποιείτε απλά αυτόν που σας βολεύει και όταν σταματήσει να σας εξυπηρετεί, τότε να διαλέξετε έναν καλύτερο.

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

Vim vs Emacs vs nano

Ανάγνωση μεγάλων αρχείων με την εντολή "less"


Στο άρθρο με τις "βασικές εντολές του Linux" είδαμε το "cat", μία εντολή με την οποία μπορούμε να προβάλουμε τα περιεχόμενα ενός αρχείου. Για παράδειγμα για να διαβάσουμε το αρχείο "website.html" θα δώσουμε την εντολή:

cat website.html

Linux cat command

Όταν λοιπόν ένα αρχείο είναι πολύ μεγάλο ή μάλλον όταν περιέχει πολλές σελίδες κειμένου, το "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", θα μας προβάλει τις διαφορές δίπλα δίπλα σε στήλες.

Linux diff command

Αντικατάσταση λέξεων με την εντολή "sed"


Άλλη μία εξαιρετικά χρήσιμη εντολή είναι το "sed" (εκ του "stream editor") με την οποία μπορούμε να αντικαταστήσουμε λέξεις σε ένα κείμενο χωρίς καν να το ανοίξουμε! Ας πούμε για παράδειγμα οτι έχω γράψει το εξής κείμενο και το έχω αποθηκεύσει στο αρχείο "system.md": 

linux is unix, linux is unix, linux is unix, linux is unix
linux is unix, linux is unix, linux is unix, linux is unix
linux 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 unix
unix is unix, unix is unix, unix is unix, unix is unix
unix is unix, unix is unix, unix is unix, unix is unix

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

unix is unix, linux is unix, linux is unix, linux is unix
unix is unix, linux is unix, linux is unix, linux is unix
unix is unix, linux is unix, linux is unix, linux is unix

Μπορούμε όμως να χρησιμοποιήσουμε και άλλους δείκτες στη θέση του "g". Για παράδειγμα:

  • με το "2" θα αντικαταστασθεί η λέξη "linux" που συναντάται δεύτερη φορά σε κάθε σειρά.
  • με το "3g" θα αντικατασταθούν όλες οι λέξεις "linux" της κάθε γραμμής, από την τρίτη και μετά.

Linux sed command

Προβολή αριθμού γραμμών με "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

Linux grep command

Ταξινόμηση γραμμών με το "sort"


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

cat list.txt

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

sort list.txt

Και σε αυτή την περίπτωση μπορούμε να χρησιμοποιήσουμε διάφορους δείκτες για να δούμε με διαφορετικούς τρόπους τη λίστα μας. Για παράδειγμα:

  • με το "-r" μπορούμε να δούμε τα αντικείμενά μας με αντίστροφη σειρά, 
  • με το "-u" να εξαφανίσουμε διπλότυπες καταχωρήσεις και  
  • με το "-n" να ταξινομήσουμε αντικείμενα που που τα έχουμε αριθμήσει.

Linux sort command

Προώθηση κειμένου με το "pipe" και το "tee"


Στο άρθρο με τις βασικές εντολές και στο σημείο που μιλήσαμε για το "cat", είδαμε πώς μπορούμε να μεταφέρουμε κείμενο με τους χαρακτήρες "<", ">" και ">>". Αυτές οι εντολές ονομάζονται "stdin" (Standard In) και "stdout" (Standard Out) και συγγενεύουν αρκετά με το "pipe" και το "tee".

Το "pipe" είναι.... ας πούμε μία εντολή, η οποία χρησιμοποιείται με το σύμβολο "|" και μπορεί να προωθήσει το κείμενο που παράγει το τερματικό μας, όχι όμως σε άρχεία, αλλά σε άλλες εντολές! Με το "pipe" δηλαδή μπορούμε να χρησιμοποιήσουμε το output μίας εντολής, ως input σε μία άλλη και με αυτό τον τρόπο να πάρουμε πιο συγκεκριμένα αποτελέσματα. Για παράδειγμα ας δούμε πώς η μία εντολή τροφοδοτεί την επόμενη με το "pipe" ως εξής:

cat website.html | head -7 | tail -5
 
Η συγκεκριμένη εντολή αποτελείται από τρεις διαφορετικές εντολές που συνδέονται με το "pipe": 

  1. Η πρώτη θα μας φέρει τα περιεχόμενα του αρχείου "website.html" στο τερματικό. 
  2. Από αυτό το αποτέλεσμα η δεύτερη θα κρατήσει μόνο τις επτά πρώτες γραμμές. 
  3. Τέλος από αυτές τις επτά γραμμές, η τρίτη εντολή θα κρατήσει και θα προβάλλει μόνο τις πέντε τελευταίες. 

Linux pipe command

Πάμε τώρα στην εντολή "tee" η οποία μας δίνει τη δυνατότητα να αποθηκεύουμε τα αποτελέσματα του τερματικού, ενώ παράλληλα τα βλέπουμε να προβάλλονται σε αυτό. Αν για παράδειγμα θέλεις να κάνεις αναβάθμιση στο σύστημά σου, αλλά τα αποτελέσματα θέλεις να αποθηκευτούν κιόλας στο αρχείο "upgrade.log", θα δώσεις την εντολή:

sudo apt update && sudo apt upgrade -y | tee upgrade.log

Ανοίγοντας τώρα το αρχείο "upgrade.log" θα δούμε οτι εκεί βρίσκονται όλες οι πληροφορίες.

Εν κατακλείδι


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

Επειδή στα μαθήματα μιλάμε κυρίως για τη χρήση του συστήματος μέσα από το τερματικό, αξίζει να πούμε οτι η χρήση του τερματικού δεν είναι καθόλου απαραίτητη. Στο Linux, όπως και στο Windows ή το Mac OS, τα πάντα μπορούν να γίνουν μέσα από το γραφικό περιβάλλον με το πληκτρολόγιο και το ποντίκι. 

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

Σχόλια

Δείτε επίσης...

Android | Γιατί δε θα αγόραζα ποτέ smartphone της OnePlus

Docker (μέρος 7) | Στήνουμε έναν reverse proxy για τα container μας με το Traefik

Ιδιωτικό απόρρητο | Το αφελές επιχείρημα του ''Δεν έχω τίποτα να κρύψω''

Απόρρητο | ''Μπερδεύουμε'' τον αλγόριθμο Google και Facebook με ψεύτικες πληροφορίες

Ubuntu Touch 2020 review | Μια πραγματική mobile GNU/Linux διανομή έτοιμη για καθημερινή χρήση

Φεύγω από την Google (μέρος 15) | ''Ξηλώνουμε'' τα Google apps από το Android

Android | Βελτιώνουμε την πλοήγηση με χειρονομίες απενεργοποιώντας την αριστερή πλευρά της οθόνης

Docker (μέρος 1) | Τι είναι και πώς το εγκαθιστούμε στον υπολογιστή μας;

Μάθε παιδί μου Linux (μέρος 11) | Δίσκοι, κατατμήσεις και σύστημα αρχείων (filesystem)

Android | Περιόρισε την παρακολούθηση των εφαρμογών και κόψε τις διαφημίσεις με το TrackerControl