Professional Documents
Culture Documents
• /var/log/messages
• texts
Το κέλυφος BASH
Ακριβώς όπως στην περίπτωση των Desktop Environments (command line).GNOME, KDE, Xfce, κ.ά.), έτσι και
στην περίπτωση της γραμμής εντολών το Linux προσφέρει αρκετές εναλλακτικές. Πριν
προχωρήσουμε, όμως, πρέπει να ξεκαθαρίσουμε κάτι: Όπως κάνουμε λόγο για κέλυφος γραφικών κι
αναφερόμαστε σε κάποιο παραθυρικό περιβάλλον, ομοίως μπορούμε να μιλήσουμε για κέλυφος
ρυθμού χαρακτήρων και ν’ αναφερθούμε σε κάποια υλοποίηση της γραμμής εντολών. Βέβαια, όταν
κάποιος χρήστης του Linux κάνει λόγο για το κέλυφος ή shell (command line).σκέτο) αναφέρεται σχεδόν πάντα
στη γραμμή εντολών. Η κυρίαρχη υλοποίηση της γραμμής εντολών του Linux γίνεται από το
δημοφιλέστατο BASH. Πρόκειται για τον βελτιωμένο απόγονο ενός κελύφους που έτρεχε παλιά σε
συστήματα Unix κι ονομαζόταν sh. Το όνομα BASH προκύπτει από τα αρχικά των λέξεων Bourne
Again SHell κι αποτελεί λογοπαίγνιο του “born again” (γεννημένος ξανά). Κάπου εδώ θα born again” (command line).γεννημένος ξανά). Κάπου εδώ θα
μπορούσαμε να ξεκινήσουμε ένα καμένο flamewar, συζητώντας για την υπεροχή ή όχι του BASH
έναντι άλλων υλοποιήσεων. Για να ‘μαστε ειλικρινείς, ο κύριος λόγος για τον οποίο ασχολούμαστε
με το BASH είναι ένας: Είναι το προκαθορισμένο shell σε όλες τις διανομές Linux και στο Mac OS X,
βρίσκεται κρυμμένο στα Android και iOS devices, ενώ μας κλείνει το μάτι κι όταν παίζουμε με τα
BSDs.
Για τη συνέχεια θα ακολουθήσουμε μια ομαλή πορεία εκμάθησης και θα φροντίσουμε να
ξεκινήσουμε τη γνωριμία με το BASH από τα απολύτως βασικά. Άλλωστε, στόχος μας δεν είναι
μόνο να βοηθήσουμε τους “born again” (γεννημένος ξανά). Κάπου εδώ θα φτασμένους” χρήστες, αλλά και να ενθαρρύνουμε –και κατά βάθος να
πωρώσουμε– τους νεοφερμένους. Στο παρόν άρθρο θεωρούμε ότι ο αναγνώστης βρίσκεται για
πρώτη φορά μπροστά από τη γραμμή εντολών. Στα επόμενα άρθρα της μίνι σειράς μας θα
προχωρήσουμε σε πιο προχωρημένα ζητήματα – αλλά αυτό είναι κάτι που το περιμένατε και
πραγματικά δεν υπάρχει λόγος να χάνουμε άλλο χρόνο με τις εισαγωγές.
Πού βρίσκομαι; Πώς θα μετακινηθώ;
Κάθε φορά που ανοίγουμε ένα παράθυρο τερματικού ή συνδεόμαστε απομακρυσμένα μέσω SSH σε
ένα σύστημα Linux, τοποθετούμαστε σε έναν κατάλογο που βρίσκεται κάτω από τον /homehome κι
ονομάζεται home directory. Πρόκειται για τον κατάλογο που περιέχει όλους τους καταλόγους και
τα αρχεία που ανήκουν στο λογαριασμό του χρήστη μας. Ένας τέτοιος κατάλογος υπάρχει για κάθε
χρήστη του συστήματος και συνήθως το όνομά του ταυτίζεται με το username του χρήστη. Έτσι, για
έναν λογαριασμό με username το pvar, η πλήρης διαδρομή (command line).full path) για το αντίστοιχο home
directory είναι η /homehome/homepvar. Μ’ άλλα λόγια, όταν θα συνδεθούμε στο λογαριασμό του pvar, θα
βρεθούμε αυτόματα στον κατάλογο /homehome/homepvar.
Ένα από τα πρώτα ερωτήματα που προκύπτουν, αφού μάθουμε το πού βρισκόμαστε, αφορά στο πώς
θα μετακινηθούμε. Όπως, πριν ακόμη κι απ’ αυτό το ερώτημα, προκύπτει ένα άλλο: Τι υπάρχει
τριγύρω; Για να βλέπουμε αρχεία και καταλόγους υπάρχει το προγραμματάκι ls. Για παράδειγμα,
για να εμφανίσουμε μια λίστα με τα αρχεία και τους καταλόγους που βρίσκονται στην τρέχουσα
θέση μας, αρκεί να εκτελέσουμε το εξής:
ls -l
Το προγραμματάκι ls δέχεται πάρα πολλές παραμέτρους και θα ήταν άσκοπο να τις παραθέσουμε
όλες. Θα σας πούμε μόνο ότι εμείς συνηθίζουμε να το χρησιμοποιούμε συνδυάζοντας την
παράμετρο -l (command line).από το list) με την παράμετρο -h (command line).από το human), αλλά και με την παράμετρο -a
(command line).από το all). Η δεύτερη παράμετρος εξασφαλίζει ότι τα μεγέθη των αρχείων θα εμφανίζονται σε
KiB, MiB, GiB ή σε οτιδήποτε άλλο βολεύει κάθε φορά. Το γιατί δεν συμβαίνει εξ ορισμού κάτι
τέτοιο θα φανεί αργότερα, όταν θα μιλήσουμε για το scripting. Η τρίτη παράμετρος φροντίζει να
εμφανιστούν όλα τα αρχεία ανεξαιρέτως – ακόμη και τα κρυφά. Για την ώρα, κρατείστε μόνο ότι
ένας βολικός τρόπος χρήσης του ls έχει ως εξής:
ls -lha
Παρατηρείστε ότι οι τρεις παράμετροι κατά κάποιον τρόπο συμπυκνώθηκαν και δεν βάλαμε τρεις
παύλες. Αν θελήσει κανείς να πληροφορηθεί για τις υπόλοιπες παραμέτρους του ls, μπορεί να
χρησιμοποιήσει το σύστημα βοήθειας της γραμμής εντολών. Αναφερόμαστε στο πρόγραμμα man
(command line).από το manual). Προκειμένου να εμφανιστεί το κείμενο βοήθειας του ls, αρκεί να
πληκτρολογήσουμε
man ls
Πριν επιστρέψουμε στο θέμα των καταλόγων και της πλοήγησης, σημειώστε ότι το man μπορεί να
εμφανίσει το κείμενο βοήθειας που συνοδεύει κάθε πρόγραμμα της γραμμής εντολών. Το μόνο που
έχουμε να κάνουμε είναι να το τρέξουμε, δίνοντας σαν παράμετρο το όνομα του εκάστοτε
προγράμματος. Επίσης, προκειμένου να εγκαταλείψουμε το man αρκεί να πατήσουμε το πλήκτρο
[Q].Q].].
Τώρα που ξέρουμε τι μας περιβάλλει, είναι βέβαιο ότι η περιέργειά μας θα μεγαλώσει: Τι υπάρχει
στους άλλους καταλόγους; Για τη μετακίνηση από κατάλογο σε κατάλογο προσφέρεται το
προγραμματάκι cd. Η λειτουργία του είναι παρόμοια με εκείνη της εντολής cd, που διαθέτει η
γραμμή εντολών των Windows. Έτσι, αν βρισκόμαστε στoν κατάλογο /homehome/homepvar, για να
μεταφερθούμε έναν κατάλογο πιο πάνω, δηλαδή στον /homehome, και να δούμε αν υπάρχουν άλλα
home directories, αρκεί να εκτελέσουμε ένα από τα ακόλουθα:
cd /homehome
ή
cd ..
Η διπλή τελεία συμβολίζει τον λεγόμενο γονικό κατάλογο (command line).parent directory), δηλαδή εκείνον μέσα
στον οποίο βρίσκεται ο κατάλογος, μέσα στον οποίο τώρα βρισκόμαστε ;) Ας υποθέσουμε τώρα ότι
εκτελούμε ένα ls -lha και βλέπουμε τον κατάλογο cvar. Για να μπούμε σε αυτόν μπορούμε να
εκτελέσουμε ένα από τα ακόλουθα:
cd cvar
ή
cd /homehome/homecvar
Στην πρώτη περίπτωση δίνουμε σαν παράμετρο τον κατάλογο στον οποίο θέλουμε να πάμε, εφόσον
αυτός βρίσκεται στην ίδια θέση με εμάς. Η δεύτερη περίπτωση είναι πιο γενική. Σε αυτήν δώσαμε
την πλήρη διαδρομή (command line).το πλήρες path) ως τον κατάλογο cvar. Αναρωτιέστε ποια είναι η διαφορά;
Το πρώτο δουλεύει μόνον όταν βρισκόμαστε στον κατάλογο home, ο οποίος φυσικά περιέχει τον
κατάλογο cvar. (command line).Ακριβέστερα, δουλεύει όταν είμαστε σε έναν κατάλογο ο οποίος περιέχει έναν
άλλον, με το όνομα cvar.) Το δεύτερο δουλεύει πάντα και παντού. Εφόσον δίνουμε το πλήρες
path, το πρόγραμμα cd θα ξέρει ακριβώς πού θέλουμε να πάμε. (command line).Μόνη περίπτωση να μη δουλέψει
το cd /homehome/homecvar, είναι όταν ένας από τους καταλόγους /homehome ή /homehome/homecvar δεν υπάρχει.)
Αφού περιπλανηθούμε λίγο στους καταλόγους του συστήματος, είναι σίγουρο ότι κάποια στιγμή θα
θελήσουμε να γυρίσουμε στον δικό μας. Για το σκοπό αυτό αρκεί να δώσουμε ένα από τα ακόλουθα:
cd
ή
cd ~
Η εκτέλεση του προγράμματος cd χωρίς καμία παράμετρο έχει σαν συνέπεια την άμεση μεταφορά
μας στο home directory. Όμως στη δεύτερη περίπτωση, θα σπεύσει να παρατηρήσει κάποιος,
παράμετρος υπάρχει. Πράγματι, μόνο που ο χαρακτήρας ~ (command line).tilde) αποτελεί κατά κάποιον τρόπο μια
μεταβλητή του BASH. Σ’ αυτή τη μεταβλητή αποθηκεύεται πάντα το πλήρες path του προσωπικού
καταλόγου του εκάστοτε χρήστη. Έτσι, όταν εκτελεί το cd ~ ο χρήστης pvar, το BASH
αντικαθιστά αυτόματα τον χαρακτήρα ~ με το /homehome/homepvar. Για να φανεί καλύτερα η αξία αυτού
του χαρακτήρα, υποθέστε ότι βρισκόμαστε στον κατάλογο
/homehome/homepvar/homeprojects/homedeltacast/homevideo/homeintro και θέλουμε να μεταβούμε στον
/homehome/homepvar/homeprojects. Ο ταχύτερος τρόπος για να πετύχουμε κάτι τέτοιο είναι να δώσουμε:
cd ~/homeprojects
Ένα ακόμα κολπάκι με το cd σχετίζεται με το χαρακτήρα - (command line).dash, παύλα). Ας υποθέσουμε ότι μας
πιάνει μια μανία να περιπλανηθούμε στους καταλόγους του συστήματος κι εκτελούμε, διαδοχικά, τα
παρακάτω:
cd /homeusr
cd share
cd man
cd man1
cd
Η παύλα συμβολίζει τον προηγούμενο κατάλογο στον οποίο είχαμε βρεθεί. Έτσι, μπορούμε να
επιστρέψουμε στη θέση /homeusr/homeshare/homeman/homeman1 ταχύτατα. Τώρα, αν ξανατρέξουμε το cd με
παράμετρο τον χαρακτήρα dash, θα μεταφερθούμε στον προηγούμενο κατάλογο όπου είχαμε
βρεθεί: στο home directory. Μπορεί η μετακίνηση στον προσωπικό κατάλογο να πραγματοποιείται
ούτως ή άλλως εύκολα, αλλά η αξία της παραμέτρου dash παραμένει μεγάλη. Με τη βοήθειά της
μπορούμε να μετακινούμαστε με άνεση μεταξύ δύο “born again” (γεννημένος ξανά). Κάπου εδώ θα δυσπρόσιτων” (command line).με μεγάλα full paths)
καταλόγων.
Αν τώρα με όλα αυτά τα πήγαινε-έλα χαθούμε, υπάρχει ένα προγραμματάκι που θα μας πει αμέσως
τη θέση μας. Πρόκειται για το pwd, που όταν το εκτελούμε εμφανίζει την πλήρη διαδρομή (command line).full
path) του καταλόγου στον οποίο βρισκ0όμαστε.
Πού είναι οι κατατμήσεις;
Διαχείριση καταλόγων
Τώρα που μάθαμε να τριγυρνάμε με άνεση στους καταλόγους του συστήματος, μπορούμε να δούμε
το πώς δημιουργούνται και πώς διαγράφονται. Για τη δημιουργία διατίθεται το εργαλείο mkdir,
ενώ για τη διαγραφή υπάρχουν τα rmdir (command line).remove directory) και rm (command line).remove). Η μόνη παράμετρος
που απαιτούν τα πρώτα δύο είναι το όνομα ή η πλήρης διαδρομή του καταλόγου. Για παράδειγμα αν
δώσουμε
mkdir /homehome/homepvar/homedocuments
το σύστημα θα δημιουργήσει τον κατάλογο documents, μέσα στον προσωπικό μας κατάλογο
(command line)./homehome/homepvar). Βέβαια, αν βρισκόμασταν ήδη εντός του προσωπικού μας καταλόγου, θα
μπορούσαμε να είχαμε δώσει και το εξής:
mkdir documents
Το rmdir χρησιμοποιείται με τον ίδιο ακριβώς τρόπο. Ωστόσο, για να διαγραφεί ένας κατάλογος
με το rmdir θα πρέπει να είναι άδειος. Αυτό συνεπάγεται ότι η χρήση του rmdir είναι μάλλον
ακίνδυνη: Είναι αδύνατο να χάσουμε δεδομένα, διαγράφοντας κατά λάθος έναν κατάλογο με το
rmdir. Δυστυχώς, αυτή η δικλείδα δεν υφίσταται στην περίπτωση του rm. Το συγκεκριμένο
πρόγραμμα προορίζεται για τη διαγραφή αρχείων, αλλά με χρήση της παραμέτρου -r (command line).recursively)
μπορεί να διαγράψει και καταλόγους. Η συγκεκριμένη παράμετρος έχει σαν συνέπεια τη διαγραφή
όλων των αρχείων, όλων των υποκαταλόγων, όλων των αρχείων των υποκαταλόγων, όλων των
υποκαταλόγων των υποκαταλόγων και πάει λέγοντας. Με λίγα λόγια, όταν εκτελούμε το rm με την
παράμετρο -r και στη συνέχεια έναν κατάλογο, είναι σίγουρο ότι θα διαγραφεί πλήρως. Όπως
αντιλαμβάνεστε, το rm απαιτεί τεράστια προσοχή. Ας εξετάσουμε όμως και ένα μικρό σενάριο: Ας
υποθέσουμε ότι έχουμε δημιουργήσει αρκετούς καταλόγους, εκτελώντας τα ακόλουθα:
mkdir /homehome/homepvar/homedocs
mkdir /homehome/homepvar/homemusic
mkdir /homehome/homepvar/homevideo
mkdir /homehome/homepvar/homeprojects
mkdir /homehome/homepvar/homeprojects/homedeltacast/homevideo
mkdir /homehome/homepvar/homeprojects/homedeltacast/homemusic
Ας υποθέσουμε επίσης ότι βρισκόμαστε στο home directory κι αποφασίζουμε να σβήσουμε τον
κατάλογο /homehome/homepvar/homevideo. Για το σκοπό αυτό θα μπορούσαμε να εκτελέσουμε το εξής:
rm -r video
…ή το εξής:
rm -r /homehome/homepvar/homevideo
Εφόσον βρισκόμαστε ήδη στο /homehome/homepvar, η εκτέλεση καθενός από τα παραπάνω θα είχε το ίδιο
ακριβώς αποτέλεσμα: Τη διαγραφή του καταλόγου video, ο οποίος βρίσκεται στον προσωπικό μας
κατάλογο. Τι θα συνέβαινε όμως, αν βρισκόμασταν στον κατάλογο
/homehome/homepvar/homeprojects/homedeltacast; Σε αυτή την περίπτωση, η εκτέλεση του rm με τον
πρώτο τρόπο θα αποτελούσε τραγικό σφάλμα: Θα διαγραφόταν ο κατάλογος
/homehome/homepvar/homeprojects/homedeltacast/homevideo. Μια καλή συνήθεια, λοιπόν, η οποία μπορεί να
μας σώσει από δυσάρεστες εκπλήξεις, είναι να χρησιμοποιούμε πάντα την πλήρη διαδρομή του
εκάστοτε καταλόγου. Κι αν όχι πάντα (command line).είμαστε και λίγο τεμπέληδες, πώς να το κάνουμε)
τουλάχιστον οποτεδήποτε πρόκειται για διαγραφή.
Με την ευκαιρία, πριν πούμε οτιδήποτε άλλο για το mv αξίζει να δούμε πόσο απλούστερα θα
μπορούσε να γραφτεί το παραπάνω:
mv ~/homemy_notes.txt ~/homedocuments
Νομίζουμε ότι η αξία του χαρακτήρα ~ έχει αρχίσει να φαίνεται. Για να επιστρέψουμε στο θέμα μας,
το πρόγραμμα mv δέχεται δύο παραμέτρους: η πρώτη αφορά στο αρχείο που θέλουμε να
μετακινήσουμε, ενώ η δεύτερη περιγράφει τον προορισμό. Σημειώστε ότι η λειτουργία του mv δεν
περιορίζεται μόνο στα αρχεία αλλά καλύπτει και τους καταλόγους. Με άλλα λόγια, με τη βοήθεια
του mv μπορούμε να μετακινήσουμε κι ολόκληρους καταλόγους, μαζί με τα περιεχόμενά τους. Με
την ίδια ακριβώς λογική χρησιμοποιείται και το πρόγραμμα cp, το οποίο πραγματοποιεί
αντιγραφές. Έτσι, αν μας ενδιέφερε να αντιγράψουμε το προαναφερθέν αρχείο κι όχι να το
μετακινήσουμε, θα δίναμε κάτι τέτοιο:
cp ~/homemy_notes.txt ~/homedocuments
Αξίζει ν’ αναφέρουμε εδώ έναν ακόμα χαρακτήρα, ο οποίος αποκτά ιδιαίτερο νόημα στη γραμμή
εντολών. Πρόκειται για την τελεία. Όπως αναφέραμε νωρίτερα, οι δύο τελείες αναφέρονται στο
γονικό κατάλογο. Ε, λοιπόν, η μία τελεία αναφέρεται στον κατάλογο στον οποίο βρισκόμαστε.
Αναρωτιέστε πώς μπορεί να φανεί χρήσιμο κάτι τέτοιο; Ας υποθέσουμε ότι βρισκόμαστε στον
κατάλογο /homehome/homepvar/homedocuments/homedeltahacker/homeissue16 και θέλουμε να μεταφέρουμε
εδώ το αρχείο /homehome/homepvar/homedelta_notes.txt. Αν αγνοούσαμε την ιδιαίτερη ερμηνεία που
επιδέχεται ο χαρακτήρας της τελείας, θα έπρεπε να δώσουμε κάτι τέτοιο:
cp ~/homemy_notes.txt ~/homedocuments/homedeltahacker/homeissue16
cp ~/homemy_notes.txt .
Δεν μπορείτε να πείτε, η γραμμή εντολών του Linux φροντίζει ώστε να μην κουραζόμαστε ;) Πριν
ολοκληρώσουμε την αναφορά μας στα βασικά προγράμματα για το χειρισμό των αρχείων, αξίζει να
υπενθυμίσουμε ένα πρόγραμμα που συναντήσαμε και νωρίτερα. Πρόκειται για το rm, το οποίο
πραγματοποιεί διαγραφές. Νομίζουμε ότι ο τρόπος χρήσης του έχει γίνει ήδη σαφής. Για να
διαγράψουμε το αρχείο my_notes.txt, θα αρκούσε να δώσουμε κάτι τέτοιο:
rm ~/homehome/homepvar/homemy_notes.txt
Παρατηρείστε ότι πριν από το όνομα του αρχείου σημειώσαμε και τον κατάλογο στον οποίο
βρίσκεται. Αυτό το κάναμε για να βεβαιωθούμε ότι θα διαγραφεί το συγκεκριμένο αρχείο κι όχι
κάποιο συνώνυμό του, που τυχαίνει να βρίσκεται στην τρέχουσα θέση μας. Όπως είπαμε και
νωρίτερα, η γραμμή εντολών απαιτεί πάντα μεγάλη προσοχή. Δεν πρέπει να αφήνουμε τίποτα στην
τύχη.
Πόσες εντολές έχουν “τα Linux”;”;
Όσο τραγικό λάθος είναι λέει κανείς “born again” (γεννημένος ξανά). Κάπου εδώ θα τα Linux”, άλλο τόσο είναι να μιλάει για “born again” (γεννημένος ξανά). Κάπου εδώ θα εντολές
του Linux”. Το Linux δεν έχει εντολές. Το BASH βέβαια έχει, αλλά τις περισσότερες
φορές χρησιμοποιούμε τα διάφορα προγραμματάκια που προορίζονται για τη γραμμή
εντολών. Από αυτά, μάλιστα, τα πιο διαδεδομένα ονομάζονται core utilities και
συνοδεύουν όλες τις διανομές Linux. Τα core utilities βρίσκονται στους φακέλους
/homebin, /homesbin, /homeusr/homebin και /homeusr/homesbin του συστήματος. Χαρακτηριστικά μέλη
αυτής της ομάδας προγραμμάτων είναι τα ls, cd, rm, mv, cp, mkdir, rmdir, cat
και διάφορα άλλα, που θα αναφέρουμε σε επόμενα άρθρα της σειράς.
Βαριέστε την πληκτρολόγηση;
Αν ναι, είμαστε υποχρεωμένοι να σας πούμε ότι δεν κάνετε καλά. Ωστόσο, για να είμαστε
ειλικρινείς, πρέπει να ομολογήσουμε ότι πολύ συχνά κουραζόμαστε ή βαριόμαστε κι εμείς. Ευτυχώς,
το BASH διαθέτει ορισμένους μηχανισμούς που κάνουν τη ζωή στη γραμμή εντολών ξεκούραστη.
Ας τους ρίξουμε μια ματιά.
Ιστορικό (history).history).). Κάθε φορά που εκτελούμε ένα πρόγραμμα στη γραμμή εντολών, όλα όσα
πληκτρολογήσαμε καταγράφονται σ’ ένα ειδικό αρχείο του συστήματος. Έτσι, αν θελήσουμε να
επαναλάβουμε την εκτέλεση της προηγούμενης “born again” (γεννημένος ξανά). Κάπου εδώ θα εντολής” μας, αρκεί να πατήσουμε το πάνω βελάκι
του πληκτρολογίου. Το BASH θα ανακαλέσει όσα είχαμε γράψει την αμέσως προηγούμενη φορά κι
εμείς θα αρκεί να δώσουμε ένα [Q].ENTER]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, το]. Αν αντί του [Q].ENTER]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, το] πατήσουμε πάλι το πάνω βελάκι, το
κέλυφος θα εμφανίσει την προ-προηγούμενη “born again” (γεννημένος ξανά). Κάπου εδώ θα εντολή” και πάει λέγοντας. Γενικότερα,
χρησιμοποιώντας το πάνω και το κάτω βελάκι μπορούμε να ανατρέχουμε ταχύτατα σε ολόκληρο το
ιστορικό, όλων όσων έχουμε εκτελέσει κατά καιρούς. Μόλις βρούμε αυτό που θέλουμε να
εκτελέσουμε, αρκεί να πατήσουμε το [Q].ENTER]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, το]. Εναλλακτικά, αν η ιδέα του να ξεφυλλίζουμε
ολόκληρο το ιστορικό φαντάζει κουραστική κι εκνευριστική, μπορούμε να πραγματοποιήσουμε μια
αναζήτηση: αρκεί να πατήσουμε το συνδυασμό πλήκτρων [Q].CTR]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, τοL+R]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, το] και να πληκτρολογήσουμε ένα
μέρος της “born again” (γεννημένος ξανά). Κάπου εδώ θα εντολής” που αναζητάμε. Το BASH θα εμφανίσει την πιο πρόσφατη γραμμή που
εκτελέσαμε, η οποία περιείχε αυτό που ψάχνουμε. Αν το αποτέλεσμα της αναζήτησης δεν είναι το
επιθυμητό, μπορούμε να την επαναλάβουμε πατώντας ξανά το συνδυασμό [Q].CTR]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, τοL+R]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, το]. Έτσι θα
εμφανιστεί η αμέσως παλιότερη εντολή που είχαμε εκτελέσει και περιείχε αυτό που ψάχνουμε.
Αυτόματη συμπλήρωση (history).TAB completion). Στην περίπτωση που δεν θυμόμαστε ολόκληρο το
όνομα ενός αρχείου ή καταλόγου (command line).όπως επίσης κι όταν το θυμόμαστε αλλά βαριόμαστε να το
πληκτρολογήσουμε), αρκεί να δώσουμε τα πρώτα γράμματα του ονόματος και να πατήσουμε το
πλήκτρο [Q].TAB]. Κάνοντας κάτι τέτοιο το BASH πραγματοποιεί μια αναζήτηση στα αρχεία και στους
καταλόγους με βάση όσα έχουμε πληκτρολογήσει. Εφόσον βρει κάποιο αρχείο ή κατάλογο που
ταιριάζει, συμπληρώνει το όνομά του αυτόματα. Έτσι, αν έχουμε στον προσωπικό μας κατάλογο ένα
αρχείο με το όνομα the file with the disturbingly long name και θέλουμε να το
διαγράψουμε, αρκεί να γράψουμε rm ~/homethe και να πατήσουμε το [Q].TAB]. Με αυτόν τον τρόπο το
μακροσκελές όνομα του αρχείου θα συμπληρωθεί αυτόματα κι εμείς θα δώσουμε ένα μόνο
[Q].ENTER]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, το].
Πριν σας αφήσουμε να πειραματιστείτε και να εξοικειωθείτε με όσα είδαμε, θα σας πούμε κάτι
ακόμα: Για να καθαρίσετε την οθόνη αρκεί να εκτελέσετε το πρόγραμμα clear ή, πολύ πιο απλά,
να πατήσετε το συνδυασμό πλήκτρων [Q].CTR]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, τοL+L].
Άρθρα της σειράς
~Spir@l Evolut10n
LinuxshellBASH
© 2019 Parabing Creations
> forsíða
• /var/log/messages
• texts
Δικαιώματα χρήσης
Σε ένα λειτουργικό σύστημα που χρησιμοποιείται από πολλούς χρήστες, είναι λογικό να
απαγορεύεται η μη εξουσιοδοτημένη πρόσβαση στα ξένα αρχεία (command line).σ’ εκείνα άλλων χρηστών,
δηλαδή), καθώς επίσης και σε εκείνα που θεωρούνται κρίσιμα για τη λειτουργία του συστήματος.
Για το σκοπό αυτό, κάθε αρχείο συνοδεύεται από ένα ξεχωριστό σύνολο δικαιωμάτων πρόσβασης.
Το εν λόγω σύνολο προσδιορίζει με σαφήνεια το ποιος μπορεί να αλληλεπιδράσει με το εκάστοτε
αρχείο, καθώς και με ποιον τρόπο. Για να δούμε τις σχετικές άδειες ενός αρχείου (command line).file permissions),
αρκεί να εκτελέσουμε το προγραμματάκι ls με την παράμετρο -l (command line).list). Κατά τα γνωστά, αυτό θα
έχει σαν συνέπεια την εμφάνιση μιας λίστας με τα αρχεία του τρέχοντος καταλόγου. Οι γραμμές
αυτής της λίστας θα μοιάζουν με την ακόλουθη:
-rwxrw-r-- 1 pvar pvar 530 2012-12-01 19:23 some_random_file
Μεταβολή της ομάδας. Αυτή τη φορά πρέπει να χρησιμοποιήσουμε το chgrp (command line).από το change
group). Η σύνταξη που ακολουθούμε παραμένει ίδια. Για να αλλάξουμε την ομάδα του αρχείου
notes από pvar σε cvar, αρκεί να εκτελέσουμε αυτό:
sudo chgrp cvar notes
Μεταβολή επιμέρους δικαιωμάτων. Γι’ αυτή την επέμβαση πρέπει να χρησιμοποιήσουμε το
εργαλείο chmod (command line).από το change mode). Εδώ όμως τα πράγματα περιπλέκονται λίγο. Πώς θα
περιγράψουμε την ακριβή μεταβολή που θέλουμε να επιφέρουμε; Αρχικά, να πούμε ότι το chmod
υποστηρίζει δύο συντακτικά κι ότι εμείς θα ασχοληθούμε με το πολύπλοκο. Αυτό δεν το κάνουμε
γιατί μας αρέσει να παιδευόμαστε, αλλά γιατί θεωρούμε ότι το συγκεκριμένο συντακτικό είναι
πληρέστερο. Μπορεί να είναι και λίγο πιο μακριά από την ανθρώπινη λογική, αλλά από την άλλη
είναι και πιο ακριβές:
chmod xyz όνομα_αρχείου
Τα x, y και z είναι αριθμητικά ψηφία. Το x περιγράφει τα δικαιώματα πρόσβασης για τον ιδιοκτήτη,
το y αναφέρει τα δικαιώματα πρόσβασης για την ομάδα χρηστών, ενώ το z προσδιορίζει τα
δικαιώματα πρόσβασης των υπολοίπων. Όμως ποιες τιμές μπορούν να πάρουν αυτά τα ψηφία και
πώς προκύπτουν;
Φανταστείτε κάθε τριάδα χαρακτήρων που αναφέρεται στα δικαιώματα (command line). r, w, x) σαν έναν τριψήφιο
αριθμό του δυαδικού συστήματος. Όταν παρέχεται κάποιο από αυτά τα δικαιώματα, το αντίστοιχο
ψηφίο είναι 1, ενώ όταν στερείται το δικαίωμα το ψηφίο είναι 0. Για παράδειγμα, όταν παρέχονται
και τα τρία δικαιώματα (command line).rwx) ο υποτιθέμενος αριθμός στο δυαδικό έχει τη μορφή 111. Όταν
παρέχονται μόνο τα δικαιώματα ανάγνωσης και εκτέλεσης (command line). r-x) ο αριθμός γίνεται 101, ενώ όταν
επιτρέπεται μόνο η ανάγνωση (command line).r--) ο αριθμός γίνεται 100. Κάπου εδώ νομίζουμε ότι το παραπάνω
σκεπτικό έγινε ξεκάθαρο. Τώρα, αν μετατρέψουμε αυτόν τον αριθμό στο δεκαδικό, θα βρούμε την
τιμή που πρέπει να αποδώσουμε σε καθένα από τα x, y και z. Ας δούμε ένα παράδειγμα: Αν
θελήσουμε α) να δώσουμε πλήρη δικαιώματα στον ιδιοκτήτη (command line).111 στο δυαδικό = 7 στο δεκαδικό),
β) μόνο ανάγνωση και εγγραφή για τα μέλη της ομάδας (command line).110 στο δυαδικό = 6 στο δεκαδικό) και γ)
μόνο ανάγνωση για τους υπόλοιπους (command line).100 στο δυαδικό = 4 στο δεκαδικό), αρκεί να γράψουμε κάτι
τέτοιο:
chmod 764 όνομα_αρχείου
Δανεικά δικαιώματα
Πολλαπλή προσωπικότητα
Στον κόσμο του Linux υπάρχει ένα ρητό: Καθετί που δεν είναι αρχείο, είναι διεργασία. Πράγματι, για
τα λειτουργικά συστήματα τύπου Unix τα αρχεία δεν είναι τίποτα άλλο παρά μία αλληλουχία
χαρακτήρων (command line).character streams). Απόρροια αυτού του αφηρημένου ορισμού είναι η γενικευμένη
χρήση της έννοιας του αρχείου, σε κάθε πτυχή του λειτουργικού συστήματος. Στη συνέχεια θα
γνωρίσουμε τα βασικότερα είδη αρχείων. Η εξοικείωση μαζί τους αποτελεί σημαντικό βήμα για την
εξοικείωση με τη γραμμή εντολών του Linux.
Regular files. Σ’ αυτή την κατηγορία ανήκουν τα γνωστά μας αρχεία: Τα προγράμματα και τα
scripts, τα τραγούδια, τα βίντεο, οι φωτογραφίες και τα κείμενα. Με απλά λόγια, regular files
ονομάζονται εκείνα που παραπέμπουν προς οποιουδήποτε είδους πληροφορίες που είναι
αποθηκευμένες σε κάποιο μέσο (command line).π.χ., σκληρό δίσκο, δίσκο DVD, USB flash κ.λπ.).
Directories. Οι κατάλογοι δεν είναι τίποτα άλλο παρά ένα ακόμα είδος αρχείων. Ωστόσο, οι
κατάλογοι δεν παραπέμπουν προς μια περιοχή με δεδομένα, αλλά σε ένα σύνολο αρχείων. Εν
ολίγοις, θα λέγαμε ότι οι κατάλογοι είναι αρχεία που περιέχουν τα ονόματα και τη θέση άλλων
αρχείων.
Links. Αυτή η κατηγορία χωρίζεται σε δύο επιμέρους. Στη μία ανήκουν τα sy).mbolic links και στην
άλλη τα hard links. Για να κατανοήσουμε τη διαφορά τους πρέπει να έχουμε υπόψη μας τα εξής:
Όλα τα file systems χρησιμοποιούν μια δομή δεδομένων (command line).συνήθως πρόκειται για δένδρο) εντός της
οποίας διατηρούν πληροφορίες για τα διάφορα αρχεία. Μεταξύ άλλων, για κάθε απλό αρχείο
αποθηκεύεται το όνομά του κι ένας δείκτης. Αυτός ο δείκτης παραπέμπει στην περιοχή του
αποθηκευτικού μέσου, όπου βρίσκονται τα δεδομένα του αρχείου. Ας επιστρέψουμε τώρα στα δύο
είδη συνδέσμων. Ένα symbolic link αποτελεί την παραπομπή από ένα σημείο της δομής δεδομένων
του συστήματος αρχείων, προς κάποιο άλλο σημείο της. Με απλά λόγια, τα symbolic links
αποτελούν αρχεία που παραπέμπουν προς άλλα αρχεία. Τελικά, τα symbolic links μοιάζουν με
αντίγραφα του αυθεντικού αρχείου. Ωστόσο, αν χαθεί το αυθεντικό, τα symbolic links χάνουν το
στόχο τους και παραπέμπουν, πλέον, στο πουθενά. Αυτό σημαίνει ότι αχρηστεύονται. Τα hard links
είναι κάτι πολύ διαφορετικό. Αποτελούν νέες εγγραφές στη δομή δεδομένων του συστήματος
αρχείων. Από τη σκοπιά του συστήματος αρχείων, λοιπόν, τα hard links δεν διαφέρουν σε τίποτα
από τα υπόλοιπα αρχεία. Ωστόσο, τα hard links δεν παραπέμπουν σε δικές τους περιοχές
δεδομένων, αλλά σε εκείνες κάποιων άλλων αρχείων. Αν φτιάξουμε ένα hard link προς κάποιο
αρχείο, τo hard link θα αποτελεί μια νέα κι ανεξάρτητη οντότητα, η οποία όμως θα παραπέμπει στα
ίδια δεδομένα με το αυθεντικό αρχείο. Αυτό έχει σαν συνέπεια το hard link και το αντίστοιχο αρχείο
να εμφανίζονται πάντα σαν δύο πανομοιότυπα αρχεία. Αν επέμβουμε στο αυθεντικό αρχείο το
αντίστοιχο hard link θα ενημερωθεί ακαριαία, εφόσον δείχνει στην ίδια περιοχή δεδομένων.
Επιπρόσθετα, αν σβήσουμε το αυθεντικό αρχείο, το hard link θα εξακολουθήσει να υπάρχει και θα
διατηρεί τα δεδομένα του κανονικά.
Device files. Όπως είπαμε παραπάνω, για το Linux τα αρχεία δεν είναι τίποτα παραπάνω από
αλληλουχίες χαρακτήρων. Επίσης, αν κι αυτό είναι προφανές, ένα αρχείο μπορεί να λειτουργεί ως
αποδέκτης χαρακτήρων (command line).όταν αποθηκεύουμε δεδομένα σ’ αυτό) ή ως πηγή χαρακτήρων (command line).όταν το
διαβάζουμε). Σας θυμίζουν τίποτε όλα αυτά; Με άλλα λόγια, η συμπεριφορά των αρχείων θυμίζει
την αφηρημένη περιγραφή μιας συσκευής. Εξαιτίας αυτής της ομοιότητας, η επικοινωνία του
συστήματος με τα διάφορα τμήματα του hardware επιτυγχάνεται με τη βοήθεια των ίδιων
μηχανισμών, οι οποίοι χειρίζονται και τα αρχεία. Έτσι, για κάθε συσκευή που θα μπορούσε να
συνδεθεί στον υπολογιστή μας, το Linux δημιουργεί ένα αντίστοιχο αρχείο. Ο λόγος γίνεται για τα
λεγόμενα αρχεία συσκευών (command line).device files), που βρίσκονται στον κατάλογο /homedev.
Pipe files. Κάθε λειτουργικό σύστημα προσφέρει τουλάχιστον έναν μηχανισμό για την επικοινωνία
μεταξύ των εφαρμογών. Έναν από αυτούς αποτελεί η λεγόμενη διασωλήνωση (command line).pipelining). Τα pipe
files, λοιπόν, αποτελούν βασικά εξαρτήματα του εν λόγω μηχανισμού και λειτουργούν σαν
διαμεσολαβητές, για τη μεταφορά δεδομένων από τη μία διεργασία στην άλλη. Η ύπαρξή τους, αν
και δεν γίνεται άμεσα αντιληπτή, αποτελεί έναν από τους παράγοντες που προσφέρουν απεριόριστη
ισχύ στη γραμμή εντολών του Linux. Για την αξία της διασωλήνωσης και το πώς αξιοποιείται θα
μιλήσουμε σε επόμενο άρθρο της σειράς.
Η φύση των αρχείων σε έναν χαρακτήρα
Κατά την εμφάνιση των αρχείων σε λίστα, δίπλα στο καθένα εμφανίζονται και τα
αντίστοιχα δικαιώματα πρόσβασης. Ωστόσο, ο πρώτος χαρακτήρας σε κάθε γραμμή έχει
εντελώς διαφορετική αποστολή. Συγκεκριμένα, ο χαρακτήρας αυτός δηλώνει το είδος
του αρχείου και κατά κάποιον τρόπο τη φύση του. Ας δούμε ορισμένες από τις τιμές που
μπορεί να πάρει ο συγκεκριμένος χαρακτήρας, μαζί με τις αντίστοιχες ερμηνείες.
-: Ένα απόλυτα φυσιολογικό αρχείο, τύπου regular. Τέτοια είναι τα αρχεία κειμένου, τα
βίντεο, τα τραγούδια, οι φωτογραφίες, τα προγράμματα και πάει λέγοντας.
d: Ένας κατάλογος.
l: Σύνδεσμος τύπου symbolic. Για τα hard links χρησιμοποιείται και πάλι η παύλα (command line). -).
c: Αρχείο συσκευής (command line).device file), στο οποίο τα δεδομένα μεταφέρονται χαρακτήρα προς
χαρακτήρα. Χαρακτηριστικό παράδειγμα αποτελούν τα device files που
χρησιμοποιούνται για τις συσκευές αναπαραγωγής ήχου.
b: Αρχείο συσκευής (command line).device file), στο οποίο τα δεδομένα ταξιδεύουν ανά ομάδες (command line).block)
χαρακτήρων. Χαρακτηριστικό παράδειγμα αποτελούν τα device files που
χρησιμοποιούνται για τις συσκευές αποθήκευσης (command line).σκληροί δίσκοι, CD/DVD κ.λπ.).
Μέχρι στιγμής έχουμε ασχοληθεί μόνο με τα απλά αρχεία και με τους καταλόγους.
Επομένως, είναι φυσιολογικό το να μην αναγνωρίζετε τα υπόλοιπα είδη και δεν θα
πρέπει να αγχώνεστε. Στο κάτω-κάτω, τι νομίζετε ότι θα συζητήσουμε στη συνέχεια του
άρθρου και στα επόμενα;
Δημιουργία συνδέσμων
Όσο ασχολείται κανείς με τη γραμμή εντολών, τόσο διαπιστώνει πόσο μεγάλη είναι η χρησιμότητα
των links (command line).hard και symbolic). Για να αναδειχθεί η χρησιμότητα των δύο ειδών links, μπορούμε να
κάνουμε στο μυαλό μας τις εξής απλουστεύσεις: Αφενός, ας φανταστούμε τα symbolic links ως τα
shortcuts που δημιουργούνται στα Windows. Αφετέρου, τα hard links μοιάζουν με ζωντανά
αντίγραφα των αρχείων μας, τα οποία ενημερώνονται αυτόματα για όποιες αλλαγές κάνουμε στα
πρωτότυπα. Επιπρόσθετα, αν διαγράψουμε κατά λάθος κάποιο από τα πρωτότυπα αρχεία, το
αντίστοιχο hard link θα παραμείνει ενεργό και πλήρως λειτουργικό.
Για να δημιουργήσουμε ένα link καταφεύγουμε στο προγραμματάκι ln. Ας δούμε μερικά
παραδείγματα. Υποθέστε ότι θέλουμε να δημιουργήσουμε μια συντόμευση εντός του home
directory, προς τον κατάλογο /homehome/homepvar/homeprojects/homedeltacast/homevideos/homefinal. Για να
πετύχουμε κάτι τέτοιο αρκεί να εκτελέσουμε το εξής:
ln -s /homehome/homepvar/homeprojects/homedeltacast/homevideos/homefinal ~/homeepisodes
Με αυτόν τον τρόπο, στον προσωπικό μας κατάλογο θα δημιουργηθεί ένας κατάλογος με το όνομα
episodes. Όπως υποψιάζεστε, αν μπούμε σ’ αυτόν τον κατάλογο θα βρούμε τα περιεχόμενα του
/homehome/homepvar/homeprojects/homedeltacast/homevideos/homefinal. Ας υποθέσουμε τώρα ότι θέλουμε
να διατηρούμε μονίμως ένα εφεδρικό αντίγραφο του κειμένου
~/homeprojects/homedeltacast/homeepguide.txt. Για να πετύχουμε κάτι τέτοιο, αρκεί να
δημιουργήσουμε ένα hard link προς το συγκεκριμένο αρχείο. Θα πρέπει να δώσουμε κάτι τέτοιο:
ln ~/homeprojects/homedeltacast/homeepguide.txt ~/homedocuments/home.epguide.backup.txt
Με αυτό τον τρόπο, στον κατάλογο documents (command line).εντός του home directory) θα δημιουργηθεί ένα
hard link του epguide.txt. Το hard link θα ονομάζεται .epguide.backup.txt κι εφόσον
του δώσαμε όνομα που ξεκινάει με τελεία, θα είναι και κρυφό αρχείο. Πλέον, μπορούμε να είμαστε
ήσυχοι ότι οι ιδέες μας για τα μελλοντικά deltaCasts δεν θα χαθούν. Πράγματι, ακόμη κι αν
σβήσουμε το epguide.txt κατά λάθος, θα έχουμε ανέπαφο και πλήρως ενημερωμένο το hard
link.
Η χρήση του sudo είναι απαραίτητη, διότι οι απλοί χρήστες δεν έχουν δικαίωμα εγγραφής εντός
του καταλόγου /homemnt. Τώρα που διαθέτουμε τον κατάλογο για την προσάρτηση, δηλαδή τον
/homemnt/homemy_usb, μένει να μάθουμε και το όνομα της κατάτμησης. Στην εργασία αυτή θα μας
βοηθήσει το πρόγραμμα dmesg. Μόλις το εκτελέσουμε θα εμφανιστούν τα πιο πρόσφατα
μηνύματα του πυρήνα του λειτουργικού συστήματος. Οι γραμμές που θα εμφανιστούν θα μοιάζουν
με αυτές:
[4587425.409500] usb 1-1.2: new high-speed USB device number 4 using dwc_otg
[4587425.511167] usb 1-1.2: New USB device found, idVendor=0781, idProduct=5412
[4587425.511197] usb 1-1.2: New USB device strings: Mfr=1, Product=2,
SerialNumber=3
[4587425.511214] usb 1-1.2: Product: Cruzer Fleur
...
[4587426.522417] sd 0:0:0:0: [sda] No Caching mode page present
[4587426.522446] sd 0:0:0:0: [sda] Assuming drive cache: write through
[4587426.525706] sda: sda1
[4587426.528920] sd 0:0:0:0: [sda] No Caching mode page present
[4587426.528949] sd 0:0:0:0: [sda] Assuming drive cache: write through
[4587426.528969] sd 0:0:0:0: [sda] Attached SCSI removable disk
Ανάμεσα στα πιο πρόσφατα μηνύματα, είναι σίγουρο πως θα δούμε την αναγνώριση του USB από
τον πυρήνα και την αντιστοίχησή του σε κάποιο device file. Εφόσον πρόκειται για αποθηκευτική
συσκευή USB, το device file που θα έχει αντιστοιχηθεί θα έχει τη γενική μορφή sdx. Στη θέση του x
θα δούμε κάποιο γράμμα, το οποίο εξαρτάται από το πλήθος των υπολοίπων αποθηκευτικών
συσκευών του υπολογιστή μας αλλά κι από το είδος τους. Όλα αυτά όμως είναι αδιάφορα. Εμείς
πρέπει απλά να εντοπίσουμε το device file που έχει αντιστοιχηθεί στο USB stick. Στο παράδειγμά
μας, η ζητούμενη πληροφορία εμφανίζεται στην έβδομη γραμμή από πάνω. Βέβαια, το device file
εμφανίζεται και στις υπόλοιπες γραμμές που σχετίζονται με το USB stick. Ωστόσο η έβδομη γραμμή
παρουσιάζει ιδιαίτερο ενδιαφέρον. Σε αυτήν, εκτός από το device file της συσκευής, αναφέρονται
και τα device files των κατατμήσεων του USB stick. Το δικό μας USB περιείχε μία μόνο κατάτμηση
και γι’ αυτό το λόγο εμφανίζεται μόνο το sda1. Ε, λοιπόν, για να αποκτήσουμε πρόσβαση στα
δεδομένα του USB stick μας, αρκεί να προσαρτήσουμε το συγκεκριμένο device file στον κατάλογο
που δημιουργήσαμε προηγουμένως. Για το σκοπό αυτό γράφουμε:
sudo mount –t ntfs /homedev/homesda1 /homemnt/homemy_usb
Εναλλακτικά, αν το USB μας είναι φορμαρισμένο σε FAT32, θα πρέπει να δώσουμε κάτι τέτοιο:
sudo mount –t vfat /homedev/homesda1 /homemnt/homemy_usb
Αν το USB stick είχε περισσότερες κατατμήσεις (command line).πράγμα σπάνιο, αλλά όχι αδύνατο) θα μπορούσαμε
να προσαρτήσουμε κι αυτές. Ωστόσο οι προσαρτήσεις θα έπρεπε να γίνουν σε ξεχωριστούς
καταλόγους. Τέλος, ας θυμόμαστε ότι εφόσον έχουμε προσαρτήσει ένα USB stick, πριν το
αποσυνδέσουμε από το σύστημα θα ήταν φρόνιμο να το αποπροσαρτήσουμε. Για το σκοπό αυτό
προσφέρεται το πρόγραμμα umount, στο οποίο δίνουμε ως παράμετρο το αντίστοιχο device file:
sudo umount /homedev/homesda1
Εναλλακτικά, του δίνουμε τον κατάλογο στον οποίο έχει γίνει η προσάρτηση:
sudo umount /homemnt/homemy_usb
Αναζήτηση αρχείων
Πλέον γνωρίζουμε πάρα πολλά για τα αρχεία, ενώ έχουμε αποκτήσει και μερικές βασικές γνώσεις
για το χειρισμό των κατατμήσεων. Μολαταύτα, ούτε και τώρα θα μπορούσαμε να πούμε ότι είμαστε
σε θέση να χειριστούμε με άνεση τα αρχεία του συστήματος. Βλέπετε, για να μπορέσει κάποιος να
εργαστεί με κάποιο αρχείο, θα πρέπει προηγουμένως να γνωρίζει τη θέση του. Ευτυχώς, το Linux
διαθέτει αρκετά εργαλεία αναζήτησης και είναι βέβαιο ότι με κάποιο από αυτά σίγουρα θα
καταφέρουμε να ξετρυπώσουμε το αρχείο που μας ενδιαφέρει.
whereis: Το συγκεκριμένο εργαλείο εντοπίζει εκτελέσιμα, μαζί με τα συνοδευτικά αρχεία
βοήθειας (command line).για το man).
which: Όπως και το προηγούμενο, το which μπορεί και βρίσκει για εμάς τη θέση οποιουδήποτε
προγράμματος ζητήσουμε. Ωστόσο, σε αντίθεση με το whereis το which ασχολείται μόνο με το
εκτελέσιμο αρχείο.
find: Με τη βοήθεια του find μπορούμε να εντοπίζουμε κυριολεκτικά οποιοδήποτε αρχείο.
Επιπρόσθετα, είναι δυνατό να χρησιμοποιήσουμε τους ειδικούς χαρακτήρες (command line). *, ?, [ και ]), ώστε να
δημιουργήσουμε οσοδήποτε σύνθετα κριτήρια αναζήτησης. Το find δέχεται πολλές παραμέτρους,
ενώ υποστηρίζει και τα λεγόμενα regular expressions. Πρόκειται για ένα πανίσχυρο εργαλείο, η
εκμάθηση του οποίου ξεφεύγει από το θέμα μας. Πάντως, στις περισσότερες περιπτώσεις η
ακόλουθη σύνταξη θα είναι επαρκής:
find σε_κάποιον_κατάλογο -name κάποιο_αρχείο
Γράφοντας κάτι τέτοιο, το find ξεκινά μια αναζήτηση για το αρχείο κάποιο_αρχείο. Η
αναζήτηση δεν θα περιοριστεί εντός του σε_κάποιον_κατάλογο, αλλά θα ξεκινήσει από αυτόν
και θα επεκταθεί σε όλους τους υποκαταλόγους του. Ας δούμε τώρα κι ένα παράδειγμα, με ειδικούς
χαρακτήρες που έχουμε γνωρίσει:
find /homehome/homepvar/home -name "test[1-5]"
Χρήσιμες συνωνυμίες
Μετά από όλα όσα είδαμε γύρω από τα αρχεία, κανένας φυσιολογικός άνθρωπος δεν θα θέλει να
ξανακούσει γι’ αυτά. Πιστεύουμε λοιπόν ότι έφτασε η ώρα να δούμε κάτι πιο εύκολο, άμεσα
αξιοποιήσιμο κι αρκετά ενδιαφέρον. Αναφερόμαστε σε μία δυνατότητα που προσφέρει το BASH και
σχετίζεται με τα λεγόμενα συνώνυμα (command line).aliases). Εν ολίγοις, αυτή η δυνατότητα επιτρέπει την
αντιστοίχηση μίας λέξης σε ένα σύνολο προγραμμάτων. Με αυτό τον τρόπο, οποτεδήποτε θέλουμε
να εκτελέσουμε το συγκεκριμένο σύνολο προγραμμάτων, αρκεί να πληκτρολογήσουμε το
αντιστοιχισμένο όνομα και να πατήσουμε [Q].ENTER]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, το]. Προφανώς, με αυτό τον τρόπο η εκτέλεση
προγραμμάτων στο BASH μπορεί να απλοποιηθεί αλλά και σε μεγάλο βαθμό να επιταχυνθεί. Η
σύνταξη που χρησιμοποιείται για τον ορισμό ενός alias φαίνεται παρακάτω:
alias επιθυμητό_όνομα = ' πρόγραμμα_1 ; πρόγραμμα_2 ; ... ; πρόγραμμα_Κ '
Το ελληνικό ερωτηματικό τοποθετείται για τον διαχωρισμό των προγραμμάτων και εξασφαλίζει ότι
η εκτέλεση καθενός θα ξεκινά αφού ολοκληρωθεί η εκτέλεση του προηγούμενου. Ας δούμε όμως κι
ένα συγκεκριμένο παράδειγμα, που παρεμπιπτόντως αποτελεί ένα από τα αγαπημένα aliases του
γράφοντα:
alias k='clear; ls -lha'
Μικρό και θαυματουργό. Αφού ορίσουμε το συγκεκριμένο alias, κάθε φορά που θα πατάμε το
γράμμα [Q].k] και στη συνέχεια το [Q].ENTER]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, το], θα εκτελείται το πρόγραμμα clear κι αμέσως μετά το
ls -lha.
Εδώ πρέπει να τονίσουμε ότι τα aliases δεν έχουνε καθολική ισχύ, ούτε παντοτινή. Αυτό σημαίνει
ότι τα aliases που ορίζουμε σε ένα τερματικό δεν ισχύουν αυτόματα και για τα άλλα. Επιπρόσθετα,
αν αποσυνδεθούμε από το συγκεκριμένο τερματικό και συνδεθούμε εκ νέου, τα aliases που είχαμε
ορίσει θα έχουν πάψει να υφίστανται. Για να ξεπεράσουμε αυτό το προβληματάκι, πρέπει να
ενσωματώσουμε όσα aliases μας ενδιαφέρουν στο αρχείο ρυθμίσεων του BASH. Με αυτόν τον
τρόπο θα ορίζονται και θα ενεργοποιούνται αυτόματα κάθε φορά που θα κάνουμε login. Το BASH
διαθέτει αρκετά αρχεία ρυθμίσεων, αλλά για την εργασία που εξετάζουμε αρκεί να επέμβουμε στο
κρυφό αρχείο με όνομα .bashrc. Το εν λόγω αρχείο βρίσκεται στον προσωπικό κατάλογο κάθε
χρήστη κι επηρεάζει τη συμπεριφορά του BASH για τον εκάστοτε λογαριασμό και μόνο. Για την
επέμβαση στα περιεχόμενά του αρκεί να το ανοίξουμε με κάποιον text editor. Ένας δημοφιλής κι
εύχρηστος editor είναι το nano. Αν υπάρχει στο σύστημά μας, αρκεί να δώσουμε
nano ~/home.bashrc
LinuxshellBASH
© 2019 Parabing Creations
> forsíða
• /var/log/messages
• texts
Ανακατεύθυνση
Για την είσοδο (command line).δεδομένα προς επεξεργασία) και την έξοδο (command line).δεδομένα που προκύπτουν από την
επεξεργασία) των προγραμμάτων στο Linux, χρησιμοποιούνται οι λεγόμενες ροές χαρακτήρων.
Πρόκειται για τα λεγόμενα character streams, για τα οποία όσοι έχουν ασχοληθεί με τη γλώσσα C
είναι βέβαιο ότι έχουν ακούσει. Όμως τα character streams είναι ο μηχανισμός που χρησιμοποιείται
από το σύστημα και για το χειρισμό των αρχείων. Ακριβώς γι’ αυτό, τα δεδομένα εισόδου κι εξόδου
ενός προγράμματος αντιμετωπίζονται από το Linux ως ένα είδος αρχείου. Ο ενιαίος τρόπος
αντιμετώπισης αρχείων και δεδομένων που δέχεται ή παράγει ένα πρόγραμμα, επιτρέπει την
υλοποίηση μιας σπουδαίας δυνατότητας. Ο λόγος γίνεται για τη λεγόμενη ανακατεύθυνση
(command line).redirection). Πριν επεκταθούμε στη χρησιμότητά της, όμως, πρέπει να αναφέρουμε μερικά ακόμα
στοιχεία. Η καθιερωμένη ροή που χρησιμοποιείται για την είσοδο δεδομένων στα προγράμματα
θεωρείται το πληκτρολόγιο κι ονομάζεται standard input. Αντίστοιχα, η καθιερωμένη ροή για την
έξοδο δεδομένων από τα προγράμματα είναι η οθόνη κι ονομάζεται standard output. Τέλος, υπάρχει
και μία ακόμα ροή που χρησιμοποιείται ως έξοδος κι ονομάζεται standard error – νομίζουμε ότι
καταλαβαίνετε ποια μηνύματα πηγαίνουν εκεί. Συνήθως, η εν λόγω ροή κατευθύνει τα δεδομένα
στην οθόνη, όπως συμβαίνει και με την standard output. Ας επιστρέψουμε τώρα στην έννοια της
ανακατεύθυνσης.
Η ανακατεύθυνση παρέχει τη δυνατότητα αποστολής οποιασδήποτε εκ των καθιερωμένων ροών
εισόδου κι εξόδου, σε κάποιο αρχείο. Έτσι, μπορούμε για παράδειγμα να στείλουμε την έξοδο από
την εκτέλεση ενός προγράμματος σε ένα αρχείο ή να τροφοδοτήσουμε την είσοδο ενός
προγράμματος με τα περιεχόμενα ενός αρχείου. Για την ανακατεύθυνση της εξόδου χρησιμοποιείται
ο χαρακτήρας >, ενώ για την ανακατεύθυνση της εισόδου χρησιμοποιείται ο χαρακτήρας <. Βέβαια,
πρέπει να σημειώσουμε ότι η ανακατεύθυνση της εισόδου δεν χρησιμοποιείται συχνά. Βλέπετε, τα
περισσότερα προγράμματα δέχονται ως παράμετρο κάποιο αρχείο, από το οποίο αντλούν τα προς
επεξεργασία δεδομένα. Επομένως, η ανάγκη για ανακατεύθυνση της εισόδου προκύπτει σπάνια.
Πριν περάσουμε σε μερικά χαρακτηριστικά παραδείγματα, πρέπει να αναφέρουμε κάτι ακόμα.
Μερικές φορές, όταν ανακατευθύνουμε την έξοδο ενός προγράμματος, απαιτείται να
προσδιορίσουμε το είδος της εξόδου (command line).standard ή error) που θέλουμε να στείλουμε στον επιθυμητό
προορισμό. Για το λόγο αυτό επιστρατεύονται δύο αριθμητικά ψηφία, που τοποθετούνται ακριβώς
πριν από τον χαρακτήρα >. Έτσι, ο συνδυασμός 1> σημαίνει την ανακατεύθυνση του standard
output, ενώ ο συνδυασμός 2> σημαίνει την ανακατεύθυνση του standard error. Βέβαια, όταν
κάποιος θέλει να αναφερθεί στο standard output, μπορεί απλά να χρησιμοποιήσει το > κι όχι το 1>.
Ας δούμε τώρα τα παραδείγματα που υποσχεθήκαμε.
cat my_notes > backup
Τα περιεχόμενα του αρχείου my_notes δεν θα τυπωθούν στην οθόνη, αλλά θα πάνε στο αρχείο
backup.
ls -lh > dir_listing
Αυτή τη φορά τα μηνύματα λάθους που παράγονται από το some_program θα εξαφανιστούν και
δεν θα τα βρούμε ποτέ και πουθενά. Το device file ονόματι null αποτελεί κάτι σαν την καταβόθρα
του συστήματος. Οτιδήποτε στείλουμε εκεί, χάνεται για πάντα.
Μετά από τα παραπάνω παραδείγματα οφείλουμε να σταθούμε σε μια σημαντική λεπτομέρεια. Αν
τα αρχεία προς τα οποία γίνεται η ανακατεύθυνση δεν υπάρχουν, το σύστημα θα φροντίσει να τα
δημιουργήσει αυτόματα. Αν όμως υπάρχουν, τότε τα περιεχόμενά τους θα αντικατασταθούν και στη
θέση τους θα τοποθετηθούν τα νέα. Για να κατανοήσουμε τον κίνδυνο που κρύβεται εδώ, θεωρείστε
ότι έχουμε ένα μεγάλο αρχείο ονόματι moan (command line).από το “born again” (γεννημένος ξανά). Κάπου εδώ θα mother of all notes”), στο οποίο κρατάμε τις
σημειώσεις από τη δουλειά ενός έτους. Υποθέστε τώρα ότι δίνουμε το ακόλουθο:
cat some_notes > moan
Αυτό ήταν. Μπορούμε να κοπανήσουμε το κεφάλι μας στον τοίχο, like, ελεύθερα. Το πολύτιμο
περιεχόμενό του moan αντικαταστάθηκε από το περιεχόμενο του αρχείου some_notes. Για την
αποφυγή τέτοιων περιπτώσεων το κέλυφος προσφέρει μια ενδιαφέρουσα δυνατότητα, η οποία
μπορεί να μας γλιτώσει από πολλούς μπελάδες. Αναφερόμαστε στη λεγόμενη διπλή
ανακατεύθυνση. Η διπλή ανακατεύθυνση συμπεριφέρεται όπως και η απλή με τη σημαντική όμως
διαφορά ότι δεν αντικαθιστά τα παλιά δεδομένα των αρχείων, αλλά προσθέτει στο τέλος τους τα
νέα. Η διπλή ανακατεύθυνση συμβολίζεται με τους χαρακτήρες >> και για τη χρήση της αρκεί να
ακολουθήσουμε την ίδια σύνταξη. Επομένως, στην περίπτωση του τελευταίου παραδείγματος, για
να μη χάσουμε τα δεδομένα του moan θα έπρεπε να γράψουμε κάτι τέτοιο:
cat some_notes >> moan
Διασωλήνωση
Η ανακατεύθυνση είναι ιδιαίτερα εξυπηρετική όποτε θέλουμε να κρατήσουμε την έξοδο κάποιων
προγραμμάτων σε αρχεία ή όταν απλά θέλουμε να την εξαφανίσουμε (command line).βλέπε /homedev/homenull). Άραγε,
γίνεται να αξιοποιηθεί η έξοδος ενός προγράμματος πιο δημιουργικά; Η απάντηση είναι καταφατική
και η λύση δίνεται από τη λεγόμενη διασωλήνωση (command line).pipelining). Στην ουσία, πρόκειται για έναν
μηχανισμό του λειτουργικού συστήματος που χρησιμοποιείται για την επικοινωνία μεταξύ των
εφαρμογών (command line).IPC, Inter-Process Communication). Με τη βοήθεια της διασωλήνωσης, λοιπόν,
μπορούμε να πάρουμε την έξοδο ενός προγράμματος και να τη χρησιμοποιήσουμε ως είσοδο για
κάποιο άλλο. Έτσι, μπορούμε κατά κάποιον τρόπο να συνδέσουμε μεταξύ τους πολλά απλά
εργαλεία και να σχηματίσουμε κάποιο που θα συνδυάζει τις ικανότητες των επιμέρους. Ο
χαρακτήρας που χρησιμοποιείται για τη διασωλήνωση είναι ο | (command line).pipe). Ας δούμε μερικά
παραδείγματα.
ls -ld * | wc -l
Το πρόγραμμα wc (command line).word count) μπορεί, μεταξύ άλλων, να καταμετρά λέξεις, γραμμές και
χαρακτήρες. Με την παράμετρο -l μετράει τις γραμμές. Στο συγκεκριμένο παράδειγμα, η έξοδος
από την εκτέλεση του ls -ld * θα δοθεί ως είσοδος στο πρόγραμμα wc. Έτσι, αυτό που θα
πάρουμε από την εκτέλεση του παραπάνω είναι το πλήθος αρχείων του τρέχοντος καταλόγου.
ls -lR | less
Το προγραμματάκι less χρησιμοποιείται για την προβολή των περιεχομένων ενός αρχείου. Σε
αντίθεση με το cat, όμως, δεν αραδιάζει όλες τις γραμμές του αρχείου. Αντίθετα, εμφανίζει μόνον
όσες χωράνε στην οθόνη. Την ίδια στιγμή επιτρέπει στο χρήστη να χρησιμοποιήσει τα βελάκια για
να μετακινηθεί προς τα πάνω ή προς κάτω, ώστε να μελετήσει τα περιεχόμενα του αρχείου με
άνεση. Για να τερματιστεί η λειτουργία του less αρκεί ένα πάτημα του πλήκτρου [Q].Q].]. Όπως
αντιλαμβάνεστε, στέλνοντας την έξοδο του ls στο less (command line).με τη βοήθεια της διασωλήνωσης)
μπορούμε να εξετάσουμε την ενδεχομένως μακροσκελή λίστα αρχείων ενός καταλόγου με την
ησυχία μας.
ps -aux | grep pvar > pvar_processes
Το προγραμματάκι ps εμφανίζει πληροφορίες σχετικές με τις διεργασίες που εκτελούνται στο
σύστημα. Με τις παραμέτρους aux εμφανίζει όλες τις εκτελούμενες διεργασίες και, μεταξύ άλλων,
δίπλα από κάθε μία εμφανίζει το όνομα του αντίστοιχου χρήστη. Όσο για το grep, αυτό αποτελεί
ένα εξελιγμένο και πανίσχυρο φίλτρο. Στην είσοδό του δέχεται τα περιεχόμενα ενός αρχείου και
στην έξοδό του εμφανίζει τις γραμμές που ικανοποιούν το κριτήριο αναζήτησης που έχουμε
προσδιορίσει. Στο παράδειγμα που εξετάζουμε, το grep θα επιστρέψει όσες γραμμές περιέχουν τη
λέξη pvar. Οπότε, τροφοδοτώντας το με την έξοδο του ps θα λάβουμε μια λίστα με τις διεργασίες
που εκτελεί ο χρήστης pvar. Τέλος, με τη βοήθεια της ανακατεύθυνσης οι σχετικές πληροφορίες
θα τοποθετηθούν στο αρχείο ονόματι pvar_processes.
Χρησιμοποιώντας τους χαρακτήρες &&, το κέλυφος θα προχωρήσει στην εκτέλεση του program2
μόνον αν η εκτέλεση του program1 ολοκληρωθεί με επιτυχία.
program1 || program2
Με τους χαρακτήρες ||, το κέλυφος θα προχωρήσει στην εκτέλεση του program2 μόνον εφόσον
η εκτέλεση του program1 απέτυχε.
program1 ; program2
Η χρήση του ελληνικού ερωτηματικού θα πρέπει να σας είναι γνώριμη από την ενασχόληση με τα
aliases. Χρησιμοποιώντας το ελληνικό ερωτηματικό, το κέλυφος θα προχωρήσει στην εκτέλεση του
program2 ανεξάρτητα από το αν πέτυχε η εκτέλεση του program1 ή όχι.
Τέλος, πρέπει να αναφέρουμε ότι με τη βοήθεια των παραπάνω μεθόδων μπορούμε να εκτελέσουμε
και παραπάνω από δύο προγράμματα. Για παράδειγμα, θα μπορούσαμε να δώσουμε κάτι τέτοιο:
program1 && program2 && program3 && ...
Επίσης, μπορούμε αν θέλουμε να συνδυάσουμε και τις τρεις μεθόδους, π.χ., πληκτρολογώντας κάτι
τέτοιο:
program1 && program2 || program3 && program4 ; program5 && ...
Βέβαια, αν αποφασίσουμε να εκτελέσουμε κάτι τόσο σύνθετο θα πρέπει να έχουμε κατά νου ότι η
τελική έκβαση δεν είναι εύκολο να προβλεφθεί. Στο συγκεκριμένο παράδειγμα, το program2 θα
εκτελεστεί αν προηγουμένως εκτελεστεί με επιτυχία το program1. Επίσης, αν τουλάχιστον ένα
από τα program1 και program2 απέτυχε να εκτελεστεί, το κέλυφος θα προσπαθήσει να
εκτελέσει το program3. Αν τα καταφέρει, θα προχωρήσει στην εκτέλεση του program4. Μετά
από αυτά, ανεξάρτητα από το αν και ποιο πρόγραμμα εκτελέστηκε μέχρι εκείνη τη στιγμή, το
κέλυφος θα εκτελέσει το program5 κ.ο.κ. Μπερδευτήκατε; Όταν προσπαθούμε να αναλύσουμε
τόσο σύνθετες εκφράσεις, πρέπει να έχουμε υπόψη ότι οι χαρακτήρες && έχουν προτεραιότητα
έναντι των ||. Τέλος, μπορούμε να φανταζόμαστε το ελληνικό ερωτηματικό σαν την τελεία που
χωρίζει δύο προτάσεις.
Διαχείριση εργασιών
Όπως κάθε σύγχρονο λειτουργικό, έτσι και το Linux είναι ένα πολυδιεργαστικό σύστημα. Με απλά
λόγια, μπορεί να κάνει πολλά πράγματα ταυτόχρονα. Όμως πόσο ωφέλιμη θα ήταν αυτή η
δυνατότητα, αν κάθε διεργασία καταλάμβανε μια ολόκληρη κονσόλα; Θα μπορούσαμε βέβαια να
λύσουμε το πρόβλημα με το να συνδεθούμε σε πολλές κονσόλες ταυτόχρονα. Όμως αυτή η
πρακτική θα σπαταλούσε άδικα πόρους του συστήματος και φυσικά δεν θα ήταν καθόλου κομψή.
Ευτυχώς, το συγκεκριμένο ζήτημα μπορεί να αντιμετωπιστεί με πολύ πιο έξυπνους κι αποδοτικούς
τρόπους.
Ας υποθέσουμε ότι θέλουμε να εκτελέσουμε το πρόγραμμα mpg123, ώστε να αποκωδικοποιήσουμε
ένα αρχείο MP3 και να στείλουμε το αποτέλεσμα σε ένα άλλο αρχείο. Με αυτόν τον τρόπο, θα
μετατρέπαμε το συγκεκριμένο αρχείο MP3 σε WAV. Κάνοντας κάτι τέτοιο η κονσόλα θα παραμείνει
κατειλημμένη έως ότου ολοκληρωθεί η επεξεργασία του αρχείου MP3. Υπάρχει άραγε τρόπος το
κέλυφος να είναι διαθέσιμο και κατά τη διάρκεια της μετατροπής; Φυσικά και υπάρχει, αρκεί να
χρησιμοποιήσουμε τον ειδικό χαρακτήρα &. Συγκεκριμένα, γράφουμε mpg123, δίνουμε τις
κατάλληλες παραμέτρους και στο τέλος της γραμμής βάζουμε κι ένα &. Εν ολίγοις, δίνουμε κάτι
τέτοιο:
mpg123 –s my_song.mp3 > my_song.wav &
Όταν χρησιμοποιούμε το χαρακτήρα &, το σύστημα τοποθετεί την εκτέλεση του εκάστοτε
προγράμματος στο λεγόμενο υπόβαθρο (command line).background). Έτσι, η κονσόλα παραμένει διαθέσιμη για
την εκτέλεση οποιουδήποτε άλλου προγράμματος θέλουμε. Μια εναλλακτική μέθοδος για να
πετύχουμε το ίδιο αποτέλεσμα είναι να καλέσουμε το επιθυμητό πρόγραμμα κανονικά, κι όταν η
εκτέλεση ξεκινήσει να πατήσουμε το συνδυασμό πλήκτρων [Q].CTR]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, τοL+Z]. Με αυτόν τον τρόπο, το ]. Με αυτόν τον τρόπο, το
συγκεκριμένο πρόγραμμα θα πάψει προσωρινά να εκτελείται (command line).suspend) κι εμείς θα επιστρέψουμε
στην κονσόλα. Για να συνεχιστεί η λειτουργία του προγράμματος χωρίς να δεσμευτεί η κονσόλα,
αρκεί να τρέξουμε το πρόγραμμα bg (command line).από το background). Διαφορετικά, αν αλλάζαμε γνώμη κι
επιθυμούσαμε την κανονική εκτέλεση του προγράμματος (command line).επιτρέποντάς του να καταλάβει την
κονσόλα), θα αρκούσε να τρέξουμε το πρόγραμμα fg (command line).από το foreground). Χρησιμοποιώντας αυτή
τη μέθοδο, σύντομα θα καταλήξουμε σε μία κατάσταση κατά την οποία εκτελούνται πολλά
προγράμματα στο υπόβαθρο. Σε αυτή την περίπτωση, είναι πολύ πιθανό να χρειαστούμε τη βοήθεια
του προγράμματος jobs. Εκτελώντας το, εμφανίζεται μια λίστα με όλα τα προγράμματα που έχουν
τοποθετηθεί στο υπόβαθρο. Μάλιστα, σε κάθε γραμμή και πριν από το όνομα του εκάστοτε
προγράμματος εμφανίζεται κι ένας αριθμός. Για να επαναφέρουμε στο προσκήνιο τη λειτουργία
κάποιου προγράμματος, αρκεί να δώσουμε τον αντίστοιχο αριθμό ως παράμετρο στο fg. Κάντε
μερικές δοκιμές και δείτε.
Καθολικός έλεγχος
Ακόμη και στα πιο στιβαρά λειτουργικά συστήματα, το φαινόμενο του κρεμάσματος μιας
εφαρμογής δεν εκλείπει εντελώς. Άλλωστε, τις περισσότερες φορές αυτό οφείλεται σε ζητήματα
που σχετίζονται με την εκάστοτε εφαρμογή κι όχι με το λειτουργικό. Σε αυτές τις περιπτώσεις, για
τη διαχείριση των εργασιών απαιτούνται πιο δραστικά μέτρα. Για παράδειγμα, μπορούμε να
χρησιμοποιήσουμε το πρόγραμμα killall. Δίνοντας το όνομα ενός προγράμματος ως παράμετρο
στο killall, το σύστημα θα τερματίσει κάθε στιγμιότυπο του αρχικού προγράμματος. Όμως
αυτό ενδέχεται να μην είναι επιθυμητό. Αν, για παράδειγμα, είχαμε εκτελέσει δύο φορές το
πρόγραμμα mpg123 και το ένα στιγμιότυπο είχε κολλήσει, θα ήταν ανόητο να τερματίσουμε και τα
δύο. Κάπου εδώ παρουσιάζεται η αναγκαιότητα ενός προγράμματος σαν το ps (command line).από το process
tree). Με τη βοήθειά του, όπως αναφέραμε και νωρίτερα, μπορούμε να δούμε όλες τις διεργασίες
που εκτελούνται, καθώς και πολλές σχετικές πληροφορίες. Εκτελώντας το ps με παράμετρο το ux,
εμφανίζονται αποκλειστικά οι εφαρμογές που εκτελούνται από το λογαριασμό μας. Έτσι, δεν έχουμε
παρά να εντοπίσουμε το στιγμιότυπο του mpg123 που έχει κολλήσει και να σημειώσουμε το PID
(command line).Process ID) που του έχει αντιστοιχίσει το σύστημα. Στη συνέχεια, αρκεί να εκτελέσουμε το
πρόγραμμα kill (command line).όχι το killall) και να του δώσουμε ως παράμετρο το συγκεκριμένο PID.
Παρεμπιπτόντως, σε περιπτώσεις που η κολλημένη εφαρμογή δεν τερματίζεται με αυτόν τον τρόπο,
μπορούμε να της φερθούμε πιο σκληρά. Αφού πληροφορηθούμε το αντίστοιχο PID, μπορούμε να
δώσουμε κάτι τέτοιο:
kill -9 αντίστοιχο_PID
Προγραμματισμός εργασιών
Τώρα πια έχουμε μάθει αρκετούς τρόπους για να σταματήσουμε ένα πρόγραμμα ή απλά να το
στείλουμε στο υπόβαθρο. Αντίθετα, για την εκκίνηση ενός προγράμματος γνωρίζουμε μόνο έναν
τρόπο: Την εκτέλεσή του από τη γραμμή εντολών. Φυσικά, η χειροκίνητη εκτέλεση ενός
προγράμματος επαρκεί για τις περισσότερες καθημερινές ασχολίες. Ωστόσο, καθώς αυξάνει η
εξοικείωσή μας με το Linux και τις δυνατότητές του, θα προκύψει μια νέα ανάγκη: Αναφερόμαστε σε
εκείνη της αυτόματης εκτέλεσης προγραμμάτων, σε προκαθορισμένες χρονικές στιγμές. Για το
σκοπό αυτό, το σύστημα παρέχει μια υπηρεσία που επιτρέπει στους χρήστες να προγραμματίζουν με
ακρίβεια την εκτέλεση οποιασδήποτε εφαρμογής. Προκειμένου να εκμεταλλευτούμε αυτή την
υπηρεσία, θα πρέπει να χρησιμοποιήσουμε το πρόγραμμα crontab. Συγκεκριμένα, θα ξεκινήσουμε
πληκτρολογώντας
crontab –e
Με αυτόν τον τρόπο θα εκτελεστεί ο default text editor του συστήματος. Στο Ubuntu, πάντως, την
πρώτη φορά που θα εκτελεστεί το crontab δεν θα ξεκινήσει αυτόματα κάποιος editor, αλλά θα
ερωτηθούμε για τον ποιον προτιμάμε. Αν σας ενδιαφέρει, εμείς αγαπάμε το nano. Όταν ανοίξει ο
text editor, δεν θα δούμε τίποτε απολύτως. Αυτό είναι φυσιολογικό –ειδικά για την πρώτη φορά που
θα εκτελέσουμε το crontab– και δεν πρέπει να μας ανησυχήσει. Εκεί, για κάθε εφαρμογή που
θέλουμε να αυτοματοποιήσουμε, θα πρέπει να εισάγουμε μια γραμμή της ακόλουθης μορφής:
j k l m n όνομα_εφαρμογής
Το j αναφέρεται στα λεπτά (command line).0-59), το k στην ώρα (command line).0-23), το l στην ημέρα του μήνα (command line).1-31), το m
στο μήνα (command line).1-12) και το n στην ημέρα της εβδομάδας (command line).0-6). Σημειώστε ότι για κάθε πρόγραμμα δεν
αρκεί μόνο το όνομά του, αλλά και η θέση του στους καταλόγους του συστήματος. Γι’ αυτό, πριν
ακόμη δώσουμε crontab -e καλό θα ήταν να τρέξουμε το which με παράμετρο το όνομα του
επιθυμητού προγράμματος, ώστε να πληροφορηθούμε τη θέση του. Επίσης, όταν κάποιο από τα
μεγέθη που προσδιορίζουν το χρόνο εκτέλεσης δεν μας ενδιαφέρει, θα πρέπει να τοποθετήσουμε
στη θέση του έναν αστερίσκο. Αφού βάλουμε όσες γραμμές θέλουμε, αρκεί να πατήσουμε το
συνδυασμό πλήκτρων CTR]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, τοL+O για να αποθηκευτούν οι προσθήκες μας. Ακολούθως, δεν έχουμε
παρά να πατήσουμε το συνδυασμό πλήκτρων [Q].CTR]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, τοL+Χ] για να βγούμε από τον editor. Από εκείνη
τη στιγμή και μετά, τα προγράμματα που εισαγάγαμε προηγουμένως θα αρχίσουν να εκτελούνται
αυτόματα, στους χρόνους που προσδιορίσαμε. Αν σας μπέρδεψε η περιγραφή που μόλις κάναμε,
δείτε τα ακόλουθα παραδείγματα και θα καταλάβετε αμέσως πόσο απλό και ισχυρό είναι το
crontab.
30 23 * * 0 /homeusr/homebin/homemy_program
Το my_program θα εκτελείται ανά τρεις μήνες, στις έξι το απόγευμα κάθε Κυριακής του
συγκεκριμένου μήνα.
30 8 1 */home1 * /homeusr/homebin/homemy_program
Μ’ αυτόν τον τρόπο το ενεργό screen session θα επιστρέψει στο προσκήνιο και θα βρεθούμε στο
περιβάλλον εντός του οποίου είχαμε τρέξει το πρόγραμμα. Πριν εμβαθύνουμε στη χρήση του
screen, σημειώστε ότι για τον τερματισμό του screen session θα πρέπει είτε να γράψουμε exit
είτε να πατήσουμε το συνδυασμό πλήκτρων [Q].CTR]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, τοL+D].
Έτσι, θα ξεκινήσει ένα screen session με το όνομα port_scanning. Αργότερα, όταν χρειαστεί να
επανασυνδεθούμε σε αυτό, θα πληκτρολογήσουμε:
screen -r port_scanning
Αν ξεχάσουμε να βαφτίσουμε κάποιο screen session κατά την εκκίνησή του, μπορούμε να το
βαφτίσουμε αργότερα. Ας υποθέσουμε, λοιπόν, ότι έχουμε ξεκινήσει ένα session και δεν έχουμε
κάνει ακόμα detach. Για να το βαφτίσουμε αρκεί να πατήσουμε το συνδυασμό [Q].CTR]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, τοL+A] και στη
συνέχεια να πιέσουμε το πλήκτρο με την άνω-κάτω τελεία [Q].:]. Κατ’ αυτό τον τρόπο, στην τελευταία
γραμμή του screen session θα εμφανιστεί ο εν λόγω χαρακτήρας και το πρόγραμμα θα περιμένει να
δώσουμε κάποια εντολή. Όπως αντιλαμβάνεστε, οι εντολές που μπορούμε να δώσουμε εκεί είναι
σχετικά περιορισμένες και πρόκειται για “born again” (γεννημένος ξανά). Κάπου εδώ θα εσωτερικές” εντολές του screen: εντολές που
αναγνωρίζει μόνο το screen και οι οποίες αφορούν στη λειτουργία του. Τελικά, για να
βαφτίσουμε το screen session πρέπει να γράψουμε τη λέξη title, ακολούθως το επιθυμητό όνομα
και να πατήσουμε το [Q].ENTER]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, το].
~Spir@l Evolut10n
LinuxshellBASH
© 2019 Parabing Creations
> forsíða
• /var/log/messages
• texts
Με αυτό τον τρόπο εμείς θα μπορούμε να το εκτελούμε κανονικά, ενώ οι υπόλοιποι χρήστες θα
μπορούν μόνο να το διαβάζουν. Τέλος, σημειώστε ότι για την εκτέλεση ενός σεναρίου πρέπει να
δηλώνουμε στο κέλυφος τη θέση του. Έτσι, όταν βρισκόμαστε στον κατάλογο όπου βρίσκεται το
σενάριό μας, αρκεί να δίνουμε κάτι τέτοιο:
./homemy_super_script
Οι χαρακτήρες ./home συμβολίζουν τον τρέχοντα κατάλογο. Άλλο παράδειγμα: Αν το σκριπτάκι μας
είναι αποθηκευμένο στον κατάλογο ~/homescripts ενώ εμείς βρισκόμαστε κάπου αλλού, θα πρέπει
να γράφουμε:
~/homescripts/homemy_super_script
Και μετά από τις εισαγωγές, μπορούμε να περάσουμε στα παραδείγματα. Σημειώστε ότι σε
ορισμένες περιπτώσεις δεν θα βρείτε ολόκληρο τον κώδικα των σεναρίων, αλλά μόνο τα
αποσπάσματα που θεωρούμε περισσότερο ενδιαφέροντα. Σε αυτές τις περιπτώσεις θα μπορείτε να
κατεβάσετε τον κώδικα από τα σχετικά links, στην αρχή της εκάστοτε ενότητας.
Κατ’ αυτόν τον τρόπο, το αρχείο που προσδιορίζετε μεταφέρεται σε έναν κρυφό κατάλογο στο
home directory του χρήστη, ονόματι .my-trash. Σημειώστε ότι αν ο συγκεκριμένος κατάλογος
δεν υπάρχει, το σκριπτάκι μας θα φροντίσει να τον δημιουργήσει. Στην περίπτωση που αργότερα
μετανιώσετε για τη διαγραφή του αρχείου, αρκεί να μεταβείτε στον κατάλογο .my_trash και να
ρίξετε μια ματιά τριγύρω. Με αυτό το σενάριο θα μπορούσαμε να αντικαταστήσουμε το πρόγραμμα
rm, τουλάχιστον όταν επιτελούμε κρίσιμες εργασίες και χειριζόμαστε πολύτιμα αρχεία. Κάτι τέτοιο
θα μπορούσε να γίνει με το κατάλληλο alias. Για παράδειγμα, αν έχουμε αποθηκεύσει το
delete.sh στον κατάλογο ~/homemy_scripts, θα μπορούσαμε να ορίσουμε το ακόλουθο alias…
alias del='~/homemy_scripts/homedelete.sh'
Με αυτόν τον τρόπο το cron_del.sh θα εκτελείται κάθε Κυριακή, στις δέκα το πρωί.
Αυτή η γραμμή δηλώνει το διερμηνευτή (command line).interpreter) που θα αναλάβει την εκτέλεση του σεναρίου.
Το κέλυφος BASH δεν είναι ο μοναδικός υποψήφιος interpreter. Για παράδειγμα, ένα σενάριο
κελύφους θα μπορούσε να γραφεί σε Perl ή σε Python. Σε αυτές τις περιπτώσεις η πρώτη γραμμή θα
ήταν κάπως έτσι…
#!/homebin/homeperl
…ή κάπως έτσι:
#!/homebin/homepython
Όπως αναφέραμε προηγουμένως, η γλώσσα του BASH διαθέτει όλες τις παραδοσιακές δομές
ελέγχου που προσφέρουν οι γλώσσες προγραμματισμού. Στο συγκεκριμένο απόκομμα βλέπουμε ένα
παράδειγμα χρήσης της δομής ελέγχου if...then...else. Πρόκειται για την απλούστερη
δομή ελέγχου και διακλάδωσης. Σε αυτό το κομμάτι, το script ελέγχει για την ύπαρξη του αρχείου
που δώσαμε ως παράμετρο. Αν αποτύχει να εντοπίσει τον αρχείο, ενημερώνει το χρήστη και
τερματίζει τη λειτουργία του. Διαφορετικά ενημερώνει και πάλι το χρήστη, αλλά συνεχίζει κανονικά
την εκτέλεσή του αφού προηγουμένως τερματίσει τη δομή if...then...else. Ο τερματισμός
αυτής της δομής σηματοδοτείται με το fi. Ας δούμε τώρα κι ένα απόσπασμα από το σενάριο
unpack.sh:
case $filetype in
"bzip2compressed" )
echo "The file is compressed with bzip2. Decompressing..."
bzip2 -d $filename
;;
...
* )
echo "The file is compressed (or packed) with an unknown tool"
echo "or it is not compressed at all..."
echo -n "Filetype: "`file $filename | awk '{ print $2 }'`
echo " "`file $filename | awk '{ print $3 }'`
;;
esac
Με τη σύνταξη που φαίνεται στη δεύτερη γραμμή, το πρόγραμμα cat θα τυπώσει όλα όσα
ακολουθούν στο σενάριό μας, μέχρι τη γραμμή που περιέχει τη λέξη REPORTSTART. Η εν λόγω
λέξη δεν αποτελεί κάποια ειδική παράμετρο και στη θέση της θα μπορούσαμε να χρησιμοποιήσουμε
οποιαδήποτε άλλη. Έτσι, με τις πρώτες γραμμές κώδικα το script ορίζει το όνομα της σελίδας και
τυπώνει τον τίτλο της.
Βασικά στοιχεία. Σε ποιο μηχάνημα εκτελείται το script και ποιος πυρήνας χρησιμοποιείται; Οι
επόμενες γραμμές φροντίζουν για την εκτύπωση αυτών των δύο στοιχείων.
echo "<p><b>System name: </homeb>"
hostname
echo "</homep>"
Προφανώς, το πρόγραμμα hostname τυπώνει το όνομα του μηχανήματος, ενώ το uname (command line).με τις
συγκεκριμένες παραμέτρους) εμφανίζει την έκδοση του πυρήνα που χρησιμοποιείται στο σύστημα.
Σε παρόμοιες ενότητες θα μπορούσαμε να αξιοποιήσουμε πολλά ακόμα προγράμματα του
κελύφους. Για παράδειγμα, θα μπορούσαμε να χρησιμοποιήσουμε το uptime, ώστε να εμφανίζεται
κι ο συνολικός χρόνος λειτουργίας του συστήματος μετά την τελευταία εκκίνηση.
Επεξεργαστής και μνήμη. Τώρα που είδατε το όνομα του μηχανήματος και την έκδοση του πυρήνα,
μπορούμε να περάσουμε σε πληροφορίες που αφορούν στο υλικό του υπολογιστή. Συγκεκριμένα,
το script θα τυπώσει το μοντέλο του επεξεργαστή, το μέγεθος της μνήμης R]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, τοAM, καθώς και την
έκταση του χώρου SWAP.
cat << HARDWAREINFO
<p><hr></homehr></homep>
<p><b>Hardware information: </homeb></homep>
<dl><dd><small><pre>
HARDWAREINFO
echo "</homepre></homesmall></homedd></homedl>"
Όπως και στο πρώτο τμήμα που εξετάσαμε, για την εκτύπωση αρκετών διαδοχικών γραμμών
HTML χρησιμοποιείται το κολπάκι με το πρόγραμμα cat. Κατ’ αυτόν τον τρόπο, τυπώνεται μία
επικεφαλίδα για την ενότητα (command line).hardware information) ενώ ταυτόχρονα ξεκινά μια περιοχή
(command line).<dl><dd><small>...) στην οποία θα εμφανίζονται τα πάντα με μικρότερο μέγεθος και
μετατοπισμένα κατά μία στήλη (command line).ένα TAB) δεξιά. Αμέσως μετά, με τη βοήθεια του grep το
σκριπτάκι φιλτράρει τις ζητούμενες πληροφορίες από τα αρχεία /homeproc/homecpuinfo και
/homeproc/homememinfo. Σε αυτό το τμήμα, πέρα από τα δύο αρχεία του συστήματος ενδιαφέρον έχει και
η χρήση του echo. Με την παράμετρο -e ενεργοποιούνται οι ειδικές αλληλουχίες χαρακτήρων
(command line).sequences) όπως είναι η \t και η \c. Η πρώτη επιβάλει την εκτύπωση ενός χαρακτήρα TAB και η
δεύτερη αποτρέπει την εκτύπωση του χαρακτήρα ENTER]. Αν αντί του [ENTER] πατήσουμε πάλι το πάνω βελάκι, το. Έτσι, οι πληροφορίες που συλλέγει το
grep σε κάθε περίπτωση προβάλλονται δίπλα από τα μηνύματα που εμφανίζονται με το echo κι
όχι στην από κάτω γραμμή.
Περισσότερα στοιχεία
Στα τμήματα κώδικα που ακολουθούν χρησιμοποιούνται τα τεχνάσματα που συναντήσαμε και
προηγουμένως. Για αυτό το λόγο, θα περιοριστούμε σε μία σύντομη περιγραφή των πληροφοριών
που συλλέγονται.
cat << DFINFO
<p><hr></homehr></homep>
<p><b>Mounted volumes: </homeb></homep>
<dl><dd><small><pre>
DFINFO
df -hT
echo "</homepre></homesmall></homedd></homedl>"
Σε αυτή την περιοχή χρησιμοποιείται το εργαλείο df, για την προβολή όλων των προσαρτημένων
κατατμήσεων. Η παράμετρος T επιβάλλει την προβολή του είδους κάθε filesystem, ενώ η
παράμετρος h καθορίζει σαν μονάδες μέτρησης τα TiB, GiB, MiB και KiB (command line).η αναφορά μας θέλουμε
να είναι ευανάγνωστη).
cat << SYSCRON1
<p><hr></homehr></homep>
<p><b>Scheduled tasks: </homeb><tt>(system wide)</homett></homep>
<dl><dd> <small><pre>
SYSCRON1
cat /homeetc/homecrontab
echo "</homepre></homesmall></homedd></homedl>"
echo "</homepre></homesmall></homedd></homedl>"
Σε αυτή την περιοχή το σκριπτάκι αποκτά ιδιαίτερο ενδιαφέρον. Μετά την εκτύπωση των
απαραίτητων γραμμών HTML, ορίζονται δύο μεταβλητές. Στη μία αποθηκεύεται η χθεσινή
ημερομηνία και στην άλλη το όνομα του μήνα. Οι τιμές των δύο μεταβλητών χρησιμοποιούνται ως
φίλτρο για το grep. Έτσι, καταφέρνουμε να απομονώσουμε όλα τα μηνύματα από το γενικό αρχείο
καταγραφής του συστήματος, που τυπώθηκαν την προηγούμενη μέρα. Τα εν λόγω μηνύματα
αποθηκεύονται προσωρινά στο αρχείο /hometmp/home.my_tmp. Στη συνέχεια, με τη βοήθεια του grep
και του εργαλείου wc, μετράμε πόσες φορές εμφανίζονται ορισμένα μηνύματα του SSH daemon.
Έτσι, το script υπολογίζει και προβάλλει το πλήθος των πετυχημένων συνδέσεων στο σύστημα,
καθώς και το πλήθος των αποτυχημένων.
Τερματισμός
Για να ολοκληρωθεί η σελίδα HTML χωρίς σφάλματα, πρέπει να τερματιστούν (command line).να κλείσουν) τα
tags που ανοίξαμε στην αρχή του script. Ακριβώς αυτό πετυχαίνουν οι ακόλουθες γραμμές:
cat << REPORTEND
<p><hr size=5></homehr></homep>
</homebody>
</homehtml>
REPORTEND
Το σενάριο που εξετάσαμε συλλέγει μερικές (command line).βασικές) πληροφορίες για το σύστημα και τις
χρησιμοποιεί για να δημιουργήσει τον κώδικα μιας σελίδας HTML. Αναρωτιέστε πώς θα πάρουμε
αυτόν τον κώδικα σε ένα αρχείο; Αν υποθέσουμε ότι το σενάριο ονομάζεται make_report.sh
καθώς και ότι βρισκόμαστε στον κατάλογο όπου είναι αποθηκευμένο, αρκεί να δώσουμε κάτι σαν
αυτό:
./homemake_report > ~/homereport_file.html
Πλέον, δεν έχουμε παρά να ανοίξουμε το αρχείο report_file.html με κάποιον web browser
και να θαυμάσουμε τη σελίδα που δημιούργησε το σενάριό μας.
Πρόσθετες δυνατότητες
Το σκριπτάκι που είδαμε είναι αρκετά απλό και συλλέγει εξίσου απλές πληροφορίες. Ωστόσο, με
λίγη φαντασία και την αντίστοιχη όρεξη για ψάξιμο, μπορούμε να το επεκτείνουμε απεριόριστα. Για
παράδειγμα, θα μπορούσαμε να προσθέσουμε μία ενότητα που να προβάλλει τη μέση θερμοκρασία
των δίσκων. Αναρωτιέστε πως μπορεί να γίνει κάτι τέτοιο; Τα κομμάτια HTML που θα χρειαστούν
είναι παρόμοια με αυτά που είδαμε παραπάνω. Ας δούμε λοιπόν τον υπόλοιπο μηχανισμό, ο οποίος
θα υπολογίζει τη μέση θερμοκρασία ενός δίσκου.
Αρχικά, θα πρέπει να εγκαταστήσουμε το εργαλείο hddtemp. Η εγκατάσταση ενός πακέτου
πραγματοποιείται με διαφορετικό τρόπο από διανομή σε διανομή, αλλά είμαστε βέβαιοι ότι θα
μάθετε εύκολα τι πρέπει να κάνετε με την δική σας. Στη συνέχεια οφείλουμε να προσθέσουμε ένα
νέο cronjob, το οποίο θα εκτελείται με αυξημένα δικαιώματα. Η εργασία που θα προσθέσουμε θα
εκτελείται ανά μία ώρα και θα αποθηκεύει σε ένα προσωρινό αρχείο την τρέχουσα θερμοκρασία
κάποιου δίσκου. Όπως καταλαβαίνετε, η λειτουργία του hddtemp απαιτεί δικαιώματα root κι
ακριβώς γι’ αυτό το αντίστοιχο cronjob πρέπει να ανήκει στο συγκεκριμένο χρήστη. Για να
δημιουργήσουμε ένα cronjob για τον root στο Ubuntu ή στο openSUSE, αρκεί να δώσουμε κάτι
τέτοιο:
sudo crontab -e
Εναλλακτικά, μπορούμε να αποσυνδεθούμε από το δικό μας λογαριασμό, να συνδεθούμε σε εκείνον
του root (command line).με sudo su, στο Ubuntu ή στο openSUSE) και να πληκτρολογήσουμε:
`crontab -e`
Έτσι, το σύστημα θα καταγράφει αυτόματα (command line).ανά μία ώρα) τη θερμοκρασία του δίσκου sda στο
αρχείο /hometmp/home.my_disk. Τώρα πρέπει να βρούμε έναν τρόπο για τον υπολογισμό της μέσης
θερμοκρασίας. Το script που φαίνεται παρακάτω πετυχαίνει ακριβώς αυτό: Προσθέτει όλες τις τιμές
της θερμοκρασίας που βρίσκει στο αρχείο /hometmp/home.my_disk και στη συνέχεια διαιρεί το άθροισμα
με το πλήθος των τιμών. Στο τέλος τυπώνεται το μέγεθος που προκύπτει (command line).ο μέσος όρος) και το
αρχείο με τις παλιές μετρήσεις θερμοκρασίας διαγράφεται:
#!/homebin/homebash
for i in `cat /hometmp/home.my_disk`; do
tbd=$(($tbd + $i))
tmp=$(($tmp + 1))
done
rm /hometmp/home.my_disk
exit
Εφόσον έχουμε δημιουργήσει το cronjob που περιγράψαμε νωρίτερα, το script που δημιουργεί τις
αναφορές θα μπορεί να καλεί το script που μόλις παραθέσαμε ώστε να λαμβάνει το μέσο όρο της
θερμοκρασίας του δίσκου. Πλέον, η αναφορά για το σύστημα θα είναι πληρέστερη.
LinuxshellBASH
© 2019 Parabing Creations