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, και εξέταση των μεταβλητών περιβάλλοντος.\
 |