99 γραμμές
8,9 KiB
Markdown
99 γραμμές
8,9 KiB
Markdown
+++
|
||
title = 'Μαθήματα bash No2'
|
||
date = '1998-11-01T00:00:00Z'
|
||
description = ''
|
||
author = 'Βαγγέλης Παπαδογιαννάκης'
|
||
issue = ['Magaz 09']
|
||
issue_weight = 6
|
||
+++
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
*Σ\' αυτό το τεύχος, θα εξετάσουμε τους ειδικούς χαρακτήρες στο Bash\...*
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
Στο Bash, (γενικότερα, σε όλα τα shells) υπάρχουν διάφοροι χαρακτήρες ή ακολουθίες χαρακτήρων, που δεν είναι (άμεσα τουλάχιστον) προσπελάσιμοι από το shell.
|
||
Αυτοί είναι:
|
||
|
||
- **\>** Επαναδρομoλόγηση εξόδου, πχ: echo \"hello root\" \> message φτιάχνει το αρχείο με όνομα message που περιέχει το hello root\
|
||
- **\<** Επαναδρομoλόγηση εισόδου, πχ: mail root \< message, στέλνει στον root το message.\
|
||
- **\|** Σωλήνωση πχ: ls \| more χρησιμοποιεί την more στα αποτελέσματα της ls\
|
||
- **&** Εκτέλεση εντολής στο παρασκήνιο. Ακολουθεί εξήγηση παρακάτω\...\
|
||
- **;** Χωρίζει εντολές στην ίδια γραμμή, πχ: clear ; ls καθαρίζει την οθόνη και δείχνει τα αρχεία του τρέχοντος καταλόγου.\
|
||
|
||
\
|
||
\'Εστω οτι θέλουμε να βρούμε ένα αρχείο στο δίσκο μας. Ένας τρόπος είναι να χρησιμοποιήσουμε την εντολή find γράφοντας:\
|
||
|
||
find / -name filename -print
|
||
|
||
Αυτό, είναι κάπως αργό γιατί ψάχνει όλο το σύστημα. Καλό θα ήταν να είχαμε το shell ελεύθερο για άλλη δουλειά. Γράφοντας λοιπόν:
|
||
|
||
find / -name filename -print &
|
||
|
||
η εντολή αυτή θα εκτελεστεί στο παρασκήνιο, και θα έχουμε ελεύθερο το shell για όποια άλλη δουλειά θέλουμε.\
|
||
Αν βρεθεί το αρχείο, θα το εμφανίσει στην οθόνη μας.
|
||
|
||
Έστω τώρα ότι έχουμε ανοίξει τον αγαπημένο μας editor, αλλά εκεί που γράφουμε κάτι, θέλουμε να δούμε μία διαδρομή στο δίσκο. Μπορούμε να κάνουμε suspend την
|
||
εργασία αυτή (δηλαδή το edit του αρχείου), να βρούμε αυτό που θέλουμε, και να ξαναγυρίσουμε στον editor. Πως; Στο περιβάλλον του editor πατάμε ctrl-z. Ο editor
|
||
θα σταματήσει, και θα μας βγάλει στο prompt. Εκεί μπορούμε να κάνουμε ότι θέλουμε. Για να επιστρέψουμε στον Editor, απλά γράφουμε fg.\
|
||
Μα τι έγινε; Να σας εξηγήσω εγώ τι έγινε: Πατώντας ctrl-z, ο editor κατάληξε μια \"σταματημένη δουλειά\" (stopped job). Εξακολουθεί να υπάρχει, αλλά έχει
|
||
σταματήσει στο παρασκήνιο (background), δεν εκτελείται, και περιμένει από εσάς να τον βάλετε να συνεχίσει να δουλεύει είτε στο προσκήνιο (foreground) γράφοντας
|
||
fg είτε στο παρασκήνιο γράφοντας (πόσο ευπρόβλεπτο\...) bg.
|
||
|
||
\
|
||
|
||
- Αν εκτελείτε πολές εργασίες στο παρασκήνιο, μπορείτε να τις δείτε όλες, γράφοντας jobs.
|
||
- Για να σταματήσετε για λίγο μια εργασία παρασκηνίου, γράψτε: stop n, όπου n ο αριθμός αυτής της εργασίας.
|
||
- Για να τερματίσετε μια εργασία παρασκηνίου, γράψτε kill n, όπου n ο αριθμός αυτής της εργασίας.
|
||
- Για να περιμένετε να τελειώσουν οι δουλειές παρασκηνίου, γράψτε wait.\
|
||
- Πολλές φορές, οι εργασίες παρασκηνίου γράφουν στην οθόνη, κάτι πολύ ενοχλητικό. Για να σταματήσουν όταν πάνε να γράψουν στην οθόνη, γράψτε stty tostop
|
||
|
||
\
|
||
Άλλοι χαρακτήρες που το bash \"εκτιμά\" διαφορετικά είναι:\
|
||
|
||
- \[\]:\
|
||
Αυτοί περικλείουν ένα εύρος τιμών, ή διάφορες τιμές. πχ η εντολές:\
|
||
ls \[a-f\]\* εμφανίζει όλα τα αρχεία που έχουν πρώτο γράμμα από το a μέχρι το f. Οι ακολουθίες είναι σύμφωνα με τον κώδικα ASCII.\
|
||
ls \[f\]\* εμφανίζει όλα τα αρχεία που έχουν πρώτο γράμμα a ή f.\
|
||
\
|
||
- \`\`:\
|
||
Οποιαδήποτε ακολουθία μέσα στις \"βαρείες\", ερμηνεύεται από το shell σα να είναι εντολή. Δηλαδή:\
|
||
echo \"You are in \\\"\`pwd\`\\\"\...\" θα έχει ως αποτέλεσμα να σας γράψει στην οθόνη:\
|
||
You are in \"/usr/local/bin\...\" (αν τη στιγμή που τη γράψατε βρισκόσασταν στο /usr/local/bin, εντάξει;)\
|
||
\
|
||
- Είδαμε και τον χαρακτήρα \\. Αυτός, είναι ο χαρακτήρας διαφυγής, δηλαδή ΟΤΙ (μα ότι) είναι μετά από αυτόν, εμφανίζεται ώς έχει (ακόμα και ο ίδιος, γράφοντας
|
||
\\\\)\
|
||
\
|
||
- \"\":\
|
||
Οτιδήποτε ανάμεσα σε δύο \", ερμηνεύεται ώς έχει, εκτός από:\
|
||
1. \$: στον οποίο θα γίνει αντικατάσταση με τη μεταβλητή που ακολουθεί τον χαρακτήρα \$
|
||
2. \`\`: ανάμεσα στους οποίους θα γίνει αντιστίχηση αποτελέσματος εντολής
|
||
3. \\ Ο χαρακτήρας διαφυγής του οποίου τη χρησιμότητα αναφέραμε παραπάνω.
|
||
|
||
\
|
||
- \'\':\
|
||
Οτιδήποτε ανάμεσα σε δύο αποστρόφους, ερμηνεύεται ώς έχει, εκτός φυσικά, από άλλη αποστροφο.\
|
||
Και επειδή ξέρω ότι στα παραδείγματα είσαστε καλύτεροι, ορίστε μερικά:\
|
||
\
|
||
- echo \"Καλά, δεν είναι \\\"cool\\\";;;\"\
|
||
Καλά, δεν είναι \"cool\";;;\
|
||
- echo \'Καλά, δεν είναι \"cool\";;;\'\
|
||
Καλά, δεν είναι \"cool\";;;\
|
||
- echo \"You are in \\\" \`pwd\` \\\"\...\"\
|
||
You are in \" /usr/local/bin \"\
|
||
- echo \"Your \\\$PATH variable is set to: \$PATH\"\
|
||
Your \$PATH variable is set to: /usr/bin:/bin:\...\.... (όποιο τελος πάντον είναι το PATH σας\...)\
|
||
- ():\
|
||
Ανάμεσα σε αυτούς τους χαρακτήρες, οι εντολές ομαδοποιούνται και είναι σα να τρέχουν σε ένα ξεχωριστό shell.\
|
||
Δηλαδή, κατα κάποιο τρόπο γίνεται ομαδοποίηση και εξάγεται το συνολικό αποτέλεσμα. πχ:\
|
||
(echo \"user \" ; whoami ; echo \"logged in on \";date) \>\> logfile Αυτό γράφει στο αρχείο logfile το εξής:\
|
||
user **user** logged in on **date**, όπου **user** ο χρήστης που μπήκε στο σύστημα, και **date** η ώρα-ημερομηνία εισαγωγής. Μια τέτοια εντολή καλό θα ήταν
|
||
να υπήρχε στο /etc/profile, ώστε να κρατάμε σε ένα logfile τους επισκέπτες στο σύστημά μας ανα πάσα στιγμή. Μην φανταστείτε όμως ότι με αυτό τον τρόπο θα
|
||
προστατευτείτε από τους παρείσακτους!!!\
|
||
Στην παραπάνω εντολή, το \>\> είναι το append to file, δηλαδή δε σβήνει το προηγούμενο logfile, αλλά γράφει ότι είναι να γράψει στο τέλος του αρχείου. Δεν
|
||
χάνουμε δηλαδή το προηγούμενο logfile.\
|
||
\
|
||
\
|
||
|
||
\
|
||
Στο επόμενο τεύχος του Magaz, συνέχεια του Bash, και εξέταση των μεταβλητών περιβάλλοντος.\
|