Вы находитесь на странице: 1из 211

ΑΝΣΧΝΖ΢ ΢ΗΓΖΡΟΠΟΤΛΟ΢

Καζεγεηήο Δθαξκνγψλ

Διζαγωγή ζηα Λειηοςπγικά


΢ςζηήμαηα
Με ρξήζε θαη πξνγξακκαηηζκφ ηνπ Κειχθνπο

Δξγαζηεξηαθφο Οδεγφο
Δηζαγσγή ζηα Λεηηνπξγηθά ΢πζηήκαηα

΢ςγγπαθή
Αληψλεο ΢ηδεξφπνπινο

Κπιηικόρ αναγνώζηηρ
Μελάο Γαζπγέλεο

΢ςνηελεζηέρ έκδοζηρ
Γισζζηθή Δπηκέιεηα: Φψηεο Υαηδφγινπ
Γξαθηζηηθή Δπηκέιεηα: Αληψλεο ΢ηδεξφπνπινο
Σερληθή Δπεμεξγαζία: Βαζηιάληα Κνπκπή, Αληψλεο ΢ηδεξφπνπινο

ISBN: 978-960-603-108-3

Copyright © ΢ΔΑΒ, 2015

Σν παξφλ έξγν αδεηνδνηείηαη ππφ ηνπο φξνπο ηεο άδεηαο Creative Commons Αλαθνξά Γεκηνπξγνχ - Με
Δκπνξηθή Υξήζε - Όρη Παξάγσγα Έξγα 3.0. Γηα λα δείηε έλα αληίγξαθν ηεο άδεηαο απηήο επηζθεθηείηε ηνλ
ηζηφηνπν https://creativecommons.org/licenses/by-nc-nd/3.0/gr/

΢ΤΝΓΔ΢ΜΟ΢ ΔΛΛΖΝΗΚΧΝ ΑΚΑΓΖΜΑΨΚΧΝ ΒΗΒΛΗΟΘΖΚΧΝ


Δζληθφ Μεηζφβην Πνιπηερλείν
Ζξψσλ Πνιπηερλείνπ 9, 15780 Εσγξάθνπ
www.kallipos.gr
Πίλαθαο Πεξηερνκέλσλ

Πίλαθαο Πεξηερνκέλσλ ........................................................................................................................ 5


Πίλαθαο ΢ρεκάησλ ............................................................................................................................ 10
Πίλαθαο Πηλάθσλ ............................................................................................................................... 12
Πίλαθαο ΢πληνκεύζεσλ-Αθξσλύκηα ................................................................................................ 13
Πίλαθαο Μεηάθξαζεο Όξσλ ............................................................................................................ 15
Πξόινγνο ............................................................................................................................................. 19
Δπραξηζηίεο ......................................................................................................................................... 21
Δηζαγσγή ............................................................................................................................................ 23
Κεθάιαην 1.......................................................................................................................................... 25
1 Δηζαγσγή ζηα Λεηηνπξγηθά ΢πζηήκαηα θαη ην Unix ................................................... 25
1.1 Ση είλαη Λεηηνπξγηθφ ΢χζηεκα - ΢θνπνί θαη Λεηηνπξγίεο ..............................................................25
1.2 Καηεγνξίεο Λεηηνπξγηθψλ ΢πζηεκάησλ ........................................................................................25
1.2.1 Πνιιαπιψλ Δξγαζηψλ (Multi-Tasking) θαη Μνλψλ Δξγαζηψλ (Single-Tasking) Λεηηνπξγηθά
΢πζηήκαηα 25
1.2.2 Πνιιαπιψλ ρξεζηψλ (multi-user) θαη κνλνχ ρξήζηε (single-user) Λεηηνπξγηθά ΢πζηήκαηα .......26
1.2.3 Καηαλεκεκέλα Λεηηνπξγηθά ΢πζηήκαηα (Distributed Operating Systems) ...................................26
1.2.4 Λεηηνπξγηθά ΢πζηήκαηα Πξαγκαηηθνχ Υξφλνπ (Real-time Operating Systems) ..........................26
1.2.5 Δλζσκαησκέλα Λεηηνπξγηθά ΢πζηήκαηα (Embedded Operating Systems) ...................................26
1.3 To Λεηηνπξγηθφ ΢χζηεκα UNIX ....................................................................................................27
1.3.1 Λίγε Ηζηνξία ...................................................................................................................................27
1.3.2 Δθδφζεηο .........................................................................................................................................27
1.3.3 To Linux .........................................................................................................................................28
1.3.4 Υαξαθηεξηζηηθά .............................................................................................................................29
1.3.5 Κχθινο δηεξκήλεπζεο εληνιήο θειχθνπο ......................................................................................29
1.3.6 Βαζηθέο Οληφηεηεο .........................................................................................................................30
1.3.7 Αξρεία.............................................................................................................................................30
1.3.8 Υξήζηεο θαη Οκάδεο Υξεζηψλ.......................................................................................................31
1.3.9 Γηεξγαζίεο (Processes) ...................................................................................................................32
1.3.10 Πψο λα εξγαζηείηε γηα ηελ πινπνίεζε ησλ αζθήζεσλ ..................................................................33
1.4 Αλαθνξέο ........................................................................................................................................35

5
Κεθάιαην 2.......................................................................................................................................... 37
2 Δηζαγσγή ζηε ρξήζε ηνπ θειύθνπο θαη ζύληαμε εληνιώλ .......................................... 37
2.1 Υξήζε Κειχθνπο - Σεξκαηηθφ .......................................................................................................37
2.1.1 Σεξκαηηθφ .......................................................................................................................................37
2.2 Σν θέιπθνο (shell) ..........................................................................................................................38
2.3 Γηαηχπσζε εληνιψλ .......................................................................................................................39
2.3.1 Ζ πξψηε κνπ εληνιή .......................................................................................................................40
2.3.2 Ζ εληνιή man .................................................................................................................................41
2.3.3 Γηαθνξνπνίεζε ΢εκαηψλ θαη Αξρείσλ...........................................................................................43
2.3.4 Πηζαλά ζθάικαηα θαηά ηε δηαηχπσζε εληνιψλ ............................................................................45
2.3.5 Γηαρσξηζκφο εληνιψλ.....................................................................................................................46
2.3.6 Αθχξσζε εληνιήο ...........................................................................................................................47
2.4 Αζθήζεηο γηα εμάζθεζε..................................................................................................................47
2.5 Αλαθνξέο ........................................................................................................................................51

Κεθάιαην 3.......................................................................................................................................... 53
3 Δηζαγσγή ζην ΢ύζηεκα Αξρείσλ ................................................................................... 53
3.1 Οξγάλσζε ηνπ ΢πζηήκαηνο Αξρείσλ .............................................................................................53
3.2 Πεξηνξηζκνί - θαλφλεο γηα έλα ΢χζηεκα Αξρείσλ .........................................................................56
3.3 Γηαδξνκέο .......................................................................................................................................56
3.3.1 Απφιπηεο Γηαδξνκέο ......................................................................................................................56
3.3.2 ΢ρεηηθέο Γηαδξνκέο ........................................................................................................................58
3.4 Μεηαθίλεζε πξνο ηα επάλσ κε ΢ρεηηθή Γηαδξνκή ........................................................................61
3.4.1 Ο θάθεινο HOME ησλ ρξεζηψλ ....................................................................................................67
3.5 Σχπνη αξρείσλ.................................................................................................................................69
3.5.1 Δληνιέο Γηαρείξηζεο Φαθέισλ .......................................................................................................69
3.5.2 Δληνιέο Γηαρείξηζεο Φαθέισλ θαη Αξρείσλ ..................................................................................70
3.5.3 Κξπθά αξρεία .................................................................................................................................73
3.6 Αζθήζεηο γηα εμάζθεζε..................................................................................................................74
3.7 Αλαθνξέο ........................................................................................................................................79

Κεθάιαην 4.......................................................................................................................................... 81
4 Γνπιεύνληαο κε πνιιά αξρεία ρξεζηκνπνηώληαο ραξαθηήξεο κπαιαληέξ (wildcards).
81
4.1 Απηφκαηε ζπκπιήξσζε νλνκάησλ αξρείσλ (filename auto-completion) ......................................81
4.2 Υαξαθηήξεο Μπαιαληέξ (Wildcards) ............................................................................................82
4.2.1 ΢χλνια Υαξαθηήξσλ (Charsets) ....................................................................................................84
4.2.2 ΢χλνια Υαξαθηήξσλ θαη Wildcards ..............................................................................................87

6
4.3 Παξαδείγκαηα Υξήζεο Μπαιαληέξ ...............................................................................................89
4.3.1 Μπαιαληέξ θαη Δηζαγσγηθά ...........................................................................................................93
4.3.2 Μπαιαληέξ θαη Γηαδξνκέο .............................................................................................................93
4.4 Αζθήζεηο γηα εμάζθεζε..................................................................................................................94
4.5 Αλαθνξέο ........................................................................................................................................97

Κεθάιαην 5.......................................................................................................................................... 99
5 Άδεηεο πξόζβαζεο θαη αζθάιεηα αξρείσλ ..................................................................... 99
5.1 Άδεηεο πξφζβαζεο ..........................................................................................................................99
5.1.1 Δπηπιένλ δηθαηψκαηα ...................................................................................................................101
5.1.2 Απνζήθεπζε δηθαησκάησλ ...........................................................................................................102
5.2 ΢εκαζία δηθαησκάησλ ..................................................................................................................103
5.2.1 Δζσηεξηθή δνκή ΢πζηήκαηνο Αξρείσλ ........................................................................................104
5.3 Οξηζκφο θαη κεηαβνιή δηθαησκάησλ............................................................................................105
5.3.1 Πξνθαζνξηζκέλα δηθαηψκαηα θαη ε umask ..................................................................................107
5.4 Αζθήζεηο γηα εμάζθεζε................................................................................................................114
5.5 Αλαθνξέο ......................................................................................................................................116

Κεθάιαην 6........................................................................................................................................ 119


6 Καλνληθέο Δθθξάζεηο .................................................................................................... 119
6.1 Γνκή θαλνληθψλ Δθθξάζεσλ .......................................................................................................119
6.2 Σα atoms .......................................................................................................................................120
6.2.1 Έλαο απιφο ραξαθηήξαο ...............................................................................................................120
6.2.2 Ζ πξάμε ηεο Αθνινπζίαο..............................................................................................................121
6.2.3 Σν atom "." ...................................................................................................................................121
6.2.4 Σν atom θιάζεο ραξαθηήξσλ .......................................................................................................122
6.2.5 Σν atom άγθπξα ............................................................................................................................123
6.3 Σειεζηέο .......................................................................................................................................124
6.3.1 Ο ηειεζηήο αθνινπζίαο ................................................................................................................124
6.3.2 Ο ηειεζηήο ελαιιαγήο (OR) .........................................................................................................125
6.3.3 Ο ηειεζηήο επαλάιεςεο ...............................................................................................................125
6.3.4 Σειεζηήο Οκαδνπνίεζεο (Group Operator) .................................................................................129
6.3.5 Αλαθνξά Πίζσ (Back Reference) ................................................................................................130
6.3.6 Δηδηθνί ραξαθηήξεο θαη ν ραξαθηήξαο «» ....................................................................................131
6.4 ΢χλνια θαλνληθψλ εθθξάζεσλ ....................................................................................................132
6.5 Ζ νηθνγέλεηα εληνιψλ grep...........................................................................................................133
6.6 Καλνληθέο Δθθξάζεηο κε grep θαη νη ραξαθηήξεο κπαιαληέξ ηνπ θειχθνπο...............................135
6.7 Αζθήζεηο γηα εμάζθεζε................................................................................................................137

7
6.8 Αλαθνξέο ......................................................................................................................................143

Κεθάιαην 7........................................................................................................................................ 145


7 Γηεξγαζίεο, αλαθαηεύζπλζε, δηαζσιήλσζε, θίιηξα .................................................. 145
7.1 Γηεξγαζίεο ....................................................................................................................................145
7.1.1 Ζ εληνιή ps...................................................................................................................................146
7.1.2 Ζ εληνιή pstree.............................................................................................................................148
7.1.3 Οη Γηεξγαζίεο ...............................................................................................................................149
7.1.4 Γηαδηθαζία εθθίλεζεο ζπζηήκαηνο (boot) ...................................................................................149
7.1.5 Λεηηνπξγίεο fork θαη exec .............................................................................................................149
7.2 ΢ήκαηα (signals) ...........................................................................................................................150
7.2.1 Ζ εληνιή kill .................................................................................................................................151
7.3 ΢ηνηρεία Γηεξγαζηψλ .....................................................................................................................152
7.3.1 Οη κεηαβιεηέο πεξηβάιινληνο ......................................................................................................154
7.4 Ρνέο Δηζφδνπ-Δμφδνπ θαη Αλαθαηεχζπλζε..................................................................................158
7.4.1 Αλαθαηεχζπλζε (Redirection) ......................................................................................................161
7.4.2 Γηαζσιήλσζε (Pipelining) ...........................................................................................................167
7.5 Αζθήζεηο γηα εμάζθεζε................................................................................................................169
7.6 Αλαθνξέο ......................................................................................................................................174

Κεθάιαην 8........................................................................................................................................ 175


8 Δηζαγσγή ζηα ζελάξηα θειύθνπο ................................................................................. 175
8.1 Κέιπθνο ή Φινηφο (shell) .............................................................................................................175
8.1.1 Σν πξψην κνπ ζελάξην θειχθνπο .................................................................................................176
8.1.2 Δθηέιεζε ζελαξίσλ θαη άδεηεο ρξήζεο.........................................................................................178
8.1.3 Απνζθαικάησζε ζελαξίσλ θειχθνπο .........................................................................................179
8.1.4 Δθηέιεζε ζελαξίσλ θαη ε κεηαβιεηή PATH ...............................................................................180
8.2 Μεηαβιεηέο Κειχθνπο .................................................................................................................180
8.2.1 ΢θάικαηα θαηά ηελ εθρψξεζε .....................................................................................................181
8.2.2 Δθρψξεζε ηηκψλ ...........................................................................................................................182
8.2.3 Υξήζε κεηαβιεηψλ ......................................................................................................................183
8.3 Υξήζε Δηζαγσγηθψλ ....................................................................................................................184
8.3.1 Δηζαγσγηθά θαη κεηαβιεηέο θειχθνπο .........................................................................................185
8.3.2 Δηζαγσγηθά θαη κεηαβιεηέο πεξηβάιινληνο .................................................................................186
8.3.3 ΢πλέλσζε κεηαβιεηψλ .................................................................................................................186
8.3.4 Σα αλάπνδα εηζαγσγηθά ` θαη ην $().............................................................................................187
8.4 Αξηζκεηηθέο Πξάμεηο ....................................................................................................................189
8.4.1 Αξηζκεηηθέο Πξάμεηο κε ρξήζε ηεο expr ......................................................................................189

8
8.4.2 Αξηζκεηηθέο Πξάμεηο κε ρξήζε ηεο αξηζκεηηθήο θαηάζηαζεο (arithmetic mode) ηνπ bash ........191
8.5 Αζθήζεηο γηα εμάζθεζε................................................................................................................193

Παξάξηεκα Α ................................................................................................................................... 199


Α Ο επεμεξγαζηήο θεηκέλνπ vi ........................................................................................................ 199
Παξάξηεκα Β ................................................................................................................................... 205
Β Σν αξρείν /etc/passwd θαη ην /etc/group..................................................................................... 205
Β.1 Σν αξρείν /etc/passwd ................................................................................................................................205
Β.2 Σν αξρείν /etc/group ..................................................................................................................................206
Β.3 Σν πεδίν GECOS .......................................................................................................................................206

Δπξεηήξην όξσλ................................................................................................................................ 209

9
Πίλαθαο ΢ρεκάησλ

΢ρήκα 1.1: H ηζηνξία ηνπ UNIX (πεγή: http://en.wikipedia.org/Unix [6]). ......................................................28


΢ρήκα 1.2: H ηζηνξία ηνπ Linux (πεγή: http://en.wikipedia.org/Linux [4]). .....................................................29
΢ρήκα 1.3: Ηεξαξρία ζε έλα Λεηηνπξγηθφ ζχζηεκα. ...........................................................................................29
΢ρήκα 1.4: O TaskManager ησλ Windows. .......................................................................................................32
΢ρήκα 1.5: Ζ εληνιή top ηνπ UNIX. ..................................................................................................................33
΢ρήκα 1.6: Γηαρείξηζε πνιιψλ εηθνληθψλ κεραλψλ κε ην VirtualBox. .............................................................34
΢ρήκα 2.1: Ηεξαξρία ζην UNIX. .........................................................................................................................37
΢ρήκα 2.2: Σεξκαηηθφ DEC-vt100 (πεγή https://de.wikipedia.org/wiki/VT100). .............................................38
΢ρήκα 2.3: Σεξκαηηθφ DEC-vt420 (πεγή: https://en.wikipedia.org/wiki/VT420). ............................................38
΢ρήκα 2.4: Παξαζπξηθφ Σεξκαηηθφ....................................................................................................................39
΢ρήκα 2.5: Καιή θαη θαθή ρξήζε ηεο cat. .........................................................................................................40
΢ρήκα 2.6: Απνηέιεζκα θαθήο ρξήζεο ηεο cat. .................................................................................................41
΢ρήκα 2.7: Απνηέιεζκα ηεο cat κε 2 αξρεία σο νξίζκαηα. ................................................................................41
΢ρήκα 2.8: Απνηέιεζκα ηεο cat κε 2 αξρεία σο νξίζκαηα θαη ε ζεκαία "-n". ..................................................41
΢ρήκα 2.9: Σν εγρεηξίδην ρξήζεο ηεο εληνιήο cat. .............................................................................................42
΢ρήκα 2.10: Δθηέιεζε δπν εληνιψλ ζε κηα γξακκή εληνιήο. ............................................................................46
΢ρήκα 2.11: Αθχξσζε εληνιήο. .........................................................................................................................47
΢ρήκα 2.12: Απνκαθξπζκέλε ζχλδεζε. .............................................................................................................49
΢ρήκα 3.1: Ηεξαξρία ηνπ ΢πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο Windows. ..............................53
΢ρήκα 3.2: Σππηθή ηεξαξρία ηνπ ΢πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο Unix. .........................55
΢ρήκα 3.3: Σππηθή ηεξαξρία ηνπ ΢πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο Unix. .........................55
΢ρήκα 3.4: Σππηθή ηεξαξρία ηνπ ΢πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο Unix. .........................57
΢ρήκα 3.5: Σππηθή ηεξαξρία ηνπ ΢πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο Unix. .........................59
΢ρήκα 3.6: Σππηθή ηεξαξρία ηνπ ΢πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο Unix. .........................60
΢ρήκα 3.7: Καηαζθεπή Απφιπηεο Γηαδξνκήο απφ ηε ΢ρεηηθή. .........................................................................61
΢ρήκα 3.8: Γηαδξνκή πξνο ηα επάλσ. ................................................................................................................62
΢ρήκα 3.9: Οη ππνθαηάινγνη "." θαη "..". ...........................................................................................................63
΢ρήκα 3.10: Οη ππνθαηάινγνη "." θαη ".." αλαιπηηθά. ........................................................................................63
΢ρήκα 3.11: Παξάδεηγκα ηεξαξρίαο θαηαιφγσλ.................................................................................................65
΢ρήκα 3.12: Παξάδεηγκα ηεξαξρίαο θαηαιφγσλ κε θαηαιφγνπο ρξεζηψλ. ........................................................68
΢ρήκα 3.13: Σχπνη αξρείσλ ζε έλα ηππηθφ ζχζηεκα UNIX. ..............................................................................69
΢ρήκα 3.14: Οη ζηήιεο ηεο ls -l. .........................................................................................................................73
΢ρήκα 3.15: Υξήζε ηεο ls κε ηνλ ζπλδπαζκφ "-la"............................................................................................73
΢ρήκα 3.16: Άζθεζε-Παηρλίδη κε απφιπηεο δηαδξνκέο. ....................................................................................77
΢ρήκα 3.17: Άζθεζε ηχπνπ ΢σζηφ-Λάζνο κε δηαδξνκέο ..................................................................................77
΢ρήκα 3.18: Δξσηήζεηο ΢σζηφ-Λάζνο γηα ηηο Γηαδξνκέο ..................................................................................78
΢ρήκα 3.19: Άζθεζε-Παηρλίδη κε απφιπηεο θαη ζρεηηθέο δηαδξνκέο.................................................................79
΢ρήκα 4.1: ISO-8859-1 φπσο νξίδεηαη απφ ηνπο νξγαληζκνχο ISO-IEC ...........................................................86
΢ρήκα 4.2: ISO-8859-7 φπσο νξίδεηαη απφ ηνπο νξγαληζκνχο ISO-IEC ...........................................................86
΢ρήκα 4.3: Αξηζηεξά: Δκθάληζε κελπκάησλ ζηα αγγιηθά. Γεμηά: Δκθάληζε κελπκάησλ ζηα ειιεληθά. ........88
΢ρήκα 4.4: Παξάδεηγκα εκθάληζεο θεηκέλνπ κε ιάζνο θσδηθνπνίεζε. ............................................................88
΢ρήκα 4.5: Ρχζκηζε ζπλφινπ ραξαθηήξσλ ζην putty. .......................................................................................89
΢ρήκα 5.1: Οη ζηήιεο ηεο ls -l. ...........................................................................................................................99
΢ρήκα 5.2: Οη νκάδεο αδεηψλ ρξήζεο. .............................................................................................................100
΢ρήκα 5.3: Οη ηχπνη αδεηψλ ρξήζεο. ................................................................................................................100
΢ρήκα 5.4: Παξάδεηγκα Αδεηψλ Υξήζεο. ........................................................................................................101
΢ρήκα 5.5: Παξάδεηγκα Αδεηψλ Υξήζεο. ........................................................................................................101
΢ρήκα 5.6: Παξάδεηγκα απνζήθεπζεο Αδεηψλ Υξήζεο. ..................................................................................102

10
΢ρήκα 5.7: Παξάδεηγκα umask. .......................................................................................................................109
΢ρήκα 5.8: Παξάδεηγκα ππνινγηζκνχ επίδξαζεο ηεο umask ζηε δεκηνπξγία θαηαιφγσλ. .............................110
΢ρήκα 5.9: Παξάδεηγκα ιάζνπο ππνινγηζκψλ επίδξαζεο ηεο umask ζηε δεκηνπξγία αξρείσλ. .....................111
΢ρήκα 5.10(α): Παξάδεηγκα ζσζηψλ ππνινγηζκψλ επίδξαζεο ηεο umask ζηε δεκηνπξγία αξρείσλ θαη
θαηαιφγσλ. ................................................................................................................................................112
΢ρήκα 5.10(β): Παξάδεηγκα ζσζηψλ ππνινγηζκψλ επίδξαζεο ηεο umask ζηε δεκηνπξγία αξρείσλ θαη
θαηαιφγσλ. ................................................................................................................................................113
΢ρήκα 6.1: Καλνληθέο Δθθξάζεηο. ...................................................................................................................119
΢ρήκα 6.2: Σν ζχλνιν ησλ atoms. ....................................................................................................................120
΢ρήκα 6.3: Σν ζχλνιν ησλ ηειεζηέσλ. ............................................................................................................120
΢ρήκα 6.4: Παξάδεηγκα RegExp: "L", String: "HELLO". ...............................................................................121
΢ρήκα 6.5: Παξάδεηγκα RegExp: "K", String: "HELLO"................................................................................121
΢ρήκα 6.6: Παξάδεηγκα RegExp: "K", String: "HELLO"................................................................................121
΢ρήκα 6.7: Παξάδεηγκα RegExp: ".", String: "HELLO". ................................................................................122
΢ρήκα 6.8: Παξάδεηγκα RegExp: "E." θαη "O.", String: "HELLO". ................................................................122
΢ρήκα 6.9: Παξάδεηγκα ζέζεσλ αγθπξψλ. .......................................................................................................124
΢ρήκα 6.10: Παξάδεηγκα RegExp: "Α.Σ", String: "CHARACTER". ..............................................................124
΢ρήκα 6.11: Παξάδεηγκα RegExp: "BC*D", String: "ABBCCCDD" .............................................................126
΢ρήκα 6.12: Γελδξνεηδήο αλαπαξάζηαζε ησλ δπλαηψλ ζπλδπαζκψλ-ειέγρσλ ηνπ παξαδείγκαηνο απφ ην
Γηαδξαζηηθφ ΢ρήκα 6.11. ..........................................................................................................................127
΢ρήκα 6.13: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο. ...........................................................................137
΢ρήκα 6.14: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο. ...........................................................................138
΢ρήκα 6.15: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο. ...........................................................................138
΢ρήκα 6.16: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο. ...........................................................................140
΢ρήκα 6.17: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο. ...........................................................................142
΢ρήκα 7.1: Σππηθέο Καηαζηάζεηο Γηεξγαζηψλ .................................................................................................146
΢ρήκα 7.2: Ζ δηαδηθαζία εθηέιεζεο εληνιψλ απφ ην θέιπθνο. .......................................................................150
΢ρήκα 7.3: Μηα δηεξγαζία θιεξνλνκεί απφ ηε γνληθή ηεο ηηο ξνέο εηζφδνπ-εμφδνπ. ......................................161
΢ρήκα 7.4: Ζ δηαδηθαζία δεκηνπξγίαο ησλ ξνψλ εηζφδνπ-εμφδνπ θαηά ηελ εθηέιεζε κηαο εληνιήο. .............161
΢ρήκα 7.5: Αιιαγή ηεο θαλνληθήο εμφδνπ πξνο αξρείν. ..................................................................................162
΢ρήκα 7.6: Αιιαγή ηεο εμφδνπ ιαζψλ πξνο αξρείν. ........................................................................................163
΢ρήκα 7.7: Αιιαγή ηεο θαλνληθήο εμφδνπ θαη ηεο εμφδνπ ιαζψλ πξνο δηαθνξεηηθά αξρεία. .........................164
΢ρήκα 7.8: Αιιαγή ηεο εμφδνπ ιαζψλ πξνο ηελ θαλνληθή έμνδν. ...................................................................165
΢ρήκα 7.9: Αιιαγή ηεο θαλνληθήο εμφδνπ πξνο αξρείν θαη ηεο εμφδνπ ιαζψλ πξνο ηελ θαλνληθή έμνδν. ....166
΢ρήκα 7.10: Αιιαγή ηεο εμφδνπ ιαζψλ πξνο ηελ θαλνληθή έμνδν θαη ηεο θαλνληθήο εμφδνπ πξνο αξρείν. ..166
΢ρήκα 7.11: Βαζηθή κνξθή δηαζσιήλσζεο. ....................................................................................................167
΢ρήκα 7.12: Παξάδεηγκα δηαζσιήλσζεο κε ls θαη wc. ...................................................................................168
΢ρήκα 7.13: Παξάδεηγκα δηαζσιήλσζεο κε ls θαη wc (πεξίπησζε ιάζνπο). ..................................................168
΢ρήκα 8.1: Ηεξάξρεζε ζηα ηκήκαηα ηνπ Unix. ................................................................................................175
΢ρήκα Α.1: Οη θαηαζηάζεηο ιεηηνπξγίαο ηνπ vi. ..............................................................................................202

11
Πίλαθαο Πηλάθσλ

Πίλαθαο 3.1: Παξαδείγκαηα ΢ρεηηθψλ θαη Απφιπησλ Γηαδξνκψλ. ...................................................................64


Πίλαθαο 3.2: Παξαδείγκαηα ηζνδχλακσλ ΢ρεηηθψλ θαη Απφιπησλ Γηαδξνκψλ. ..............................................64
Πίλαθαο 3.3: Παξαδείγκαηα ΢ρεηηθψλ θαη Απφιπησλ Γηαδξνκψλ. ...................................................................65
Πίλαθαο 3.4: Πεξηπηψζεηο ρξήζεο ηνπ Δηδηθνχ ραξαθηήξα κπαιαληέξ "~". .....................................................67
Πίλαθαο 3.5: Παξαδείγκαηα ρξήζεο ηεο εληνιήο ls. ..........................................................................................72
Πίλαθαο 3.6: ΢πλήζεηο ζεκαίεο ηεο ls. ...............................................................................................................72
Πίλαθαο 3.7: Πίλαθαο ΢πρλψλ Δληνιψλ ............................................................................................................74
Πίλαθαο 4.1: Δηδηθνί ραξαθηήξεο κπαιαληέξ.....................................................................................................83
Πίλαθαο 4.2: Οκάδεο ραξαθηήξσλ φπσο νξίδνληαη ζην POSIX. .......................................................................84
Πίλαθαο 4.3: Ο πίλαθαο ASCII. .........................................................................................................................84
Πίλαθαο 4.4: Παξαδείγκαηα ηηκψλ γηα ηηο ξπζκίζεηο ρψξαο (locale). ................................................................87
Πίλαθαο 4.5: Οδεγίεο Άζθεζεο .........................................................................................................................96
Πίλαθαο 5.1: Αληηζηνηρία Οθηαδηθνχ - Γπαδηθνχ ΢πζηήκαηνο .......................................................................103
Πίλαθαο 5.2: Παξαδείγκαηα αλαπαξάζηαζεο ζε Οθηαδηθφ θαη Γπαδηθφ ΢χζηεκα .........................................103
Πίλαθαο 5.3: Παξαδείγκαηα απνζήθεπζεο θαηαιφγνπ ....................................................................................104
Πίλαθαο 5.4: ΢χκβνια πνπ ρξεζηκνπνηνχληαη ζηελ εληνιή chmod.................................................................106
Πίλαθαο 6.1: Οη θιάζεηο ραξαθηήξσλ ..............................................................................................................122
Πίλαθαο 6.2: Οη πεξηζζφηεξν ζπρλέο άγθπξεο. ................................................................................................123
Πίλαθαο 6.3: Παξαδείγκαηα κε ηειεζηή αθνινπζίαο. ......................................................................................124
Πίλαθαο 6.4: Παξαδείγκαηα κε ηνλ ηειεζηή OR..............................................................................................125
Πίλαθαο 6.5: Οη ηειεζηέο επαλάιεςεο. ............................................................................................................126
Πίλαθαο 6.6: Παξαδείγκαηα κε ηειεζηέο επαλάιεςεο. ...................................................................................127
Πίλαθαο 6.7: Παξαδείγκαηα κε ηειεζηέο επαλάιεςεο. ...................................................................................129
Πίλαθαο 6.8: Γπλαηνί ζπλδπαζκνί γηα ηελ Καλνληθή Έθθξαζε: (This|That) is (a|an|the). .............................130
Πίλαθαο 6.9: Παξαδείγκαηα κε Αλαθνξά πίζσ. ..............................................................................................130
Πίλαθαο 6.10: Πίλαθαο εηδηθψλ ραξαθηήξσλ. ..................................................................................................131
Πίλαθαο 6.11: Πίλαθαο εηδηθψλ ραξαθηήξσλ κε ην "". ....................................................................................132
Πίλαθαο 6.12: ΢χγθξηζε ERE κε BRE". ..........................................................................................................133
Πίλαθαο 6.13: Πίλαθαο ζπρλψλ ζεκαηψλ ηεο grep. .........................................................................................134
Πίλαθαο 7.1: Λίζηα κε ηα ζήκαηα απφ ην ιεηηνπξγηθφ Linux. .........................................................................151
Πίλαθαο 7.2: Σα πξνθαζνξηζκέλα αλνηρηά αξρεία πνπ αληηζηνηρνχλ ζηηο ξνέο εηζφδνπ-εμφδνπ. ...................160
Πίλαθαο 7.3: Λίζηα κε ηα ζχκβνια αλαθαηεχζπλζεο. .....................................................................................163
Πίλαθαο 8.1: Λίζηα κε ηηο αξηζκεηηθέο πξάμεηο ηεο θαηάζηαζεο αξηζκεηηθήο ιεηηνπξγίαο ηνπ θειχθνπο. ....193
Πίλαθαο 8.2: Πξν-δεισκέλεο κεηαβιεηέο ηνπ θειχθνπο. ...............................................................................197
Πίλαθαο Α.1: Δληνιέο Δηζφδνπ ζε "Καηάζηαζε Δηζαγσγήο". .........................................................................199
Πίλαθαο Α.2: Βαζηθέο Δληνιέο Δπεμεξγαζίαο. ................................................................................................200
Πίλαθαο Α.3: Δληνιέο Μεηαθίλεζεο ζε "Καηάζηαζε Δληνιψλ". ....................................................................202
Πίλαθαο Α.4: Δληνιέο ζε "Καηάζηαζε Γξακκήο Δληνιψλ". ...........................................................................203

12
Πίλαθαο ΢πληνκεύζεσλ-Αθξσλύκηα

ASCII American Standard Code for Information Interchange


bash Bourne Again Shell
BRE Basic Regular Expressions
BSD Berkeley Software Distribution
CPU Central Processing Unit
csh C Shell
CWD Current Working Directory
EOF End Of File
ERE Extended Regular Expressions
ext Extended Filesystem
FAT File Allocation Table
FIFO First-In First-Out
FS File System
FSF Free Software Foundation
GECOS General Electric Comprehensive Operating System
GID Group IDentification
grep Global Regular Expressions Print
I/O Input/Output
ISO International Organization for Standardization
NTFS New Technology File System
OS Operating System
PC Personal Computer
PID Process IDentification
PPID Parent Process IDentification
PWD Print Working Directory
RE Regular Expressions
RegEx Regular Expressions
rsh Remote SHell
sh Bourne Shell
ssh Secure SHell
UCS Universal Character Set
UID User IDentification
Unics UNiplexed Information and Computing Service
UTF UCS Transformation Format
WWW World Wide Web
ΚΜΔ Κεληξηθή Μνλάδα Δπεμεξγαζίαο
Λ΢ Λεηηνπξγηθφ ΢χζηεκα

13
14
Πίλαθαο Μεηάθξαζεο Όξσλ

Absolute Path Απφιπηε Γηαδξνκή


Back Quotes Αλάπνδα Δηζαγσγηθά
Back Reference Αλαθνξά Πίζσ
Buffer Απνηακηεπηήο
Central Processing Unit Κεληξηθή Μνλάδα Δπεμεξγαζίαο
CPU ΚΜΔ
Current Working Directory Σξέρσλ Καηάινγνο Δξγαζίαο
Distributed Computing Καηαλεκεκέλνο Τπνινγηζκφο
Distributed Operating Systems Καηαλεκεκέλα Λεηηνπξγηθά ΢πζηήκαηα
Double Quotes Γηπιά Δηζαγσγηθά
Embedded Operating Systems Δλζσκαησκέλα Λεηηνπξγηθά ΢πζηήκαηα
Format Μνξθνπνίεζε
Input-Output Device ΢πζθεπή Δηζφδνπ-Δμφδνπ
Interpreter Γηεξκελεπηήο
Link ΢χλδεζκνο
manual page εγρεηξίδην ρξήζεο
Multi-tasking Πνιιαπιψλ Δξγαζηψλ
Operating System Λεηηνπξγηθφ ΢χζηεκα
Partition Σφκνο
Path Γηαδξνκή
Process Γηεξγαζία
Prompt Πξνηξνπή
Quotes Δηζαγσγηθά
Real Time Operating Systems Λεηηνπξγηθά ΢πζηήκαηα Πξαγκαηηθνχ
Υξφλνπ
Regular Expression Καλνληθή Έθθξαζε
Relative Path ΢ρεηηθή Γηαδξνκή
Root Directory Ρηδηθφο Καηάινγνο
Service Τπεξεζία
Shell Κέιπθνο
Signal ΢ήκα
Single Quotes Μνλά Δηζαγσγηθά
Single-tasking Μνλψλ Δξγαζηψλ
Smart Phone Έμππλν Κηλεηφ
space θελφ δηάζηεκα
String Concatenation ΢πλέλσζε ΢πκβνινζεηξψλ
Superuser Τπεξρξήζηεο

15
System Call Κιήζε ΢πζηήκαηνο
Tablet Σακπιέηα
Timestamp Υξνλνζθξαγίδα
User Account Λνγαξηαζκφο Υξήζηε
Virtual Machine Δηθνληθή Μεραλή
Virtualization Δηθνληθνπνίεζε
WorkAround Πξφρεηξν Μπάισκα
Έμππλν Κηλεηφ Smart Phone
Αλάπνδα Δηζαγσγηθά Back Quotes
Αλαθνξά Πίζσ Back Reference
Απφιπηε Γηαδξνκή Absolute Path
Απνηακηεπηήο Buffer
Γηαδξνκή Path
Γηεξγαζία Process
Γηεξκελεπηήο Interpreter
Γηπιά Δηζαγσγηθά Double Quotes
εγρεηξίδην ρξήζεο manual page
Δηθνληθή Μεραλή Virtual Machine
Δηθνληθνπνίεζε Virtualization
Δηζαγσγηθά Quotes
Δλζσκαησκέλα Λεηηνπξγηθά ΢πζηήκαηα Embedded Operating Systems
Κέιπθνο Shell
Καλνληθή Έθθξαζε Regular Expression
Καηαλεκεκέλα Λεηηνπξγηθά ΢πζηήκαηα Distributed Operating Systems
Καηαλεκεκέλνο Τπνινγηζκφο Distributed Computing
θελφ δηάζηεκα space
Κεληξηθή Μνλάδα Δπεμεξγαζίαο Central Processing Unit
Κιήζε ΢πζηήκαηνο System Call
ΚΜΔ CPU
Λεηηνπξγηθά ΢πζηήκαηα Πξαγκαηηθνχ Real Time Operating Systems
Υξφλνπ
Λεηηνπξγηθφ ΢χζηεκα Operating System
Λνγαξηαζκφο Υξήζηε User Account
Μνλά Δηζαγσγηθά Single Quotes
Μνλψλ Δξγαζηψλ Single-tasking
Μνξθνπνίεζε Format
Πνιιαπιψλ Δξγαζηψλ Multi-tasking
Πξφρεηξν Μπάισκα WorkAround
Πξνηξνπή Prompt
Ρηδηθφο Καηάινγνο Root Directory
΢ήκα Signal
΢χλδεζκνο Link
΢πλέλσζε ΢πκβνινζεηξψλ String Concatenation

16
΢πζθεπή Δηζφδνπ-Δμφδνπ Input-Output Device
΢ρεηηθή Γηαδξνκή Relative Path
Σφκνο Partition
Σακπιέηα Tablet
Σξέρσλ Καηάινγνο Δξγαζίαο Current Working Directory
Τπεξρξήζηεο Superuser
Τπεξεζία Service
Υξνλνζθξαγίδα Timestamp

17
Πξόινγνο

Σν παξφλ βηβιίν γξάθηεθε γηα λα απνηειέζεη θπξίσο έλαλ εξγαζηεξηαθφ νδεγφ γηα ην κάζεκα «Δηζαγσγή
ζηα Λεηηνπξγηθά ΢πζηήκαηα», φπσο απηφ δηδάζθεηαη ζην Σκήκα Μεραληθψλ Πιεξνθνξηθήο ηνπ
Αιεμάλδξεηνπ ΣΔΗ Θεζζαινλίθεο. Πξνθαλψο, φκσο, κπνξεί λα ην ρξεζηκνπνηήζεη νπνηνζδήπνηε
ελδηαθέξεηαη λα κάζεη ηα βαζηθά ζηνηρεία ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο UNIX ή Linux.
Αλ θαη ε ζπγγξαθή ηνπ μεθίλεζε αξθεηά ρξφληα πξηλ κε ηε κνξθή απιψλ ζεκεηψζεσλ θαη
δηαθαλεηψλ ζην κάζεκα «Δηζαγσγή ζηα Λεηηνπξγηθά ΢πζηήκαηα», νινθιεξψλεηαη ηψξα ζηα πιαίζηα ηεο
Γξάζεο «Διιεληθά Αθαδεκατθά Ζιεθηξνληθά ΢πγγξάκκαηα θαη Βνεζήκαηα» (Δ.Α.Ζ.΢.Β.). Δπεηδή ζθνπφο
ηεο Γξάζεο είλαη ε εηζαγσγή ηνπ ειεθηξνληθνχ, δηαδξαζηηθνχ, πνιπκεζηθνχ βηβιίνπ ζηελ Αλψηαηε
Δθπαίδεπζε, ην παξφλ εγρεηξίδην δηακνξθψζεθε κε ηέηνηνλ ηξφπν, ψζηε λα εμππεξεηεί ηνλ παξαπάλσ ζθνπφ.
΢πλεπψο, πξνηείλεηαη ζηνλ αλαγλψζηε λα ρξεζηκνπνηεί ηελ ειεθηξνληθή έθδνζε ε νπνία αμηνπνηεί πιήζνο
δηαδξαζηηθψλ ζηνηρείσλ θαη κέζσλ γηα ηελ θαιχηεξε θαηαλφεζε θαη εκπέδσζε ηνπ πεξηερνκέλνπ ηνπ.

19
Δπραξηζηίεο

Ζ ζπγγξαθή ηνπ παξφληνο βηβιίνπ δελ ζα νινθιεξσλφηαλ ρσξίο ηε ζπκπαξάζηαζε κεξηθψλ αλζξψπσλ πνπ
παξείραλ ακέξηζηε βνήζεηα ζε δηάθνξα ζηάδηα ηεο πξνζπάζεηαο. Πξψηνλ απφ φινπο, ινηπφλ, ζα ήζεια λα
επραξηζηήζσ ηνλ Μελά Γαζπγέλε ν νπνίνο σο θξηηηθφο αλαγλψζηεο ζπλέβαιε ηα κέγηζηα ζηελ νινθιήξσζε
ηεο ζπγγξαθήο κε εχζηνρεο παξαηεξήζεηο θαη ζρφιηα. Δπίζεο, ηε Βαζηιάληα Κνπκπή ε νπνία ζπκκεηείρε
ελεξγά ζηε δηακφξθσζε ηνπ ηειηθνχ θεηκέλνπ, αιιά θαη ζηε δηδαζθαιία ηνπ ζρεηηθνχ καζήκαηνο ζηελ ηάμε.
Θεξκέο επραξηζηίεο ζηνλ Φψηε Υαηδφγινπ γηα ηε γισζζηθή επεμεξγαζία.
Αθφκε, ληψζσ ηελ αλάγθε λα επραξηζηήζσ φινπο φζνη ζπκκεηείραλ ηα ηειεπηαία ρξφληα ζηε
δηδαζθαιία ηνπ εξγαζηεξηαθνχ κέξνπο ηνπ καζήκαηνο «Δηζαγσγή ζηα Λεηηνπξγηθά ΢πζηήκαηα», νη νπνίνη
ζπλέβαιαλ ζηε δηακφξθσζε ηεο χιεο θαη ηνπ πιηθνχ γηα ην κάζεκα: Νίθν Φαξξά, Γεκήηξε Κιεθηνχξε,
Βαζηιάληα Κνπκπή, Κψζηα Γηαθνπζηίδε, Θαλάζε Μάξγαξε, Κπξηαθή Κσλζηαληηλίδνπ, ΢ηέθαλν
Καηζαβνχλε θαη Μηράιε ΢αββφπνπιν.
Δπηπιένλ, αλαθεξφκελνο ζηηο επραξηζηίεο, δελ ζα κπνξνχζα λα κελ αλαγλσξίζσ φηη ρσξίο ηε Γξάζε
«Διιεληθά Αθαδεκατθά Ζιεθηξνληθά ΢πγγξάκκαηα θαη Βνεζήκαηα» (Δ.Α.Ζ.΢.Β., ε νπνία πινπνηείηαη απφ
ηνλ ΢.Δ.Α.Β. θαη ην Δ.Μ.Π.), δελ ζα είρα ηε δπλαηφηεηα λα νινθιεξψζσ θαη λα εθδψζσ ην παξφλ βηβιίν.
Σέινο, πεξηζζφηεξν απφ φινπο ζα ήζεια λα επραξηζηήζσ ηελ νηθνγέλεηά κνπ, ηε ζχδπγφ κνπ Σδνχιηα
θαη ηελ θφξε κνπ Νηθνιία, απφ ηηο νπνίεο ζηέξεζα πνιιέο νηθνγελεηαθέο ζηηγκέο, πξνθεηκέλνπ λα
νινθιεξσζεί ην παξφλ ζχγγξακκα.

21
Δηζαγσγή

Σν παξφλ βηβιίν γξάθεθε γηα λα απνηειέζεη θπξίσο έλαλ εξγαζηεξηαθφ νδεγφ γηα ην κάζεκα «Δηζαγσγή ζηα
Λεηηνπξγηθά ΢πζηήκαηα», φπσο απηφ δηδάζθεηαη ζην Σκήκα Μεραληθψλ Πιεξνθνξηθήο ηνπ Αιεμάλδξεηνπ
ΣΔΗ Θεζζαινλίθεο. Πξνθαλψο, φκσο, κπνξεί λα ην ρξεζηκνπνηήζεη νπνηνζδήπνηε ελδηαθέξεηαη λα κάζεη ηα
βαζηθά ζηνηρεία ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο UNIX ή Linux.
Σν κάζεκα «Δηζαγσγή ζηα Λεηηνπξγηθά ΢πζηήκαηα» είλαη εηζαγσγηθφ ζην γλσζηηθφ αληηθείκελν ησλ
Λεηηνπξγηθψλ ΢πζηεκάησλ θαη έρεη σο βαζηθφ ζηφρν ηελ θαηαλφεζε ησλ γεληθψλ αξρψλ ησλ Λεηηνπξγηθψλ
΢πζηεκάησλ κέζσ ηεο ρξήζεο θαη πξνγξακκαηηζκνχ ζην UNIX. ΢ηφρνο ηνπ καζήκαηνο είλαη νη θνηηεηέο λα
κειεηήζνπλ θαη λα γλσξίζνπλ έλα Λεηηνπξγηθφ ΢χζηεκα πνπ εμαξρήο δεκηνπξγήζεθε γηα πξνγξακκαηηζηέο,
θαζψο θαη λα δηαθξίλνπλ ηε θηινζνθία πνπ θξχβεη έλα Λεηηνπξγηθφ ΢χζηεκα «πίζσ» απφ ηα γξαθηθά
πεξηβάιινληα. ΢ην κάζεκα θαινχληαη λα θαηαλνήζνπλ θαη λα εμεηάζνπλ ηνλ ηξφπν ρξήζεο ελφο θειχθνπο
θαζψο θαη πψο απηφ αιιειεπηδξά κε ην Λεηηνπξγηθφ ΢χζηεκα. ΢θνπφο ηνπ καζήκαηνο είλαη νη θνηηεηέο λα
θαηαλνήζνπλ πψο ιεηηνπξγεί έλα «Λεηηνπξγηθφ ΢χζηεκα» θαη πψο κπνξνχλ λα ην αμηνπνηήζνπλ. Καηά ηε
δηάξθεηα ηνπ καζήκαηνο νη θνηηεηέο έρνπλ ηε δπλαηφηεηα λα γλσξίζνπλ ηα ηζρπξά «φπια» πνπ έρεη έλαο
πξνγξακκαηηζηήο ρξεζηκνπνηψληαο έλα Λεηηνπξγηθφ ΢χζηεκα ζε επίπεδν θειχθνπο θαη λα γλσξίζνπλ ηε
θηινζνθία ηνπ «θάλσ πεξίπινθεο ελέξγεηεο ζπλδπάδνληαο απιέο απηφλνκεο εληνιέο πνπ επηθνηλσλνχλ
κεηαμχ ηνπο».
Με ηε κειέηε ηνπ παξφληνο εξγαζηεξηαθνχ νδεγνχ θαη ηελ επηηπρή νινθιήξσζε ηνπ καζήκαηνο, ν
θνηηεηήο ζα πξέπεη:
 λα θαηαλνήζεη ηηο βαζηθέο αξρέο ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο UNIX θαη ηνπ ηξφπνπ ιεηηνπξγίαο
ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο ζε ζρέζε κε ηε δηαρείξηζε αξρείσλ, ρξεζηψλ, νκάδσλ ρξεζηψλ,
δηεξγαζηψλ θαη ππξήλα.
 λα θαηαλνήζεη ηε ζρέζε Δθαξκνγέο-Κέιπθνο-Ππξήλαο,
 λα είλαη ζε ζέζε λα ρξεζηκνπνηεί ζην θέιπθνο βαζηθέο εληνιέο, κεηαβιεηέο θειχθνπο, κεηαβιεηέο
πεξηβάιινληνο
 λα θαηαλνήζεη ηε ρξήζε ησλ εηζαγσγηθψλ ("quotes"),
 λα κπνξεί λα εθαξκφζεη βαζηθέο εληνιέο δηαρείξηζεο θαη επεμεξγαζίαο αξρείσλ,
 λα θαηαλνήζεη ηε θηινζνθία ιεηηνπξγίαο ησλ ζπζηεκάησλ αξρείσλ,
 λα ρξεζηκνπνηεί ηνπο ραξαθηήξεο κπαιαληέξ,
 λα θαηαλνήζεη ηελ έλλνηα ησλ δηεξγαζηψλ, ηηο ηδηφηεηέο ηνπο θαη ηα ζήκαηα (signals) θαη λα κπνξεί
λα ηα ρεηξηζηεί επνηθνδνκεηηθά,
 λα γλσξίζεη ηνπο ηξφπνπο επηθνηλσλίαο ησλ δηεξγαζηψλ θαη λα κπνξεί λα ζπλζέζεη πεξίπινθεο
εληνιέο κε ζπλδπαζκφ απιψλ εληνιψλ,
 λα θαηαλνήζεη ηε θηινζνθία ησλ θίιηξσλ θαη λα κπνξεί λα δεκηνπξγήζεη θίιηξα ή λα ζπλδπάζεη
επνηθνδνκεηηθά ππάξρνληα θίιηξα,
 λα θαηαλνήζεη ηε ρξήζε ησλ Καλνληθψλ Δθθξάζεσλ θαη λα κπνξεί λα δεκηνπξγεί Καλνληθέο
Δθθξάζεηο,
 λα θαηαλνήζεη ηνλ ηξφπν ρεηξηζκνχ ησλ ζελαξίσλ θαη ησλ γισζζψλ ηχπνπ δηεξκελεπηή (interpreter)
απφ ην Λεηηνπξγηθφ ΢χζηεκα,
 λα γλσξίζεη ηηο δπλαηφηεηεο ηνπ θειχθνπο ζε ζρέζε κε ηνλ έιεγρν εθηέιεζεο εληνιψλ, ηνπο ηειεζηέο
εληνιψλ θαη ηηο δνκέο επαλάιεςεο.

΢ε ζπληνκία ην πεξηερφκελν ηνπ καζήκαηνο πεξηιακβάλεη:


 εηζαγσγή ζην UNIX: θαηαλφεζε ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο UNIX, Πεξηγξαθή ηεο θηινζνθίαο
θαη ηνπ ηξφπνπ ιεηηνπξγίαο ηνπ Λ.΢., Αξρεία, ρξήζηεο, νκάδεο ρξεζηψλ, δηεξγαζίεο, ππξήλαο,
 εθαξκνγέο-θέιπθνο-ππξήλαο: εηζαγσγή ζηε ρξήζε ηνπ θειχθνπο, ρξήζε βαζηθψλ εληνιψλ,
κεηαβιεηέο θειχθνπο, κεηαβιεηέο πεξηβάιινληνο, quotes, βαζηθέο εληνιέο δηαρείξηζεο θαη
επεμεξγαζίαο αξρείσλ,
 ζχζηεκα αξρείσλ: πξφζβαζε ζην ζχζηεκα αξρείσλ, δηαδξνκέο, άδεηεο πξφζβαζεο, δηαρείξηζε
αξρείσλ, ζχλδεζκνη, βαζηθνί ηχπνη ζπζηεκάησλ αξρείσλ ηνπ UNIX θαη άιισλ Λεηηνπξγηθψλ
΢πζηεκάησλ (fat, ntfs, ext, ...), ζπζθεπέο ζην UNIX,

23
 θέιπθνο θαη αξρεία: ρξήζε ραξαθηήξσλ κπαιαληέξ,
 δηεξγαζίεο: δηαρείξηζε δηεξγαζηψλ, ηδηφηεηεο, ζήκαηα, ην ζχζηεκα /proc,
 επηθνηλσλία δηεξγαζηψλ: δηαζσιήλσζε θαη αλαθαηεχζπλζε, ρξήζε θαη πξνγξακκαηηζκφο θίιηξσλ,
 Καλνληθέο Δθθξάζεηο θαη ε ρξήζε ηνπο κέζα απφ εξγαιεία ηνπ UNIX (grep, sed),
 πξνγξακκαηηζκφο ζην θέιπθνο: δηεξκελεπηέο εληνιψλ ζην UNIX, έιεγρνο εθηέιεζεο εληνιψλ,
ηειεζηέο εληνιψλ, δνκέο επαλάιεςεο.

Με ηελ επηηπρή νινθιήξσζε ηνπ καζήκαηνο ν θνηηεηήο έρεη απνθηήζεη ηηο παξαθάησ γλψζεηο θαη
δεμηφηεηεο:
 Μέζα απφ ηηο εξγαζηεξηαθέο αζθήζεηο έρεη ηελ επρέξεηα λα ρξεζηκνπνηήζεη επνηθνδνκεηηθά έλα
Λεηηνπξγηθφ ΢χζηεκα UNIX θαη κπνξεί λα πξνγξακκαηίδεη ρξεζηκνπνηψληαο γλσζηά εξγαιεία πνπ
ηνπ δίλνληαη απφ ην Λεηηνπξγηθφ ΢χζηεκα.
 Καηαλνεί ηηο βαζηθέο αξρέο ιεηηνπξγίαο ελφο Λεηηνπξγηθνχ ΢πζηήκαηνο, ψζηε λα εκβαζχλεη
παξαθάησ ζην κάζεκα «Αξρέο ζρεδίαζεο Λεηηνπξγηθψλ ΢πζηεκάησλ».
 Γηεπξχλεη ηηο γλψζεηο ηνπ θαη ηηο ηθαλφηεηέο ηνπ ζε ζρέζε κε ηνπο ηξφπνπο ρξήζεο ππνινγηζηψλ
πέξα απφ ηελ θιαζηθή ρξήζε κέζσ ησλ παξαζπξηθψλ πεξηβαιιφλησλ.

24
Κεθάιαην 1

1 Δηζαγσγή ζηα Λεηηνπξγηθά ΢πζηήκαηα θαη ην Unix

1.1 Ση είλαη Λεηηνπξγηθό ΢ύζηεκα - ΢θνπνί θαη Λεηηνπξγίεο


Λεηηνπξγηθφ ΢χζηεκα είλαη έλα πξφγξακκα (ή ζπιινγή πξνγξακκάησλ) ην νπνίν ειέγρεη θαη δηαρεηξίδεηαη ην
πιηθφ κηαο ππνινγηζηηθήο κεραλήο. Χο ππνινγηζηηθή κεραλή ζπλήζσο ελλννχκε έλαλ πξνζσπηθφ ππνινγηζηή
θαη αλαθεξφκαζηε ζε απηφλ ζπλήζσο κε ηελ νλνκαζία Personal Computer (PC) ή Ζιεθηξνληθφο Τπνινγηζηήο
(H/Y). ΢ηελ πξαγκαηηθφηεηα, φκσο, νη ππνινγηζηηθέο κεραλέο είλαη πνιιέο πεξηζζφηεξεο απφ ηε ζηελή
έλλνηα ελφο Ζ/Τ. Σα ηειεπηαία ρξφληα έρνπλ θαηαθιείζεη ηελ αγνξά κεραλέο φπσο νη ηακπιέηεο (tablets) νη
νπνίεο δελ ζεσξνχληαη Ζ/Τ κε ηελ ζηελή έλλνηα, αιιά έρνπλ φιεο ηηο ηδηφηεηεο (θαη ηηο ηθαλφηεηεο πνιιέο
θνξέο) ελφο πξνζσπηθνχ ππνινγηζηή. Δπίζεο, ηα «έμππλα» θηλεηά ηειέθσλα (smart phones) κνηάδνπλ πιένλ
πεξηζζφηεξν κε Ζ/Τ παξά κε ηειέθσλν, φπσο ήηαλ ζηελ αξρή ηεο ρηιηεηίαο. Σα δπν πξνεγνχκελα είλαη
ελδεηθηηθά παξαδείγκαηα ππνινγηζηηθήο κεραλήο πνπ ειέγρεηαη απφ θάπνην Λεηηνπξγηθφ ΢χζηεκα. Όινη
πιένλ γλσξίδνπλ ην Android, Windows Mobile, Symbian, ηα νπνία είλαη Λεηηνπξγηθά ΢πζηήκαηα γηα θηλεηέο
ζπζθεπέο. ΢παλίσο, φκσο, καο έξρεηαη ζην κπαιφ φηη ππνινγηζηηθέο κεραλέο είλαη θαη νη DVD-Video Players,
ηειενξάζεηο, ζηαζεξά ηειέθσλα, ειεθηξνληθά ζεξκφκεηξα, εθηππσηέο θ.ά. Οη παξαπάλσ ζπζθεπέο έρνπλ
εμεηδηθεπκέλα Λεηηνπξγηθά ΢πζηήκαηα κε ηε βνήζεηα ησλ νπνίσλ κπνξνχκε λα ηηο δηαρεηξηδφκαζηε θαη λα ηηο
ρξεζηκνπνηνχκε. Δπίζεο, Λεηηνπξγηθά ΢πζηήκαηα ππάξρνπλ θαη ζε ιηγφηεξν θαζεκεξηλήο ρξήζεο ζπζθεπέο
φπσο ηαηξηθά κεραλήκαηα, βηνκεραληθά ξνκπφη, νη ειεθηξνληθνί «εγθέθαινη» ησλ απηνθηλήησλ θ.ν.θ.
΢χκθσλα κε ηνλ νξηζκφ πνπ δίλεηαη ζηελ έλλνηα Λεηηνπξγηθφ ΢χζηεκα ζηελ wikipedia.org [5]:
Λεηηνπξγηθό ΢ύζηεκα είλαη έλα ινγηζκηθό ην νπνίν ειέγρεη ηνπο πόξνπο (πιηθνύ θαη ινγηζκηθνύ) ελόο
ππνινγηζηή, θαζώο επίζεο παξέρεη θνηλέο ππεξεζίεο πξνο ηα πξνγξάκκαηα ππνινγηζηώλ. Σν ιεηηνπξγηθό
ζύζηεκα είλαη έλα βαζηθό ζπζηαηηθό ηνπ ινγηζκηθνύ ηνπ ζπζηήκαηνο ζε έλα ζύζηεκα ππνινγηζηή. Σα
πξνγξάκκαηα εθαξκνγώλ ζπλήζσο απαηηνύλ ηελ ύπαξμε ελόο Λεηηνπξγηθνύ ΢πζηήκαηνο γηα λα ιεηηνπξγήζνπλ.
Με απιά ιφγηα, έλα Λεηηνπξγηθφ ΢χζηεκα έρεη νπζηαζηηθά δπν βαζηθέο αξκνδηφηεηεο:
1. Κάλεη δηαρείξηζε ησλ πφξσλ ηνπ πιηθνχ ηνπ ππνινγηζηή (ή γεληθά ηεο ππνινγηζηηθήο κεραλήο) φπσο ησλ
ζπζθεπψλ Δηζφδνπ-Δμφδνπ (πιεθηξνιφγην, πνληίθη, νζφλε, θάξηα δηθηχνπ θηι.) θαη ησλ ζπζθεπψλ
κλήκεο (RAM, δίζθνη θηι).
2. Κάλεη δηαρείξηζε ησλ δηεξγαζηψλ πνπ εθηεινχληαη αλαιακβάλνληαο ηηο παξαθάησ ελέξγεηεο:
 δεκηνπξγία θαη ηεξκαηηζκφ δηεξγαζίαο,
 δηαδηεξγαζηαθή επηθνηλσλία,
 δξνκνιφγεζε δηεξγαζηψλ - απνθαζίδεη δειαδή ζε πνηα δηεξγαζία ζα αθηεξσζεί ε ΚΜΔ (CPU).

1.2 Καηεγνξίεο Λεηηνπξγηθώλ ΢πζηεκάησλ


Τπάξρνπλ δηάθνξεο θαηεγνξηνπνηήζεηο Λεηηνπξγηθψλ ΢πζηεκάησλ. ΢εκαληηθφηεξεο είλαη νη παξαθάησ:
 Πνιιαπιψλ Δξγαζηψλ (Multi-Tasking) θαη Μνλψλ Δξγαζηψλ (Single-Tasking) Λεηηνπξγηθά ΢πζηήκαηα,
 Πνιιαπιψλ ρξεζηψλ (multi-user) θαη κνλνχ ρξήζηε (single-user) Λεηηνπξγηθά ΢πζηήκαηα,
 Λεηηνπξγηθά ΢πζηήκαηα Πξαγκαηηθνχ Υξφλνπ (Real-time Operating Systems),
 Καηαλεκεκέλα Λεηηνπξγηθά ΢πζηήκαηα (Distributed Operating Systems),
 Δλζσκαησκέλα Λεηηνπξγηθά ΢πζηήκαηα (Embedded Operating Systems).

1.2.1 Πνιιαπιώλ Δξγαζηώλ (Multi-Tasking) θαη Μνλώλ Δξγαζηώλ (Single-Tasking)


Λεηηνπξγηθά ΢πζηήκαηα

Δάλ έλα Λεηηνπξγηθφ ΢χζηεκα επηηξέπεη ηελ παξάιιειε εθηέιεζε πνιιψλ πξνγξακκάησλ (tasks), ηφηε
νλνκάδεηαη Πνιιαπιώλ Δξγαζηώλ. Δάλ επηηξέπεηαη ε εθηέιεζε κφλν ελφο πξνγξάκκαηνο θάζε θνξά, ηφηε
νλνκάδεηαη Μνλήο Δξγαζίαο. Δδψ, πξέπεη λα επηζεκάλνπκε πσο γηα ηελ παξάιιειε εθηέιεζε πξνγξακκάησλ

25
δελ είλαη απαξαίηεην λα δηαζέηεη ην πιηθφ ηνπ ππνινγηζηή πνιινχο επεμεξγαζηέο, νχηε πνιινχο ππξήλεο
επεμεξγαζηψλ. Σα Πνιιαπιώλ Δξγαζηώλ Λεηηνπξγηθά ΢πζηήκαηα θαηαθέξλνπλ λα εθηεινχλ ςεπδν-
παξάιιεια πνιιέο δηεξγαζίεο (ή εξγαζίεο) ζε έλαλ κφλν επεμεξγαζηή. Απηφ επηηπγράλεηαη κε ηελ ελαιιαγή
ησλ δηεξγαζηψλ ζηνλ επεμεξγαζηή - θάζε ιίγν ρξφλν παχεη ε εθηέιεζε κηαο δηεξγαζίαο θαη εθηειείηαη ε
επφκελε. Γηα ην πψο επηηπγράλεηαη απηφ, ππάξρνπλ δπν βαζηθέο πνιηηηθέο, νη νπνίεο νξίδνπλ θαη ηηο
αληίζηνηρεο θαηεγνξίεο Λεηηνπξγηθψλ ΢πζηεκάησλ:
 pre-emptive: ρσξίδεηαη ν «ρξφλνο» ζε θνκκάηηα (time slots) θαη ην Λεηηνπξγηθφ ΢χζηεκα δίλεη ζε θάζε
δηεξγαζία έλα θνκκάηη ρξφλνπ. ΢ε απηήλ ηελ θαηεγνξία αλήθνπλ φιεο νη παξαιιαγέο ηνπ UNIX θαη νη
λεψηεξεο εθδφζεηο ησλ MS Windows.
 co-operative: κηα δηεξγαζία (πξφγξακκα) θαηαιακβάλεη ηε CPU, θαη φηαλ απνθαζίζεη ε ίδηα (π.ρ. φζν
ρξφλν πεξηκέλεη λα δηαβάζεη θάηη απφ ηνλ δίζθν) παξαρσξεί ηνλ επεμεξγαζηή ζε επφκελε δηεξγαζία. ΢ε
απηήλ ηελ θαηεγνξία αλήθαλ νη εθδφζεηο ησλ MS Windows πξηλ απφ ηα Windows95.

1.2.2 Πνιιαπιώλ ρξεζηώλ (multi-user) θαη κνλνύ ρξήζηε (single-user) Λεηηνπξγηθά


΢πζηήκαηα

Σα Λεηηνπξγηθά ΢πζηήκαηα πνπ είλαη πνιιαπιώλ ρξεζηώλ επηηξέπνπλ ηε ρξήζε ηνπ ππνινγηζηή απφ πνιινχο
ρξήζηεο ζπγρξφλσο. Σέηνηα παξαδείγκαηα είλαη φιεο νη παξαιιαγέο ηνπ UNIX (unix-like operating systems)
θαη ηα MS-windows κεηά ηα ΝΣ4 (windows 2000, XP, 7, 8 θ.ά.). Σα κνλνύ ρξήζηε Λεηηνπξγηθά ΢πζηήκαηα
επηηξέπνπλ ηε ρξήζε ηνπ ππνινγηζηή κφλν απφ έλαλ ρξήζηε. Σέηνηα παξαδείγκαηα είλαη νη παιαηφηεξεο
εθδφζεηο ησλ MS windows (windows 3.x, windows 95, windows 97 θ.ά.) θαζψο θαη νη παξαιιαγέο ηνπ DOS
(MSDOS,AMSDOS, PCDOS, θ.ά.). Δδψ, πξέπεη λα ζεκεηψζνπκε πσο αλ έλα Λεηηνπξγηθφ ΢χζηεκα έρεη ηε
δπλαηφηεηα γηα νξηζκφ ινγαξηαζκψλ πνιιψλ ρξεζηψλ (user accounts) δελ είλαη ππνρξεσηηθά Πνιιαπινύ
Υξήζηε. Σέηνην παξάδεηγκα είλαη ηα windows 97, ζηα νπνία, αλ θαη κπνξνχλ λα δεκηνπξγεζνχλ πνιινί
ινγαξηαζκνί ρξεζηψλ, κφλν έλαο ρξήζηεο κπνξεί λα ρξεζηκνπνηεί ηνλ ππνινγηζηή θάζε ρξνληθή ζηηγκή,
δειαδή δελ κπνξνχλ λα εθηεινχληαη πξνγξάκκαηα άιισλ ρξεζηψλ ζην παξαζθήλην. Να ζεκεηψζνπκε,
επίζεο, πσο, γηα λα είλαη έλα Λεηηνπξγηθφ ΢χζηεκα πνιιαπιώλ ρξεζηώλ πξέπεη λα είλαη ππνρξεσηηθά
θαη Πνιιαπιώλ Δξγαζηώλ. Αλ έλα Λεηηνπξγηθφ ΢χζηεκα είλαη κνλνχ ρξήζηε, ηφηε κπνξεί λα είλαη
είηε Πνιιαπιώλ Δξγαζηώλ, είηε Μνλήο Δξγαζίαο. Παξάδεηγκα ηα Windows 95 είλαηκνλνύ
ρξήζηε θαη πνιιαπιώλ εξγαζηώλ, ελψ ην MSDOS είλαη κνλνύ ρξήζηε θαη κνλήο εξγαζίαο. Πιένλ, ηα
πεξηζζφηεξα κνληέξλα Λεηηνπξγηθά ΢πζηήκαηα είλαη θαη πνιιαπιώλ εξγαζηώλ θαη πνιιαπιώλ ρξεζηώλ.

1.2.3 Καηαλεκεκέλα Λεηηνπξγηθά ΢πζηήκαηα (Distributed Operating Systems)

Έλα θαηαλεκεκέλν Λεηηνπξγηθφ ΢χζηεκα δηαρεηξίδεηαη έλα ζχλνιν απφ ππνινγηζηέο θαη δίλεη ηελ αίζζεζε
ζηνπο ρξήζηεο φηη πξφθεηηαη γηα έλαλ ππνινγηζηή. Ζ αλάπηπμε ησλ δηθηχσλ θαη πιένλ ηνπ ζχλλεθνπ (cloud)
έρνπλ δψζεη ψζεζε ζηνλ Καηαλεκεκέλν Τπνινγηζκφ (Distributed Computing). Όηαλ έλα ζχλνιν απφ
ππνινγηζηέο εξγάδνληαη ζε ζπλεξγαζία ηφηε ιέκε φηη απνηεινχλ έλα Καηαλεκεκέλν ΢χζηεκα.

1.2.4 Λεηηνπξγηθά ΢πζηήκαηα Πξαγκαηηθνύ Χξόλνπ (Real-time Operating Systems)

Έλα Λεηηνπξγηθφ ΢χζηεκα Πξαγκαηηθνχ ρξφλνπ εγγπάηαη φηη κπνξεί λα επεμεξγαζηεί «γεγνλφηα» (events) ή
δεδνκέλα ζε ζπγθεθξηκέλν ρξφλν. Μπνξεί λα είλαη κνλήο εξγαζίαο ή πνιιαπιώλ εξγαζηώλ. Όηαλ είλαη
πνιιαπιψλ εξγαζηψλ, ηφηε απαηηείηαη ε ρξήζε εμεηδηθεπκέλσλ αιγνξίζκσλ γηα ηελ εθηέιεζε ησλ δηεξγαζηψλ
ζε πξαγκαηηθφ ρξφλν. Σέηνηνπ ηχπνπ Λεηηνπξγηθά ΢πζηήκαηα ζπλαληνχκε ζε ππνινγηζηέο ή ππνινγηζηηθέο
κεραλέο πνπ ρεηξίδνληαη ηαηξηθά κεραλήκαηα, εξγνζηαζηαθέο κνλάδεο παξαγσγήο, έιεγρν αεξνπιάλσλ,
έιεγρν απηνθηλήησλ θ.η.ι.

1.2.5 Δλζσκαησκέλα Λεηηνπξγηθά ΢πζηήκαηα (Embedded Operating Systems)

Σα Λεηηνπξγηθά ΢πζηήκαηα πνπ ελζσκαηψλνληαη ζην πιηθφ νλνκάδνληαη Δλζσκαησκέλα (Embedded). Δίλαη
ζρεδηαζκέλα εηδηθά γηα ηελ θάζε κεραλή θαη πξνηηκψληαη ζε κηθξέο κεραλέο (π.ρ. PDAs), επεηδή ιεηηνπξγνχλ

26
κε πεξηνξηζκέλν αξηζκφ πφξσλ θαζψο θαη γηα ζπζηήκαηα πξαγκαηηθνχ ρξφλνπ. Παξαδείγκαηα απηήο ηεο
θαηεγνξίαο είλαη:
 PDAs: Windows CE, Windows Mobile, SymbianOS, iOS, Embedded Linux (Maemo based on Debian ,
MeeGo merger of Moblin and Maemo, webOS from Palm, Inc., OpenZaurus, Metano GNU/Linux from
Pynell, Android) θ.ά.,
 Digital media players (DSPnano RTOS, ipodlinux, RockBox, iOS, θ.ά.),
 Smartphones and Mobile phones
o BlackBerry OS,
o Embedded Linux (Access Linux Platform, Android, Metano Linux ME/LX, bada, Openmoko
Linux, Ophone, MeeGo (from merger of Maemo & Moblin), Mobilinux, MotoMagx, Qt
Extended, LiMo, Platform, webOS),
o PEN/GEOS, GEOS-SC, GEOS-SE,
o iOS (ππνζχλνιν ηνπ Mac OS X),
o Palm OS,
o Symbian platform, Symbian OS,
o Windows Mobile
 θ.ά.

Πνιινί ζεσξνχλ φηη ηα Λεηηνπξγηθά ΢πζηήκαηα γηα έμππλα θηλεηά ηειέθσλα (smart phones) θαη
ηακπιέηεο (tablets) απνηεινχλ μερσξηζηή θαηεγνξία: Λεηηνπξγηθά ΢πζηήκαηα Κηλεηψλ (Mobile Operating
Systems). ΢ηελ πξαγκαηηθφηεηα φκσο πξφθεηηαη γηα ελζσκαησκέλα Λεηηνπξγηθά ΢πζηήκαηα.

1.3 To Λεηηνπξγηθό ΢ύζηεκα UNIX

1.3.1 Λίγε Ιζηνξία

Ζ ηζηνξία ηνπ Unix μεθηλά πεξίπνπ ζηα κέζα ηεο δεθαεηίαο ηνπ 1960, φηαλ ην Σερλνινγηθφ Ηλζηηηνχην
Μαζαρνπζέηεο (Μ.Η.Σ.), ε AT&T, ε Bell Labs θαη ε General Electric αλέπηπμαλ έλα πεηξακαηηθφ
Λεηηνπξγηθφ ΢χζηεκα θαηακεξηζκνχ ρξφλνπ γηα ηνλ ππνινγηζηή ηχπνπ mainframe GE-645. Σν ιεηηνπξγηθφ
απηφ ζχζηεκα νλνκάζηεθε Multics [1]. Σν Multics εηζήγαγε πνιιέο θαηλνηνκίεο αιιά είρε πνιιά
πξνβιήκαηα. Απνγνεηεπκέλνη απφ ην κέγεζνο θαη ηελ πνιππινθφηεηα ηνπ Multics, ηα ζηειέρε ηεο Bell Labs
εγθεηέιεηςαλ ην έξγν. Οη ηειεπηαίνη εξεπλεηέο πνπ εξγάδνληαλ ζην MULTICS, νη Ken Thompson, Dennis
Ritchie, MD McIlroy θαη JF Ossanna, απνθάζηζαλ λα μαλαυινπνηήζνπλ ην Λεηηνπξγηθφ ΢χζηεκα ζε
κηθξφηεξε θιίκαθα γηα ηνλ ππνινγηζηή DPD-7 ηεο DEC. H έθδνζε απηή αξγφηεξα νλνκάζηεθε Unics
(UNiplexed Information and Computing Service) σο έλα ινγνπαίγλην κε ηελ πξνεγνχκελε νλνκαζία Multics
(Multiplexed Information and Computer Services). Σν λέν ιεηηνπξγηθφ ζχζηεκα ήηαλ κηα κηθξφηεξε έθδνζε
ηνπ Multics θαη αξρηθά θαηαζθεπάζηεθε γηα ηε κεραλή PDP-7 [2].
Σν 1970, ην UNIX κεηαθέξζεθε ζε PDP-11, γηα λα ππνζηεξίμεη ην γξαθείν επξεζηηερληψλ ησλ Bell
Labs. Δλψ ην 1973 μαλαγξάθηεθε ζε γιψζζα C απφ ηνλ Dennis Ritchie γηα λα δηεπθνιπλζεί ε
κεηαθεξζηκφηεηά ηνπ ζε κειινληηθά ζπζηήκαηα.
Σν UNIX ζηα κέζα ηεο δεθαεηίαο 1970 έσο ηηο αξρέο ηεο δεθαεηίαο 1980 έγηλε πνιχ δεκνθηιέο «γηα
εθπαηδεπηηθνχο ζθνπνχο» ζε αθαδεκατθά πεξηβάιινληα. Σν 1977 ην Παλεπηζηήκην Berkeley (California)
έδσζε ζηε δεκνζηφηεηα ηηο αξρηθέο εθδφζεηο ηνπ Berkeley Software Distribution (BSD) UNIX πνπ ηειηθά
θαηέζηε κηα αλεμάξηεηε κνξθή ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο. Σν 1983 ηα Bell Labs έδσζαλ ζηε
δεκνζηφηεηα ην System V πνπ έγηλε ε ζχγρξνλε πξνζσπνπνίεζε ηνπ απζεληηθνχ ζπζηήκαηνο UNIX.
Σα ζπζηήκαηα UNIX αθφκε θαη ζήκεξα είλαη έλαο ζπλδπαζκφο ησλ εθδφζεσλ System V θαη BSD
θαη πξνζπαζνχλ λα ελζσκαηψζνπλ ηα απαξαίηεηα ραξαθηεξηζηηθά πνπ επηβάιιεη ε απνδνρή ησλ παξαπάλσ
πξνηχπσλ.

1.3.2 Δθδόζεηο

΢ην ΢ρήκα 1.1 παξνπζηάδεηαη ζρεκαηηθά ε ηζηνξία ησλ δηαθφξσλ εθδφζεσλ UNIX. Απφ ην παξαθάησ ζρήκα
νη πεξηζζφηεξνη (εηδηθά νη λεψηεξνη) ηα κφλα πνπ έρνπλ αθνχζεη έζησ νλνκαζηηθά είλαη ην Linux θαη ην Mac

27
OS X. Καη φκσο, ην Linux θαη ην Mac OS X είλαη κφλν έλα κηθξφ ηκήκα ζε φιν απηφ ην ηεξάζηην δέληξν, ην
νπνίν απ' φηη βιέπνπκε έρεη ηε ξίδα ηνπ ην 1969 θαη ζπλερίδεη λα αλαπηχζζεηαη.

΢ρήκα 1.1: H ηζηνξία ηνπ UNIX (πεγή: http://en.wikipedia.org/Unix [6]).

1.3.3 To Linux

Σν Linux, φπσο θαίλεηαη θαη ζην παξαπάλσ ζρήκα (΢ρήκα 1.1) απνηειεί έλα κηθξφ ππνζχλνιν ζηελ φιε
ηζηνξία εθδφζεσλ ηνπ UNIX. Δίλαη κηα παξαιιαγή ηνπ UNIX εηδηθά ζρεδηαζκέλε γηα ηελ αξρηηεθηνληθή ηνπ
PC (φηαλ δεκηνπξγήζεθε ην Linux ρξεζηκνπνηνχληαλ ν φξνο IBM PC ή IBM compatible). Σελ αξρηθή
έθδνζε δεκνζηεζε ζην Γηαδίθηπν ν Linus Torvalds απφ ηε θηιαλδία ην 1991. Δίλαη δσξεάλ γηα ρξήζε θαη ν
πεγαίνο θψδηθαο είλαη δηαζέζηκνο ππφ ηελ πξνζηαζία ηεο Free Software Foundation (FSF) GNU Project.
Πεξηέρεη φια ηα ραξαθηεξηζηηθά ηνπ UNIX.
Λφγσ ηεο εκπνξηθήο επηθξάηεζεο ησλ PC, αλαπηχρζεθαλ πνιιέο δηαλνκέο Linux. Οη δηαλνκέο
κεηαμχ ηνπο δελ έρνπλ δηαθνξέο ζην ίδην ην Λεηηνπξγηθφ ΢χζηεκα θαη ηνλ ππξήλα, αιιά θπξίσο ζηνλ ηξφπν
κε ηνλ νπνίν δηαρεηξίδεηαη θαη εγθαζηζηά ν ρξήζηεο πξνγξάκκαηα θαη ιεηηνπξγίεο, φπσο επίζεο θαη ζηνλ
ηξφπν κε ηνλ νπνίν γίλεηαη ε ξχζκηζε παξακέηξσλ (configuration) ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο. ΢ην
παξαθάησ ζρήκα (Γηαδξαζηηθφ ΢ρήκα 1.2) θαίλεηαη ζρεκαηηθά ε ηζηνξία αλάπηπμεο ησλ δηαλνκψλ Linux. Οη
βαζηθέο δηαλνκέο είλαη νη:
 debian
 redhat
 slackware
Όιεο νη ππφινηπεο δηαλνκέο είλαη παξαιιαγέο (ή εμεηδηθεπκέλεο δηακνξθψζεηο) ησλ ηξηψλ απηψλ
δηαλνκψλ. Γηα παξάδεηγκα ην Ubuntu, ην νπνίν είλαη αξθεηά δεκνθηιέο ζηηο κέξεο καο ιφγσ ηεο επθνιίαο
εγθαηάζηαζεο, βαζίδεηαη ζην debian. Γηα ην Ubuntu ππάξρνπλ δηάθνξεο παξαιιαγέο φπσο Ubuntu Server,
Ubuntu Desktop, KUbuntu, Xubuntu θ.ά. Όιεο απηέο νη δηαλνκέο δηαθέξνπλ κεηαμχ ηνπο κφλν ζηηο αξρηθέο
ξπζκίζεηο θαη ζηα αξρηθά πξνγξάκκαηα πνπ εγθαζίζηαληαη απηνκάησο. Έρνληαο θάλεη εγθαηάζηαζε έλα

28
“Ubuntu Server”, κπνξνχκε ζηελ πνξεία θάλνληαο εγθαηάζηαζε ή απεγθαηάζηαζε δηαθφξσλ πξνγξακκάησλ
θαη δπλαηνηήησλ λα ην κεηαηξέςνπκε νπζηαζηηθά ζε “Ubuntu Desktop”.

 Σν παξφλ ΢ρήκα είλαη Γηαδξαζηηθφ ΢ρήκα θαη πεξηέρεηαη


κφλν ζηελ ειεθηξνληθή έθδνζε ηνπ βηβιίνπ.

΢ρήκα 1.2: H ηζηνξία ηνπ Linux (πεγή: http://en.wikipedia.org/Linux [4]).

1.3.4 Χαξαθηεξηζηηθά

΢ην ΢ρήκα 1.3 θαίλεηαη ε ηεξαξρία ζε έλα ζχζηεκα UNIX. Ξεθηλψληαο απφ θάησ πξνο ηα πάλσ, θαίλεηαη φηη
ν ππξήλαο είλαη ην κφλν ζηνηρείν πνπ επηθνηλσλεί κε ην πιηθφ ηνπ ππνινγηζηή. Οη εθαξκνγέο επηθνηλσλνχλ
κε ηνλ ππξήλα, θαη ηειηθά κφλν κέζσ απηνχ κπνξνχλ λα θάλνπλ ρξήζε ηνπ πιηθνχ. Οη ρξήζηεο
ρξεζηκνπνηνχλ εθαξκνγέο νη νπνίεο πξνσζνχλ ηηο ιεηηνπξγίεο ηνπο πξνο ηα θάησ. Σν θέιπθνο είλαη ζηελ
πξαγκαηηθφηεηα κηα εθαξκνγή. Ζ κφλε, αιιά πνιχ ζεκαληηθή, ιεηηνπξγία πνπ έρεη ην θέιπθνο είλαη λα
πξνσζεί ηηο εληνιέο ησλ ρξεζηψλ πξνο ηνλ ππξήλα. Οη εθαξκνγέο πνπ κπνξνχλ λα ρξεζηκνπνηήζνπλ νη
ρξήζηεο κπνξεί λα είλαη είηε γξαθηθέο, δειαδή λα ιεηηνπξγνχλ κέζσ ηνπ γξαθηθνχ πεξηβάιινληνο (π.ρ.:
firefox, chrome, openOffice θηι.), είηε λα εθηεινχληαη κέζα απφ έλα ηεξκαηηθφ. Σν θέιπθνο είλαη κηα
εθαξκνγή ρσξίο γξαθηθή δηεπηθάλεηα ρξήζεο θαη εθηειείηαη κέζα ζε έλα ηεξκαηηθφ.

Χρήστης - User

Εφαρμογή - Application

Λειτουργικό Σφστημα -
Operating System

Υλικό - Hardware

΢ρήκα 1.3: Ιεξαξρία ζε έλα Λεηηνπξγηθό ζύζηεκα.

1.3.5 Κύθινο δηεξκήλεπζεο εληνιήο θειύθνπο

΢ηνλ παξφληα εξγαζηεξηαθφ νδεγφ ζα κειεηήζνπκε ηελ ρξήζε ηνπ UNIX (Linux) ρξεζηκνπνηψληαο ηελ
γξακκή εληνιψλ θαη ζπγθεθξηκέλα ην θέιπθνο bash. Παξαθάησ, ζα αλαθεξζνχκε αλαιπηηθά ζηνλ ηξφπν
ιεηηνπξγίαο ηνπ θειχθνπο. Απηφ πνπ πξέπεη λα επηζεκαλζεί ζε απηφ ην ζεκείν είλαη πσο ην θέιπθνο είλαη έλα
πξφγξακκα ην νπνίν αλαιακβάλεη λα δηαβάδεη ηηο εληνιέο ηνπ ρξήζηε θαη λα δίλεη ηηο θαηάιιειεο
πιεξνθνξίεο-εληνιέο ζηνλ ππξήλα γηα εθηέιεζε.
1. Δκθάληζε ηνπ prompt (πξνηξνπήο). Γειψλεη φηη ην θέιπθνο είλαη έηνηκν λα δερηεί ηελ επφκελε εληνιή.
2. Λήςε θαη γξακκαηηθή αλάιπζε ηεο ζχληαμεο ηεο επφκελεο εληνιήο,
3. Δθηέιεζε ηεο δηαδηθαζίαο εηζφδνπ θαη κεηαζρεκαηηζκφο ηεο εληνιήο,
4. Αξρηθνπνίεζε ησλ απαηηνχκελσλ ιεηηνπξγηψλ,
5. Αλακνλή γηα νινθιήξσζε ησλ ιεηηνπξγηψλ πνπ είλαη ζε εμέιημε,
6. Δπηζηξνθή ζην βήκα 1.

29
΢ηελ νπζία, ινηπφλ, ην θέιπθνο είλαη έλα πξφγξακκα πνπ πεξηκέλεη ηνλ ρξήζηε λα πιεθηξνινγήζεη
κηα εληνιή. Μφιηο ν ρξήζηεο ηελ πιεθηξνινγήζεη, ηελ εξκελεχεη θαη θάλεη ηηο απαξαίηεηεο ελέξγεηεο γηα ηελ
εθηέιεζή ηεο. Αθνχ νινθιεξσζεί ε εθηέιεζε, ηφηε πεξηκέλεη γηα ηελ επφκελε εληνιή.

1.3.6 Βαζηθέο Οληόηεηεο

΢ε έλα ζχζηεκα UNIX ππάξρνπλ θάπνηεο βαζηθέο έλλνηεο πνπ πξέπεη λα κειεηήζνπκε πξηλ πξνρσξήζνπκε
ζηελ ρξήζε ηνπο. Απηέο πεξηιεπηηθά είλαη νη:
 Αξρεία,
 Υξήζηεο θαη Οκάδεο Υξεζηψλ,
 Γηεξγαζίεο (Processes) .

1.3.7 Αξρεία

΢ε έλαλ ππνινγηζηή κηα απφ ηηο βαζηθφηεξεο νληφηεηεο είλαη ηα αξρεία. Αξρείν (ππνινγηζηή) είλαη έλα
ζχλνιν απφ δεδνκέλα. Σα δεδνκέλα απηά κπνξνχλ λα πθίζηαληαη ζε δηάθνξεο κνξθέο, φπσο αξρείν θεηκέλνπ,
αξρείν θσηνγξαθίαο, αξρείν βίληεν, αξρείν πνπ αληηζηνηρεί ζε πξφγξακκα θ.ά. Δπίζεο αξρείν είλαη θαη κηα
ζπιινγή απφ άιια αξρεία. Ζ ζπιινγή απηή νλνκάδεηαη θάθεινο ή θαηάινγνο (folder ή directory). Μάιηζηα
ζην UNIX ε έλλνηα ηνπ αξρείνπ είλαη αξθεηά δηεπξπκέλε. Χο αξρεία αλαπαξηζηψληαη θαη νη πφξνη ηνπ
ππνινγηζηή. Έηζη ζην UNIX ππάξρνπλ δηάθνξνη ηχπνη αξρείσλ:

 Απιά Αξρεία: ΢ε απηήλ ηελ θαηεγνξία αλήθνπλ:


o Αξρεία δεδνκέλσλ: Πεξηέρνπλ δεδνκέλα φπσο φζα αλαθέξζεθαλ λσξίηεξα, δειαδή θείκελα,
εηθφλεο, πξνγξάκκαηα θηι. θαη είλαη ν ζπλεζέζηεξνο ηχπνο αξρείσλ. ΢πλήζσο, φηαλ
ρξεζηκνπνηνχκε ηνλ φξν «αξρείν», ελλννχκε αξρείν απηνχ ηνπ ηχπνπ.
o Φάθεινη: Δίλαη εηδηθνχ ηχπνπ αξρεία ηα νπνία πεξηέρνπλ άιια αξρεία νπνηνπδήπνηε ηχπνπ
(αξρεία δεδνκέλσλ, θαθέινπο, θ.ά.)
o Αξρεία ζπλδέζκσλ: ΢ην Λεηηνπξγηθφ ΢χζηεκα Windows ρξεζηκνπνηείηαη ν φξνο ζπληφκεπζε
(shortcut) ελψ ζην UNIX ρξεζηκνπνηείηαη ν φξνο ζχλδεζκνο (link).
 Αξρεία ΢πζθεπώλ: Σν UNIX αλαπαξηζηά φιεο ηηο ζπζθεπέο ηνπ ππνινγηζηή σο αξρεία. Έλα
απινπνηεκέλν παξάδεηγκα είλαη κηα θάξηα δηθηχνπ. Γηα ηελ θάξηα δηθηχνπ ηνπ ππνινγηζηή ππάξρεη θαη
έλα αξρείν ην νπνίν αληηζηνηρεί ζηελ θάξηα. Σν αξρείν ρξεζηκεχεη σο interface (δηεπηθάλεηα) γηα
πξφζβαζε ζηελ θάξηα δηθηχνπ απφ πξνγξάκκαηα ή ππεξεζίεο. Έηζη φηαλ έλα πξφγξακκα γξάθεη
δεδνκέλα ζην αξρείν πνπ αληηζηνηρεί ζηελ θάξηα δηθηχνπ, απηά ηειηθά «ζηέιλνληαη» ζην δίθηπν. Όηαλ
έλα πξφγξακκα δηαβάδεη δεδνκέλα απφ ην αξρείν πνπ αληηζηνηρεί ζηελ θάξηα δηθηχνπ, δηαβάδεη ζηελ
πξαγκαηηθφηεηα δεδνκέλα πνπ πξνέξρνληαη απφ ην δίθηπν. Τπάξρνπλ δπν ηχπνη αξρείσλ ζπζθεπψλ:
o Block Devices: Αξρεία πνπ αληηζηνηρνχλ ζε ζπζθεπέο ηχπνπ block. Απηέο είλαη θπξίσο ζπζθεπέο
πνπ ιεηηνπξγνχλ σο απνζεθεπηηθά κέζα ηπραίαο πξνζπέιαζεο, φπσο ε θχξηα κλήκε (RAM), ν
δίζθνο, cd-rom, θάξηα γξαθηθψλ θ.ά.
o Character Devices: Αξρεία πνπ αληηζηνηρνχλ ζε ζπζθεπέο ηχπνπ ραξαθηήξσλ. Απηέο είλαη
ζπζθεπέο πνπ ε ιεηηνπξγία ηνπο βαζίδεηαη ζηελ απνζηνιή θαη ιήςε ραξαθηήξσλ, φπσο ην
πιεθηξνιφγην, ην πνληίθη, ν δηαπνδηακνξθσηήο (modem) θ.ά.
 Αξρεία Δπηθνηλσλίαο: Τπάξρνπλ δπν ηχπνη αξρείσλ επηθνηλσλίαο:
o Sockets: Αληηζηνηρεί ζε έλα θαλάιη επηθνηλσλίαο δηπιήο θαηεχζπλζεο. Μέζσ ελφο ηέηνηνπ
αξρείνπ γίλεηαη ε δηθηπαθή επηθνηλσλία ησλ πξνγξακκάησλ κεηαμχ ηνπο.
o Γηαζσιελψζεηο (Pipes): Πξφθεηηαη γηα αξρεία πνπ αληηζηνηρνχλ ζε έλα θαλάιη επηθνηλσλίαο
κνλήο θαηεχζπλζεο. ΢ε απηήλ ηελ πεξίπησζε, φηαλ επηθνηλσλνχλ δπν πξνγξάκκαηα κέζσ
δηαζσιήλσζεο, πάληα ην έλα ζηέιλεη δεδνκέλα θαη ην δεχηεξν δηαβάδεη δεδνκέλα.

30
1.3.8 Χξήζηεο θαη Οκάδεο Χξεζηώλ

΢ε έλα ζχζηεκα UNIX, ππάξρνπλ πξαγκαηηθνί θαη εηθνληθνί ρξήζηεο. Με ηελ έλλνηα ηνπ ρξήζηε είλαη
ηαπηφζεκε θαη ε έλλνηα ηνπ ινγαξηαζκνχ (account). Γηα θάζε ρξήζηε ππάξρεη θαη έλαο ινγαξηαζκφο ρξήζηε
(user account). ΢ε θάζε ινγαξηαζκφ ρξήζηε αληηζηνηρεί έλα φλνκα ρξήζηε (username) θαη ζπλήζσο θαη έλαο
θσδηθφο (password). Με απηά ηα δπν ζηνηρεία απζεληηθνπνηνχληαη νη ρξήζηεο πνπ πξνζπαζνχλ λα
ρξεζηκνπνηήζνπλ (ηνπηθά ή απνκαθξπζκέλα) ηνλ ππνινγηζηή. Σνπο ινγαξηαζκνχο ρξεζηψλ κπνξνχκε λα
ηνπο ρσξίζνπκε ζε 3 θαηεγνξίεο:
1. Πξαγκαηηθνί ρξήζηεο είλαη νη ινγαξηαζκνί πνπ αληηζηνηρνχλ ζε θπζηθά πξφζσπα. Γηα παξάδεηγκα
γηα ηνλ ρξήζηε Αληψλε ΢ηδεξφπνπιν ππάξρεη έλαο ινγαξηαζκφο κε ην φλνκα ρξήζηε “asidirop”. O
“asidirop”, ινηπφλ, είλαη έλαο πξαγκαηηθφο ρξήζηεο, αθνχ αληηζηνηρεί ζε θπζηθφ πξφζσπν.
2. Δηθνληθνί ρξήζηεο είλαη νη ινγαξηαζκνί πνπ δελ αληηζηνηρνχλ ζε θπζηθά πξφζσπα, αιιά
δεκηνπξγνχληαη γηα ηελ εμππεξέηεζε ιεηηνπξγηψλ ηνπ ζπζηήκαηνο θαη ησλ ππεξεζηψλ πνπ
εθηεινχληαη ζε απηφ. Γηα παξάδεηγκα, ζε έλα ζχζηεκα UNIX, ην νπνίν ιεηηνπξγεί θαη σο εμππεξέηεο
ειεθηξνληθήο αιιεινγξαθίαο (mail server), δεκηνπξγείηαη ν ρξήζηεο κε φλνκα “mail”. ΢ε απηφλ ηνλ
ρξήζηε αλήθνπλ φια ηα αξρεία πνπ αθνξνχλ ηελ ππεξεζία αιιεινγξαθίαο. Με απηφλ ηνλ ηξφπν
θαλέλαο πξαγκαηηθφο ρξήζηεο δελ έρεη πξφζβαζε ζηα αξρεία ειεθηξνληθήο αιιεινγξαθίαο.
΢πλεπψο, θαλέλαο ρξήζηεο δελ κπνξεί λα δηαβάζεη ηελ αιιεινγξαθία θάπνηνπ άιινπ ρξήζηε.
΢πλήζσο γηα ηνπο ινγαξηαζκνχο πνπ αληηζηνηρνχλ ζε εηθνληθνχο ρξήζηεο δελ νξίδεηαη θαλέλαο
θσδηθφο πξφζβαζεο, εθφζνλ δελ ππάξρεη ε δπλαηφηεηα ζχλδεζεο ελφο πξαγκαηηθνχ ρξήζηε κε απηφ.
3. Ο ρξήζηεο root: ΢πλήζσο αλαθέξεηαη σο ππεξρξήζηεο (superuser) ή δηαρεηξηζηήο (administrator). Ο
ρξήζηεο απηφο είλαη εηθνληθφο ρξήζηεο θαη έρεη δηθαίσκα λα θάλεη νηηδήπνηε ζηνλ ππνινγηζηή. Όινη
νη ππφινηπνη ρξήζηεο δελ έρνπλ πξφζβαζε ζε φια ηα ηκήκαηα ηνπ ζπζηήκαηνο (αξρεία ή ππεξεζίεο),
ελψ ν ζπγθεθξηκέλνο ρξήζηεο έρεη πξφζβαζε ζε νηηδήπνηε.

Οκάδεο Χξεζηώλ (groups)


Γηα ηε δηεπθφιπλζε ηεο ζπλεξγαηηθφηεηαο ησλ ρξεζηψλ, εθηφο απφ ηνπο ινγαξηαζκνχο ρξεζηψλ, ππάξρνπλ
θαη νη νκάδεο ρξεζηψλ. Τπάξρνπλ Δηθνληθέο ή Πξαγκαηηθέο Οκάδεο ρξεζηψλ. Καη ζε απηήλ ηελ πεξίπησζε
ππάξρνπλ νη Δηθνληθέο Οκάδεο γηα θαιχηεξε δηαρείξηζε ησλ ππεξεζηψλ. Παξάδεηγκα ζε έλα ζχζηεκα κπνξεί
λα ππάξρεη ε νκάδα “printer”. Ζ νκάδα απηή έρεη πξφζβαζε ζε ππεξεζίεο θαη αξρεία ζρεηηθά κε εθηχπσζε.
΢πλεπψο φινη νη ρξήζηεο πνπ αλήθνπλ ζε απηήλ ηελ νκάδα ζα κπνξνχλ λα ρεηξίδνληαη ηα παξαπάλσ θαη
επνκέλσο λα πξνζζαθαηξνχλ εθηππσηέο ή λα ηνπο ξπζκίδνπλ. Απφ ηελ άιιε νη Πξαγκαηηθέο
νκάδεο νκαδνπνηνχλ ρξήζηεο πνπ έρνπλ θνηλά ραξαθηεξηζηηθά ή ζπλεξγάδνληαη. Γηα παξάδεηγκα ζηνλ
server ηνπ ηκήκαηνο καο1, έλαο θνηηεηήο πνπ εγγξάθεθε ζην ηκήκα ην εμάκελν 2011-12Υ (2011-12
Υεηκεξηλφ Δμάκελν), αλήθεη ζηελ νκάδα κε φλνκα: x1112. Αληίζηνηρα, ζε κηα εηαηξία ή νξγαληζκφ, ρξήζηεο
πνπ εξγάδνληαη ζε θνηλέο εξγαζίεο ζα πξέπεη λα αλήθνπλ ζηηο ίδηεο νκάδεο, ψζηε λα έρνπλ πξφζβαζε ζηα
αξρεία ηεο νκάδαο.
Δπίζεο, ππάξρνπλ νη παξαθάησ ζπλζήθεο-πεξηνξηζκνί:
1. Ο θάζε ρξήζηεο αλήθεη ππνρξεσηηθά ζε κηα νκάδα.
2. Έλαο ρξήζηεο κπνξεί λα αλήθεη ζε πνιιέο νκάδεο.
3. Μηα νκάδα κπνξεί λα κελ έρεη θαλέλαλ ρξήζηε.

Οκάδεο θαη Χξήζηεο


Όπσο αλαθέξζεθε λσξίηεξα, θάζε ρξήζηεο ραξαθηεξίδεηαη απφ ην φλνκα ρξήζηε (username), παξάδεηγκα
“asidirop”. Γηα θάζε φλνκα ρξήζηε αληηζηνηρεί έλαο κνλαδηθφο αξηζκφο. Ο αξηζκφο απηφο αλαθέξεηαη σο user
ID ή uid. Απηφο ν αξηζκφο ρξεζηκνπνηείηαη εζσηεξηθά γηα λα αλαπαξαζηήζεη ηνλ θαζέλα ρξήζηε.
Οπνπδήπνηε ρξεηάδεηαη λα απνζεθεπηεί ε πιεξνθνξία ρξήζηε, απνζεθεχεηαη απηφο ν αξηζκφο. Τπάξρεη ζε
έλα αξρείν (ζην /etc/passwd) ε αληηζηνηρία ησλ uid κε ηα νλφκαηα ρξεζηψλ.
Αληίζηνηρα, θάζε νκάδα ραξαθηεξίδεηαη απφ ην φλνκα νκάδαο (groupname), παξάδεηγκα “staff”. Γηα
θάζε νκάδα, αληηζηνηρεί έλαο κνλαδηθφο αξηζκφο (αλαθέξεηαη σο groupID ή gid). Ο αξηζκφο απηφο
ρξεζηκνπνηείηαη εζσηεξηθά γηα λα αλαπαξαζηήζεη ηελ θαζεκηά νκάδα.

1
ηκήκα Μεραληθψλ Πιεξνθνξηθήο, Αιεμάλδξεηνπ ΑΣΔΗ Θεζζαινλίθεο

31
Αλ δψζνπκε ηηο παξαθάησ εληνιέο ζηνλ server ηνπ ηκήκαηνο:

dlabs@aetos:~$ id asidirop
uid=1143(asidirop) gid=993(conit) groups=993(conit)
dlabs@aetos:~$ id v13
uid=1113(v13) gid=1024(x9697)
groups=1024(x9697),0(root),4(adm),113(chpasswd),121(su),900(spam)
,2002(eggrafes),2003(ikaros)

Ζ εληνιή id καο εκθαλίδεη πιεξνθνξίεο γηα ην φλνκα ρξήζηε πνπ νξίδνπκε. Ζ εληνιή “id asidirop”
καο δείρλεη φηη ν ρξήζηεο κε ην φλνκα “asidirop” έρεη uid ίζν κε 1143 θαη σο θχξηα νκάδα ηελ conit κε gid
ίζν κε 993. Ο ζπγθεθξηκέλνο ρξήζηεο δελ αλήθεη ζε άιιεο νκάδεο. Ζ ίδηα εληνιή γηα ηνλ ρξήζηε v13, καο
δίλεη σο απνηέιεζκα φηη ν ρξήζηεο v13 έρεη uid=1113 θαη σο θχξηα νκάδα ηελ x9697 κε gid=1024. Δπηπιένλ
φκσο ν ρξήζηεο v13 αλήθεη θαη ζηηο νκάδεο root, adm, chpasswd, su, spam, eggrafes, ikaros θαη βέβαηα καο
εκθαλίδνληαη θαη νη αληίζηνηρνη αξηζκνί νκάδσλ.

1.3.9 Γηεξγαζίεο (Processes)

Γηεξγαζία θαιείηαη έλα πξφγξακκα, φηαλ βξίζθεηαη ζε εθηέιεζε. Γηεξγαζία είλαη κηα ελεξγή νληφηεηα (ζε
επίπεδν ινγηζκηθνχ) ε νπνία πεξηιακβάλεη ηνλ θψδηθα ηνπ πξνγξάκκαηνο, ηα δεδνκέλα ηνπ θαζψο θαη ηελ
θαηάζηαζε εθηέιεζεο, ζε πνην ζεκείν, δειαδή, ηνπ πξνγξάκκαηνο βξίζθεηαη ε εθηέιεζε [3]. Δπίζεο έρεη θαη
δηάθνξεο αθφκε ηδηφηεηεο ηηο νπνίεο ζα ηηο κειεηήζνπκε ζην Κεθάιαην 7. Έλα πξφγξακκα κπνξεί λα
εθηειείηαη πνιιέο θνξέο ζπγρξφλσο, νπφηε θαη δεκηνπξγνχληαη πνιιέο δηεξγαζίεο πνπ πξνέθπςαλ απφ ην ίδην
πξφγξακκα θαη νη νπνίεο είλαη (ζπλήζσο) αλεμάξηεηεο κεηαμχ ηνπο. Πνιιέο θνξέο, αληί ηνπ φξνπ δηεξγαζία
(process), ρξεζηκνπνηείηαη ν φξνο εξγαζία (task). Υαξαθηεξηζηηθφ παξάδεηγκα είλαη ν TaskManager ησλ
Windows (΢ρήκα 1.4). Πξνθαλψο, ππάξρεη πιήζνο αληίζηνηρσλ εθαξκνγψλ γηα UNIX κε πεξηζζφηεξν
δηαδεδνκέλε ηελ εληνιή “top” (΢ρήκα 1.5), ε νπνία έρεη ηε δπλαηφηεηα λα εθηειείηαη ζε ηεξκαηηθφ ρσξίο λα
απαηηείηαη γξαθηθφ πεξηβάιινλ.

΢ρήκα 1.4: O TaskManager ησλ Windows.

32
΢ρήκα 1.5: Η εληνιή top ηνπ UNIX.

1.3.10 Πώο λα εξγαζηείηε γηα ηελ πινπνίεζε ησλ αζθήζεσλ

Τπάξρνπλ πάξα πνιιέο επηινγέο ζε ζρέζε κε ηνλ ηξφπν κε ηνλ νπνίν κπνξείηε λα εμαζθεζείηε:
 Δξγαδφκελνη ζηα εξγαζηήξηα ηνπ ηκήκαηνο (linux) αθφκε θαη εθηφο δηδαθηηθψλ σξψλ. Απηφ βέβαηα δελ
είλαη ηδηαίηεξα πξαθηηθφ.
 Δγθαζηζηψληαο ζηνλ πξνζσπηθφ ζαο ππνινγηζηή Linux. Απηή ζεσξείηαη ε θαιχηεξε δπλαηή ιχζε
δεδνκέλνπ φηη ζα απνθηήζεηε ηελ εκπεηξία ρξήζεο θαη εγθαηάζηαζεο. Τπάξρνπλ αξθεηνί θνηηεηέο, νη
νπνίνη δελ πξνηηκνχλ απηή ηε ιχζε, θνβνχκελνη φηη κπνξεί λα θαηαζηξέςνπλ ηνλ ππνινγηζηή ηνπο. Ζ
απάληεζε είλαη πσο, φ,ηη θαη λα θάλνπλ, δελ κπνξνχλ λα πξνθαιέζνπλ βιάβε ζην πιηθφ ηνπ ππνινγηζηή.
Ζ κφλε «δεκηά» πνπ κπνξεί λα γίλεη αθνξά ην ινγηζκηθφ ηνπ ππνινγηζηή θαη ζπλήζσο ηελ εγθαηάζηαζε
ησλ windows ή ηελ αδπλακία γηα εθθίλεζε ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο. Όια ηα ζθάικαηα κπνξνχλ λα
δηνξζσζνχλ πνιχ εχθνια, αλ, πξηλ θάλνπκε νπνηνδήπνηε πείξακα, έρνπκε πάξεη ζε εμσηεξηθφ δίζθν
αληίγξαθν αζθαιείαο. Τπάξρνπλ πνιινί ηξφπνη γηα λα ην πεηχρεηε απηφ, έλαο απφ απηνχο είλαη ε ρξήζε
ηνπ clonezilla (http://clonezilla.org/).
 Απνκαθξπζκέλα (απφ ζχζηεκα Windows) ζπλδεφκελνη ζε έλαλ ππνινγηζηή κε linux ή UNIX. Όινη νη
θνηηεηέο ηνπ ηκήκαηνο Μεραληθψλ Πιεξνθνξηθήο ηνπ ΣΔΗ Θεζζαινλίθεο, δηαζέηεηε ινγαξηαζκφ ζηνλ
ππνινγηζηή κε ην δηθηπαθφ φλνκα aetos.it.teithe.gr.
 Δγθαζηζηψληαο linux ζε Δηθνληθή Μεραλή (Virtual Machine). Απηή είλαη κηα ηέηαξηε πνιχ θαιή επηινγή
θαη κάιηζηα απφιπηα αζθαιήο, φζα ζθάικαηα θαη αλ θάλνπκε. Απαξαίηεηε πξνυπφζεζε είλαη ε ρξήζε
ελφο πξνγξάκκαηνο εηθνληθνπνίεζεο (Virtualization) [1, 2]. Δλδεηθηηθά ηέηνηα πξνγξάκκαηα
εηθνληθνπνίεζεο είλαη ην Virtual Box (https://www.virtualbox.org/) θαη ην VMWare
(http://www.vmware.com/). Απηά ηα πξνγξάκκαηα έρνπλ ηε δπλαηφηεηα λα δεκηνπξγήζνπλ ζε επίπεδν
ινγηζκηθνχ έλαλ εηθνληθφ ππνινγηζηή. Ο εηθνληθφο απηφο ππνινγηζηήο έρεη φιεο ηηο ηδηφηεηεο θαη ηα
ραξαθηεξηζηηθά ελφο πξαγκαηηθνχ ππνινγηζηή, δειαδή πεξηέρεη κλήκε, δίζθν, θάξηα δηθηχνπ, θάξηα
γξαθηθψλ θηι. Μάιηζηα, ν ρξήζηεο έρεη ηε δπλαηφηεηα φια ηα πξνεγνχκελα λα ηα ξπζκίζεη αλάινγα κε
ηηο αλάγθεο ηνπ. Γηα παξάδεηγκα λα νξίζεη φηη ν εηθνληθφο ππνινγηζηήο κε ην φλνκα Α ζα έρεη 2GB
θχξηαο κλήκεο θαη 100GB ζθιεξνχ δίζθνπ. Πξνθαλψο, ηα 2GB ζα δεζκεπηνχλ απφ ηελ πξαγκαηηθή
κλήκε ηνπ κεραλήκαηνο νηθνδεζπφηε (host machine), φηαλ ν εηθνληθφο ππνινγηζηήο Α είλαη ελεξγφο.
Δπίζεο, γηα ηα 100GB ζθιεξνχ δίζθνπ ζα δεκηνπξγεζεί ζηνλ θπζηθφ δίζθν έλα κεγάιν αξρείν κεγέζνπο
100GB. Ζ εηθνληθή κεραλή ζα αλαγλσξίζεη απηφ ην κεγάιν αξρείν σο θπζηθφ δίζθν θαη ζα γξάθεη ηα
δεδνκέλα ηεο εθεί. Πξνθαλψο, γηα λα επηιέμνπκε απηή ηε ιχζε ζα πξέπεη ν ππνινγηζηήο πνπ ζα
θηινμελήζεη ην εηθνληθφ κεράλεκα λα είλαη πινχζηνο ζε πφξνπο, δειαδή λα έρεη πνιχ κεγάιε θπζηθή
κλήκε (πεξίπνπ δηπιάζηα απ’ φζε απαηηείηαη γηα ηελ ρξήζε ελφο Λεηηνπξγηθνχ ΢πζηήκαηνο), κεγάιν
ζθιεξφ δίζθν θαη θπζηθά ηζρπξφ επεμεξγαζηή. Έρνληαο δεκηνπξγήζεη έλαλ ηέηνην εηθνληθφ ππνινγηζηή,
κπνξνχκε ζε απηφλ λα εγθαηαζηήζνπκε νπνηνδήπνηε Λεηηνπξγηθφ ΢χζηεκα επηζπκνχκε, ρσξίο απηφ λα

33
επεξεάδεη ην θπξίσο Λεηηνπξγηθφ ΢χζηεκα πνπ εθηειείηαη ζηνλ ππνινγηζηή καο. Δπίζεο, κπνξνχκε λα
δεκηνπξγήζνπκε πνιιέο εηθνληθέο κεραλέο γηα πεηξακαηηζκφ (΢ρήκα 1.6). Μάιηζηα κπνξνχκε λα
θαηεβάζνπκε απφ ην δηαδίθηπν έηνηκεο εηθνληθέο κεραλέο, κε πξν-εγθαηεζηεκέλν έλα Λεηηνπξγηθφ
΢χζηεκα, φπσο γηα παξάδεηγκα απφ ηε ζειίδα :http://virtualboxes.org/images/ubuntu/ θαη λα ηηο
ρξεζηκνπνηήζνπκε.

΢ρήκα 1.6: Γηαρείξηζε πνιιώλ εηθνληθώλ κεραλώλ κε ην VirtualBox.

 Μηα επφκελε επηινγή είλαη ε ρξήζε κηαο έθδνζεο Linux ηχπνπ Live. ΢πλεζίδεηαη ε νξνινγία Live-CD,
Live-DVD ή Live-USB αλάινγα κε ην κέζν ζην νπνίν απνζεθεχεηαη ε έθδνζε ηνπ Λεηηνπξγηθνχ
΢πζηήκαηνο. Οη εθδφζεηο ηχπνπ Live βαζίδνληαη ζηε θηινζνθία φηη δελ εγθαζίζηαηαη ηίπνηα ζηνλ
ππνινγηζηή, αιιά φια ηα πξνγξάκκαηα θαη ην Λεηηνπξγηθφ ΢χζηεκα εθηεινχληαη απφ ην DVD ή ην
αληίζηνηρν κέζν. Σν κέζν (USB ή DVD) ζα πξέπεη λα δεκηνπξγεζεί κε ηνλ θαηάιιειν ηξφπν,
αθνινπζψληαο ηηο νδεγίεο πνπ ππάξρνπλ ζε θάζε πεξίπησζε
(παξάδεηγκα http://www.ubuntu.com/download/desktop/try-ubuntu-before-you-install) θαη λα
ξπζκίζνπκε ηνλ ππνινγηζηή λα θάλεη εθθίλεζε (boot) απφ ην κέζν ζην νπνίν έρνπκε απνζεθεχζεη ηελ
έθδνζε Live. Μεηνλέθηεκα απηήο ηεο επηινγήο είλαη φηη δελ κπνξνχκε λα απνζεθεχζνπκε ξπζκίζεηο πνπ
θάλνπκε ή πξνγξάκκαηα πνπ ζέινπκε λα εγθαηαζηήζνπκε, δηφηη φηη απνζεθεχνπκε, απνζεθεχεηαη ζε
έλαλ δίζθν ηχπνπ κλήκεο (RAM Drive). Έηζη ζηελ επφκελε επαλεθθίλεζε ηνπ ππνινγηζηή ζα
επαλέιζνπκε ζηελ αξρηθή θαηάζηαζε. Βέβαηα, απηφ πνπ ηψξα πεξηγξάθεηαη σο κεηνλέθηεκα, θάπνηνη
κπνξεί λα ην ζεσξνχλ πιενλέθηεκα (π.ρ. γηα ηελ πεξίπησζε θνηλφρξεζησλ ππνινγηζηψλ) ή κπνξεί λα
αιιάμεη ζηα επφκελα ιίγα ρξφληα ή κήλεο. Θπκίδνπκε φηη νη εμειίμεηο ζην ρψξν ησλ ππνινγηζηψλ θαη ηεο
ηερλνινγίαο είλαη ξαγδαίεο.

34
 Αθφκε κηα επηινγή, είλαη ε θαλνληθή εγθαηάζηαζε ελφο ζπζηήκαηνο Linux φρη, φκσο, ζηνλ θχξην ζθιεξφ
δίζθν πνπ ρξεζηκνπνηνχκε, αιιά ζε θάπνηνλ εμσηεξηθφ. ΢ε απηήλ ηελ πεξίπησζε, ζα πξέπεη λα
αθνινπζήζνπκε ηα βήκαηα εγθαηάζηαζεο, φπσο πεξηγξάθνληαη ζην αληίζηνηρν εγρεηξίδην εγθαηάζηαζεο,
αιιά λα επηιέμνπκε σο δίζθν απνζήθεπζεο ηνλ εμσηεξηθφ δίζθν. Καηά ηε δηάξθεηα ηεο εθθίλεζεο ηνπ
ππνινγηζηή, ζα πξέπεη λα επηιέγνπκε απφ ηελ αληίζηνηρε δπλαηφηεηα ηνπ BIOS, ην κέζν απφ ην νπνίν
επηζπκνχκε λα εθθηλήζεη ν ππνινγηζηήο καο. Με απηφλ ηνλ ηξφπν, απφ ηε κηα δελ έρνπκε επεξεάζεη ηνλ
πξσηεχνληα ζθιεξφ δίζθν, θαη απφ ηελ άιιε κπνξνχκε λα απνζεθεχζνπκε ξπζκίζεηο θαη πξνγξάκκαηα.

1.4 Αλαθνξέο

[1] Brian L Stuart. Principles of operating systems: design & applications. Course Technology, 2009.
[2] Peter H. Salus. A quarter century of UNIX. Addison-Wesley, 1994.
[3] U. Vahalia. Unix Internals: The New Frontiers. Dorling Kindersley Pvt. Limited, 2008.
[ https://books.google.gr/books?id=Z7qfu9NK7WQC ]
[4] WikiPedia. Linux, February 2015. [ http://en.wikipedia.org/wiki/Linux ]
[5] WikiPedia. Operating system, February 2015. [ http://en.wikipedia.org/wiki/Operating_system ]
[6] WikiPedia. Unix, February 2015. [ http://en.wikipedia.org/wiki/Unix ]

35
Κεθάιαην 2

2 Δηζαγσγή ζηε ρξήζε ηνπ θειύθνπο θαη ζύληαμε εληνιώλ

2.1 Χξήζε Κειύθνπο - Σεξκαηηθό


΢ην ΢ρήκα 2.1 θαίλεηαη θαη πάιη ε ηεξαξρία ζε έλα ζχζηεκα UNIX. Ξεθηλψληαο απφ θάησ πξνο ηα επάλσ,
θαίλεηαη φηη ν ππξήλαο είλαη ην κφλν ζηνηρείν πνπ επηθνηλσλεί κε ην πιηθφ ηνπ ππνινγηζηή. Οη εθαξκνγέο θαη
ηα θειχθε επηθνηλσλνχλ κε ηνλ ππξήλα, θαη ηειηθά κφλν κέζσ απηνχ κπνξνχλ λα θάλνπλ ρξήζε ηνπ πιηθνχ.
Οη ρξήζηεο ρξεζηκνπνηνχλ εθαξκνγέο νη νπνίεο πξνσζνχλ ηηο ιεηηνπξγίεο ηνπο πξνο ηα θάησ. Σν θέιπθνο
είλαη ζηελ πξαγκαηηθφηεηα κηα εθαξκνγή. Ζ κφλε, αιιά πνιχ ζεκαληηθή, ιεηηνπξγία πνπ έρεη είλαη λα
πξνσζεί ηηο εληνιέο ησλ ρξεζηψλ πξνο ηνλ ππξήλα. Οη εθαξκνγέο πνπ κπνξνχλ λα ρξεζηκνπνηήζνπλ νη
ρξήζηεο κπνξεί λα είλαη είηε γξαθηθέο, δειαδή λα ιεηηνπξγνχλ κέζα απφ γξαθηθφ πεξηβάιινλ (πρ: firefox,
chrome, openOffice θηι.), είηε λα εθηεινχληαη κέζα απφ έλα ηεξκαηηθφ. Σν θέιπθνο είλαη κηα εθαξκνγή
ρσξίο γξαθηθή δηεπηθάλεηα ρξήζεο θαη εθηειείηαη κέζα ζε έλα ηεξκαηηθφ.

Users

Applications
Shells

Kernel

Hardware

΢ρήκα 2.1: Ιεξαξρία ζην UNIX.

2.1.1 Σεξκαηηθό

Σεξκαηηθφ είλαη κηα ζπζθεπή κε νζφλε θαη πιεθηξνιφγην ε νπνία επηθνηλσλεί (κέζσ κηαο ζεηξηαθήο
ζχξαο) κε θάπνηνλ θεληξηθφ ππνινγηζηή. Μέρξη πεξίπνπ ην 1990 νη ρξήζηεο Unix ρξεζηκνπνηνχζαλ ζρεδφλ
απνθιεηζηηθά ηέηνηνπ ηχπνπ ηεξκαηηθέο ζπζθεπέο. ΢ε έλαλ θεληξηθφ ππνινγηζηή ήηαλ ζπλδεδεκέλεο 10άδεο
ηεξκαηηθά. Σα ηεξκαηηθά δελ είραλ δηθή ηνπο CPU, αιιά ήηαλ κφλν ζπζθεπέο απνηεινχκελεο απφ νζφλε θαη
πιεθηξνιφγην (φρη πνληίθη). Ό,ηη πιεθηξνινγνχζε ν ρξήζηεο ζην πιεθηξνιφγην απνζηέιινληαλ κέζσ ηεο
ζεηξηαθήο επηθνηλσλίαο ζηνλ θεληξηθφ ππνινγηζηή. Ό,ηη "ηχπσλε" ν θεληξηθφο ππνινγηζηήο κεηαθέξνληαλ
κέζσ ηεο ζεηξηαθήο ζην ηεξκαηηθφ θαη ην ηεξκαηηθφ ην εκθάληδε ζηελ νζφλε. ΢ηα
΢ρήκαηα 2.2 θαη 2.3 βιέπνπκε δπν θσηνγξαθίεο δηαδεδνκέλσλ ηεξκαηηθψλ ηεο επνρήο 1980-1990.
Πιένλ, πξνθαλψο δελ ππάξρνπλ νη παξαπάλσ ηεξκαηηθέο ζπζθεπέο. Οη ρξήζηεο ρξεζηκνπνηνχλ σο
ζηαζκνχο εξγαζίαο εμειηγκέλνπο ππνινγηζηέο νη νπνίνη είλαη ηθαλνί λα ρεηξηζηνχλ γξαθηθά (παξαζπξηθά)
πεξηβάιινληα. Τπάξρνπλ, φκσο, παξαζπξηθέο εθαξκνγέο νη νπνίεο πξνζνκνηψλνπλ ηε ιεηηνπξγία ελφο
ηεξκαηηθνχ. ΢ηηο εθαξκνγέο πξνζνκνίσζεο ηεξκαηηθνχ, ε βαζηθή ιεηηνπξγία παξακέλεη ε ίδηα κε ηνπ
πξαγκαηηθνχ ηεξκαηηθνχ, βέβαηα ππάξρνπλ πιένλ πνιιέο πεξηζζφηεξεο δπλαηφηεηεο. ΢ην ΢ρήκα 2.4 θαίλεηαη
κηα ηέηνηα εθαξκνγή ε νπνία νλνκάδεηαη gnome-terminal θαη είλαη ηδηαίηεξα δηαδεδνκέλε. Τπάξρνπλ πνιιέο
δηαθνξεηηθέο εθαξκνγέο πξνζνκνίσζεο ηεξκαηηθνχ φπσο νη konsole, rxvt, xfce4-terminal, xterm, putty θαη
πνιιέο αθφκε [10].

37
΢ρήκα 2.2: Σεξκαηηθό DEC-vt100 (πεγή https://de.wikipedia.org/wiki/VT100).

΢ρήκα 2.3: Σεξκαηηθό DEC-vt420 (πεγή: https://en.wikipedia.org/wiki/VT420).

2.2 Σν θέιπθνο (shell)

Μέζα ζε έλα ηεξκαηηθφ εθηειείηαη κηα εθαξκνγή πνπ νλνκάδεηαη θέιπθνο (shell). ΢ηελ πξαγκαηηθφηεηα,
πξνθαλψο δελ εθηειείηαη ην θέιπθνο «κέζα» ζην ηεξκαηηθφ, αιιά ην θέιπθνο εθηειείηαη απφ ηνλ
ππνινγηζηή. Γίλεηαη, φκσο, ε ξχζκηζε ην ηεξκαηηθφ λα «ζηέιλεη» ηηο εληνιέο πνπ πιεθηξνινγνχκε ζην
θέιπθνο, θαη απφ ηελ άιιε ην θέιπθνο λα ηππψλεη δεδνκέλα (κελχκαηα) ζην ηεξκαηηθφ. Δπεηδή φια απηά
εκθαλίδνληαη κέζα ζην ηεξκαηηθφ, θαηαρξεζηηθά ιέκε φηη ην θέιπθνο «ζηέιλεη» κέζα ζην ηεξκαηηθφ. Σν
θέιπθνο είλαη ππεχζπλν λα δηαβάζεη απφ ην ηεξκαηηθφ απηά πνπ πιεθηξνινγεί ν ρξήζηεο, λα ηα εξκελεχζεη
θαη λα ηα εθηειέζεη. Όπσο βιέπνπκε ζηελ ιίζηα πνπ αθνινπζεί, ππάξρνπλ πνιιά δηαθνξεηηθά θειχθε:
 Οηθνγέλεηα Bourne Shell: Bourne Shell (sh), Bourne-Again Shell (bash), Korn Shell (ksh), MirBSD Korn
Shell (mksh), Almquist shell (ash),
 Z-sh,
 Οηθνγέλεηα C-shell: C-shell (csh), Tc-shell (tcsh).
Δπίζεο, σο θειχθε κπνξνχκε λα ζεσξήζνπκε θαη ηνπο δηεξκελεπηέο εληνιψλ (interpreters) γλσζηψλ
γισζζψλ πξνγξακκαηηζκνχ φπσο ηελ python, Ruby θ.ά. Σέινο, ζην Λεηηνπξγηθφ ΢χζηεκα ησλ Windows
ππάξρεη ε εθαξκνγή "Command Prompt" (cmd.exe), ε νπνία βέβαηα έρεη ηδηαίηεξα πεξηνξηζκέλεο
δπλαηφηεηεο, ζα κπνξνχζακε φκσο λα ηελ νλνκάζνπκε θέιπθνο απφ ηελ άπνςε φηη «δηαβάδεη» ηηο εληνιέο
ηνπ ρξήζηε θαη ηηο κεηαθέξεη ζην Λεηηνπξγηθφ γηα εθηέιεζε. Γηα λα θαιχςεη ε Microsoft ηελ έιιεηςε ελφο
δπλακηθνχ θειχθνπο ζην ιεηηνπξγηθφ ηεο, αλέπηπμε ην Windows PowerShell

38
΢ρήκα 2.4: Παξαζπξηθό Σεξκαηηθό.

To θάζε θέιπθνο έρεη ηνπο δηθνχο ηνπ θαλφλεο ζχληαμεο ησλ εληνιψλ. Γελ ππάξρνπλ, φκσο,
ηδηαίηεξα πνιιέο αζπκβαηφηεηεο. Ζ βαζηθή ιεηηνπξγία ελφο θειχθνπο είλαη ν ρεηξηζκφο ησλ εληνιψλ ησλ
ρξεζηψλ. Απηφ γίλεηαη κε ηελ παξαθάησ αθνινπζία ιεηηνπξγηψλ:
1. Δκθάληζε ηεο πξνηξνπήο (prompt). Δίλαη έλδεημε αλακνλήο ηνπ Λ.΢. γηα ηελ αλακνλή εηζαγσγήο
εληνιήο. Ζ πξνηξνπή ζπλήζσο είλαη ν ραξαθηήξαο "$", ή κπνξεί λα πεξηέρεη θαη άιιεο πιεξνθνξίεο φπσο
"asidirop@aetos:~$". ΢ην παξάδεηγκα απηφ, ζπκπεξηιακβάλεηαη ζηελ πξνηξνπή ε πιεξνθνξία ηνπ
νλφκαηνο ηξέρνληνο ρξήζηε (asidirop), ηνπ νλφκαηνο ηνπ ππνινγηζηή (aetos) θαη ηνπ ηξέρνληνο θαθέινπ
εξγαζίαο (~) .
2. Λήςε θαη γξακκαηηθή αλάιπζε ηεο ζχληαμεο ηεο εληνιήο,
3. Δθηέιεζε ηεο δηαδηθαζίαο εηζφδνπ θαη κεηαζρεκαηηζκφο ηεο εληνιήο,
4. Αξρηθνπνίεζε ησλ απαηηνχκελσλ ιεηηνπξγηψλ,
5. Αλακνλή γηα νινθιήξσζε ησλ ιεηηνπξγηψλ πνπ είλαη ζε εμέιημε (π.ρ. αλακνλή γηα ηνλ ηεξκαηηζκφ ηνπ
πξνγξάκκαηνο πνπ εθηειείηαη, θαζψο φζν εθηειείηαη έλα πξφγξακκα, «δεζκεχεη» ην ηεξκαηηθφ, δειαδή
δηαβάδεη απφ ην πιεθηξνιφγην θαη ηππψλεη ζηελ νζφλε ηνπ),
6. Δπαλαθνξά ζην βήκα 1.

2.3 Γηαηύπσζε εληνιώλ

Ζ γεληθή ζχληαμε κηαο εληνιήο πνπ αλαγλσξίδεη έλα shell είλαη:

Όλνκα_εληνιήο νξίζκαηα

Σα νξίζκαηα ρσξίδνληαη απφ ην φλνκα εληνιήο κε έλα ηνπιάρηζηνλ θελφ δηάζηεκα (space). Σα
νξίζκαηα κεηαμχ ηνπο ρσξίδνληαη, επίζεο, κε έλα ηνπιάρηζηνλ θελφ δηάζηεκα. Σα νξίζκαηα γηα ηηο εληνιέο
είλαη αληίζηνηρα κε ηα νξίζκαηα γηα ηηο ζπλαξηήζεηο (κεζφδνπο), δειαδή δίλνπλ επηπιένλ νδεγίεο ζηελ
εληνιή γηα ην πψο ζα ιεηηνπξγήζεη. ΢ε κηα εληνιή κπνξεί λα ππάξρνπλ ππνρξεσηηθά θαη πξναηξεηηθά
νξίζκαηα.
Δπίζεο, αξθεηέο εληνιέο δέρνληαη δηαθφξσλ ηχπσλ νξίζκαηα ζε ζρέζε κε ηε ρξήζε ηνπο. Έηζη,
έρνπκε νξίζκαηα πνπ αληηζηνηρνχλ ζε νλφκαηα αξρείσλ θαη νξίζκαηα πνπ αληηζηνηρνχλ ζε ελεξγνπνίεζε
ιεηηνπξγηψλ. Πνιιέο θνξέο ηα ηειεπηαία νλνκάδνληαη ζεκαίεο (flags).

39
2.3.1 Η πξώηε κνπ εληνιή

Έζησ ε δηαηχπσζε:

cat file1.txt

Ζ παξαπάλσ δηαηχπσζε, γηα ην θέιπθνο ζεκαίλεη:


 Δθηέιεζε ηελ εληνιή cat
 Γψζε σο φξηζκα ζηελ cat ην φλνκα αξρείνπ file1.txt
Ζ ιεηηνπξγία ηεο εληνιήο cat [2] είλαη ε εκθάληζε ησλ πεξηερνκέλσλ ελφο ή πεξηζζφηεξσλ αξρείσλ.
Με ην παξαπάλσ ζα εκθαληζηνχλ ζην ηεξκαηηθφ ηα πεξηερφκελα ηνπ αξρείνπ file1.txt. Ζ εληνιή cat έρεη
λφεκα λα εθηειείηαη γηα λα εκθαλίζεη αξρεία, ησλ νπνίσλ ην πεξηερφκελν κπνξεί λα εκθαληζηεί κέζα ζε έλα
ηεξκαηηθφ, δειαδή κφλν αξρεία απινχ θεηκέλνπ. Σα αξρεία απινχ θεηκέλνπ ζηα windows έρνπλ ηελ
θαηάιεμε .txt. ΢ην unix κπνξνχλ λα έρνπλ νπνηαδήπνηε θαηάιεμε (πνιιέο θνξέο θαη θακία θαηάιεμε). Δάλ
κε ηελ cat πξνζπαζήζνπκε λα εκθαλίζνπκε έλα αξρείν πνπ δελ είλαη αξρείν θεηκέλνπ, ηφηε ζα εκθαληζηνχλ
ζην ηεξκαηηθφ πεξίεξγνη ραξαθηήξεο νη νπνίνη αληηζηνηρνχλ ζε bytes πνπ δελ είλαη αλαγλσξίζηκα ζε
θαηάζηαζε θεηκέλνπ. Κάηη αληίζηνηρν ζα βιέπακε αλ αλνίγακε κηα εηθφλα ηχπνπ .png κε ηνλ θεηκελνγξάθν
notepad.

΢ρήκα 2.5: Καιή θαη θαθή ρξήζε ηεο cat.

40
΢ρήκα 2.6: Απνηέιεζκα θαθήο ρξήζεο ηεο cat.

΢ηελ εληνιή cat κπνξνχκε λα δψζνπκε πνιιά νλφκαηα αξρείσλ σο νξίζκαηα. Θα εκθαλίζεη ηα
πεξηερφκελα φισλ ησλ αξρείσλ, ην έλα κεηά ην άιιν ρσξίο θάπνην δηαρσξηζηηθφ ελδηάκεζα, φπσο ζην ΢ρήκα
2.7.
Error! Not a valid link.
΢ρήκα 2.7: Απνηέιεζκα ηεο cat κε 2 αξρεία σο νξίζκαηα.

΢ηελ εληνιή cat κπνξνχκε λα δψζνπκε θαη νξίζκαηα ηχπνπ «ζεκαίαο» (flag). Γηα παξάδεηγκα ε
ζεκαία "-n" έρεη σο απνηέιεζκα λα εκθαλίζεη ε εληνιή θαη αχμνληα αξηζκφ κπξνζηά απφ θάζε γξακκή
(Βιέπε ΢ρήκα 2.8).
Error! Not a valid link.
΢ρήκα 2.8: Απνηέιεζκα ηεο cat κε 2 αξρεία σο νξίζκαηα θαη ε ζεκαία "-n".

2.3.2 Η εληνιή man

Έλαο ρξήζηεο δελ είλαη δπλαηφ λα ζπκάηαη φια ηα δπλαηά νξίζκαηα γηα φιεο ηηο εληνιέο. ΢πλήζσο ζπκφκαζηε
κφλν απηά πνπ ρξεζηκνπνηνχκε πνιχ ζπρλά. Θα πξέπεη, ινηπφλ, ν ρξήζηεο λα κπνξεί λα βξίζθεη εχθνια ηα
νξίζκαηα πνπ κπνξεί λα δερζεί κηα εληνιή. Απηφ γίλεηαη ρξεζηκνπνηψληαο ην εγρεηξίδην ρξήζεο (manual
page) ηεο εληνιήο. Σν εγρεηξίδην ρξήζεο εκθαλίδεηαη ρξεζηκνπνηψληαο ηελ εληνιή man. Ζ εληνιή man [8]
δέρεηαη σο φξηζκα ην φλνκα κηαο εληνιήο θαη καο εκθαλίδεη ην εγρεηξίδην ρξήζεο γηα ηελ εληνιή. Γηα
παξάδεηγκα ε εληνιή:

man cat

ζα εκθαλίζεη ην εγρεηξίδην ρξήζεο ηεο εληνιήο cat φπσο ζην ΢ρήκα 2.9. ΢ην ζρήκα, δηαθξίλνληαη ηα
ζηνηρεία κε ηίηιν "NAME", "SYNOPSIS" θαη "DESCRIPTION".

41
΢ρήκα 2.9: Σν εγρεηξίδην ρξήζεο ηεο εληνιήο cat.

Σα ζπλήζε ηκήκαηα ελφο εγρεηξηδίνπ ρξήζεο είλαη ηα:


 ΝΑΜΔ: φλνκα θαη ζχληνκε πεξηγξαθή ηεο εληνιήο,
 SYNOPSIS: ε ζχληαμε ηεο εληνιήο,
 DESCRIPTION: αλαιπηηθά ηα νξίζκαηα πνπ κπνξεί λα δερζεί ε εληνιή,
 EXAMPLES: κεξηθά ζχληνκα παξαδείγκαηα,
 AUTHOR: Οη δεκηνπξγνί ηεο εληνιήο θαη ηνπ εγρεηξηδίνπ ρξήζεο,
 COPYRIGHT: κε βάζε πνηεο άδεηεο ρξήζεο κπνξεί λα ρξεζηκνπνηεζεί ε εληνιή,
 SEE ALSO: άιια εγρεηξίδηα ζηα νπνία κπνξνχλ λα βξεζνχλ ζρεηηθέο πιεξνθνξίεο.

Ζ ζεηξά ησλ παξαπάλσ, δειψλεη θαη ηελ ζπνπδαηφηεηά ηνπο. Ζ πεξηγξαθή ηνπ ηη θάλεη ε εληνιή είλαη
ην πιένλ ζεκαληηθφ ζηνηρείν θαη αθνινπζεί ε ζχληαμε ηεο εληνιήο πνπ πεξηγξάθεηαη ζην ηκήκα
"SYNOPSIS". ΢ε απηφ ην ηκήκα γηα ηελ εληνιή cat βιέπνπκε ηελ πιεξνθνξία:

cat [OPTION]... [FILE]...

Δδψ πξέπεη λα εμεγήζνπκε ηα ζχκβνια πνπ εκθαλίδνληαη ζηε ζχληαμε:


 OPTION: καο δίλεη ηελ πιεξνθνξία φηη ζε απηφ ην ζεκείν πξέπεη λα κπνπλ ηα νξίζκαηα ηχπνπ "ζεκαίαο"
("options" ή "flags").
 [] : δειψλνπλ πξναηξεηηθφ φξηζκα (δειαδή ηα [OPTIONS] ζηελ πξνεγνχκελε πεξίπησζε είλαη
πξναηξεηηθά.
 ... : δειψλνπλ φηη κπνξνχκε λα δψζνπκε πνιιά νξίζκαηα ηνπ πξνεγνχκελνπ ηχπνπ.
 [FILE]... : ζε απηφ ην ζεκείν κπνξνχκε λα δψζνπκε νλφκαηα αξρείσλ. ΢ηε ζπγθεθξηκέλε πεξίπησζε
πνιιά ή θαη θαλέλα εθφζνλ είλαη πξναηξεηηθφ φξηζκα.
Υξεζηκνπνηψληαο ηηο παξαπάλσ πιεξνθνξίεο θαη βιέπνληαο ζην ηκήκα "DESCRIPTION" πνηεο είλαη
νη δπλαηέο ζεκαίεο θαη ηη ζεκαίλεη ε θαζεκία, απνθηνχκε ζπλνιηθή εηθφλα γηα ηε ρξήζε ηεο εληνιήο. Έηζη γηα
παξάδεηγκα ε εθηέιεζε ηεο cat κε ηα παξαθάησ νξίζκαηα:

42
cat -n -E file1.txt file2.txt

΢εκαίλεη:
 "OPTIONS": έρνπκε δψζεη δπν ζεκαίεο, ηηο -n -E σο 1ν θαη 2ν φξηζκα.
 "FILES": έρνπκε δψζεη δπν αξρεία (file1.txt θαη file2.txt) σο 3ν θαη 4ν φξηζκα.
 To -n δίλεη ηελ νδεγία ζηελ εληνιή λα εκθαλίζεη έλαλ αχμνληα αξηζκφ ζηελ αξρή θάζε γξακκήο
(ζχκθσλα κε ην εγρεηξίδην ρξήζεο).
 To -Δ δίλεη ηελ νδεγία ζηελ εληνιή λα εκθαλίζεη ην $ ζην ηέινο θάζε γξακκήο (ζχκθσλα κε ην εγρεηξίδην
ρξήζεο).

2.3.3 Γηαθνξνπνίεζε ΢εκαηώλ θαη Αξρείσλ

Πψο, φκσο, δηαρσξίδεη ε εληνιή cat (θαη νη ππφινηπεο εληνιέο πνπ δέρνληαη παξφκνηνπο ηχπνπο νξηζκάησλ)
ζε πνην ζεκείν ηειεηψλνπλ ηα νξίζκαηα ηχπνπ ζεκαίαο θαη ζε πνην ζεκείν μεθηλνχλ ηα νξίζκαηα πνπ
εθθξάδνπλ νλφκαηα αξρείσλ, δεδνκέλνπ φηη δελ ππάξρεη θάπνην δηαρσξηζηηθφ ζχκβνιν κεηαμχ ηνπο, θαη
δεδνκέλνπ φηη φια ηα νξίζκαηα είλαη πξναηξεηηθά; Μήπσο ζα κπνξνχζαλ λα κελ ππάξρνπλ θαλ νξίζκαηα
ηχπνπ ΢εκαίαο;
Ζ απάληεζε ζην πξνεγνχκελν εξψηεκα είλαη φηη ν δηαρσξηζκφο ησλ ηχπσλ ησλ νξηζκάησλ γίλεηαη κε
βάζε ην αλ ππάξρεη ε παχια (-) ζηελ αξρή ηνπ νξίζκαηνο. Μάιηζηα ζε θάπνηεο πεξηπηψζεηο κπνξεί λα
ππάξρεη δηπιή παχια (--). ΢πλεπψο, ε εληνιή "cat" δηαρσξίδεη ην "-Δ" θαη "θαηαιαβαίλεη" φηη δελ εθθξάδεη
φλνκα αξρείνπ, εμαηηίαο ηεο παχιαο κε ηελ νπνία μεθηλάεη ε ζπκβνινζεηξά (string) πνπ αληηζηνηρεί ζην
φξηζκα.
Όηαλ ηα νξίζκαηα ηχπνπ ζεκαίαο εθθξάδνληαη κε έλα γξάκκα ην θαζέλα, ζπλήζσο νη εληνιέο
επηηξέπνπλ ηελ ζχκπηπμε ηνπο ζε έλα φξηζκα. Έηζη ην:

cat -n -E file1.txt file2.txt

είλαη ηζνδχλακν σο πξνο ην απνηέιεζκα κε ην:

cat -nE file1.txt file2.txt

Παξφηη νη δπν παξαπάλσ εληνιέο είλαη ηζνδχλακεο γηα ην απνηέιεζκα, ζηελ πξψηε πεξίπησζε
έρνπκε δψζεη ηέζζεξα νξίζκαηα ζηελ εληνιή, ηα δπν εθ ησλ νπνίσλ είλαη ζεκαίεο. ΢ηε δεχηεξε πεξίπησζε
έρνπκε δψζεη ηξία νξίζκαηα ζηελ εληνιή. Μφλν ην πξψην απφ απηά (-nE) εθθξάδεη ζεκαία θαη κάιηζηα
αληηζηνηρεί ζε δπν ζεκαίεο. Σν αλ ππάξρεη απηή ε δπλαηφηεηα γηα ζχκπηπμε είλαη ζέκα ηεο θάζε εληνιήο θαη
φρη ηνπ θειχθνπο ή ηνπ ιεηηνπξγηθνχ ζπζηήκαηνο. Τπάξρνπλ αξθεηέο εληνιέο πνπ δελ επηηξέπνπλ ζχκπηπμε
ζηα νξίζκαηά ηνπο.
Ζ εληνιή ls [5] εκθαλίδεη ηα πεξηερφκελα (αξρεία θαη ππνθαηαιφγνπο) ηνπ θαηαιφγνπ ζηνλ νπνίν
βξηζθφκαζηε (ζην επφκελν θεθάιαην ζα δνχκε πεξηζζφηεξεο ιεπηνκέξεηεο γηα απηφ). Μπνξείηε λα δείηε ην
εγρεηξίδην ρξήζεο ηεο εληνιήο ls. Έλα παξάδεηγκα εθηέιεζεο ηεο εληνιήο είλαη:

ls -l -a /tmp

΢ην παξαπάλσ έρνπκε δψζεη ηξία νξίζκαηα ζηελ εληνιή. Σν πξψην είλαη ην -l θαη είλαη ηχπνπ
ζεκαίαο. Σν δεχηεξν είλαη ην -a θαη είλαη θαη απηφ ηχπνπ ζεκαίαο θαη ην ηξίην είλαη ην /tmp ην νπνίν
εθθξάδεη ηνλ θάθειν ηνπ νπνίνπ ηα πεξηερφκελα ζα καο εκθαλίζεη ε εληνιή. Όηαλ ηα νξίζκαηα είλαη ηχπνπ

43
ζεκαίαο θαη ζεκαηνδνηνχληαη κε έλαλ κφλν ραξαθηήξα (πρ. a, l θηι.), ηφηε νη πεξηζζφηεξεο εληνιέο
ππνζηεξίδνπλ ηελ ζχκπηπμή ηνπο. Έηζη ε πξνεγνχκελε εληνιή είλαη ηζνδχλακε κε ηελ:

ls -la /tmp

Οη δπν πξνεγνχκελεο εληνιέο είλαη ηζνδχλακεο σο πξνο ην απνηέιεζκα. Όκσο ζηελ πξψηε
πεξίπησζε έρνπκε δψζεη ζηελ εληνιή ηξία νξίζκαηα, εθ ησλ νπνίσλ ηα δπν πξψηα είλαη ηχπνπ ζεκαίαο. ΢ηε
δεχηεξε πεξίπησζε έρνπκε δψζεη ζηελ εληνιή δπν νξίζκαηα. Μφλν ην πξψην είλαη ηχπνπ ζεκαίαο, αιιά
εθθξάδεη δπν ζεκαίεο, δειαδή δπν νδεγίεο πξνο ηελ εληνιή.
Δπίζεο, νη πεξηζζφηεξεο εληνιέο ππνζηεξίδνπλ νξίζκαηα ηχπνπ ζεκαίαο, ηα νπνία εθθξάδνληαη φρη
κφλν κε έλαλ ραξαθηήξα, αιιά κε νιφθιεξεο ιέμεηο. Αο δνχκε έλα απφζπαζκα απφ ην εγρεηξίδην ρξήζεο ηεο
εληνιήο ls:

-a, --all
do not ignore entries starting with .

-A, --almost-all
do not list implied . and ..

--author
with -l, print the author of each file

-b, --escape
print C-style escapes for nongraphic characters

--block-size=SIZE
scale sizes by SIZE before printing them. E.g.,
`--block-size=M' prints sizes in units of 1,048,576 bytes. See
SIZE format below.
.......
-r, --reverse
reverse order while sorting
.......

΢ην παξαπάλσ βιέπνπκε φηη ππάξρεη ην φξηζκα --author, ην νπνίν νδεγεί ηελ εληνιή λα εκθαλίζεη
γηα θάζε αξρείν ην φλνκα ηνπ ζπγγξαθέα. Δπίζεο, ππάξρεη ην φξηζκα --all ην νπνίν δίλεη ηελ νδεγία γηα
εκθάληζε θαη ησλ θξπθψλ αξρείσλ. Σν --all είλαη ηζνδχλακν κε ην -a. ΢ηελ πξαγκαηηθφηεηα ην -a είλαη
ζπληφκεπζε ηνπ --all. Ζ ζπληφκεπζε απηή ππάξρεη επεηδή πξφθεηηαη γηα έλα πνιχ ζπρλφ φξηζκα. Απφ ηελ
άιιε, γηα ην --author δελ ππάξρεη θάπνηα ζπληφκεπζε, επεηδή δελ ρξεζηκνπνηείηαη πνιχ ζπρλά.

ls -ra
ls -r -a
ls --all --reverse
ls -a -r
ls --all -r
ls --reverse --all

Οη παξαπάλσ ρξήζεηο ηεο εληνιήο ls είλαη απνιχησο ηζνδχλακεο σο πξνο ην απνηέιεζκα. Δδψ αμίδεη
λα επηζεκάλνπκε πσο ζπλήζσο ηα νξίζκαηα ηχπνπ ζεκαίαο, φηαλ αθνινπζνχλ κηα παχια, ηφηε είλαη

44
ζπληνκεχζεηο θαη ε εληνιή εξκελεχεη ηνλ θάζε ραξαθηήξα μερσξηζηά. Όηαλ ππάξρνπλ δπν παχιεο, ηφηε
εξκελεχνληαη σο κηα ιέμε.

2.3.4 Πηζαλά ζθάικαηα θαηά ηε δηαηύπσζε εληνιώλ

Καηά ηελ πιεθηξνιφγεζε εληνιψλ, είλαη πνιχ πηζαλφ λα θάλνπκε θάπνηα ζθάικαηα. Σν ζπρλφηεξν ζθάικα
είλαη ε απνπζία ηνπ θελνχ δηαζηήκαηνο (space) αλάκεζα ζηελ εληνιή θαη ηα νξίζκαηα ή κεηαμχ ησλ
νξηζκάησλ.

asidirop@dellpc:~/tmp/unix$ ls-l
ls-l: command not found
asidirop@dellpc:~/tmp/unix$ ls-l -a
ls-l: command not found
asidirop@dellpc:~/tmp/unix$ ls -l-a
ls: invalid option -- '-'
Try `ls --help' for more information.
asidirop@dellpc:~/tmp/unix$

Καηά ηελ εθηέιεζε ησλ παξαπάλσ εληνιψλ εκθαλίδνληαη κελχκαηα ζθαικάησλ. ΢ηελ πξψηε
πεξίπησζε, πιεθηξνινγήζακε θνιιεηά, δειαδή ρσξίο θελφ δηάζηεκα, ην φλνκα ηεο εληνιήο κε ην πξψην
φξηζκα. Σν θέιπθνο πνπ εξκελεχεη ηελ εληνιή δελ κπνξεί λα αληηιεθζεί πνπ ηειεηψλεη ην φλνκα ηεο εληνιήο
θαη πνπ μεθηλνχλ ηα νξίζκαηα ιφγσ ηεο απνπζίαο θελνχ δηαζηήκαηνο, πνπ ιεηηνπξγεί σο δηαρσξηζηήο
(ελαιιαθηηθά θαη πνιιά θελά δηαζηήκαηα). Έηζη, πξνζπαζεί λα βξεη θαη λα εθηειέζεη ηελ εληνιή ls-l. Γελ
κπνξεί φκσο λα βξεη κηα ηέηνηα εληνιή, θαη εκθαλίδεη ην κήλπκα φηη ε εληνιή ls-l δελ κπνξεί λα βξεζεί.
Αθξηβψο ην ίδην ζθάικα ππάξρεη θαη ζηε δεχηεξε εληνιή. Σν θέιπθνο αληηιακβάλεηαη φηη
πξνζπαζνχκε λα εθηειέζνπκε ηελ εληνιή κε φλνκα "ls-l" θαη λα ηεο δψζνπκε έλα φξηζκα, ην "-a".
Πξνθαλψο, ζα καο εκθαληζηεί ην ίδην αθξηβψο κήλπκα ζθάικαηνο.
΢ηελ ηξίηε πεξίπησζε ην ιάζνο είλαη φηη δελ έρνπκε βάιεη θελφ δηάζηεκα κεηαμχ ησλ νξηζκάησλ.
Έηζη ην θέιπθνο αλαγλσξίδεη ζσζηά σο φλνκα εληνιήο ην "ls" . Όκσο δίλεη ζηελ εληνιή έλα φξηζκα ην
νπνίν είλαη ην "-l-a". Σν κήλπκα ζθάικαηνο ην εκθαλίδεη ε ίδηα ε εληνιή. Ζ εληνιή έρεη ιάβεη ηελ
πιεξνθνξία φηη ηεο δφζεθε έλα κφλν φξηζκα ην νπνίν αληηζηνηρεί ζηε ζπκβνινζεηξά "-l-a". Ζ εληνιή
πξνζπαζψληαο λα εξκελεχζεη ην φξηζκα πνπ δέρζεθε, ειέγρεη ηελ αξρή ηεο ζπκβνινζεηξάο θαη αλαγλσξίδεη
φηη μεθηλά κε κηα παχια. Άξα ν θαζέλαο απφ ηνπο ραξαθηήξεο πνπ αθνινπζνχλ ζα πξέπεη λα αληηζηνηρεί ζε
κηα νδεγία. ΢πάεη ινηπφλ ηελ ζπκβνινζεηξά πνπ αθνινπζεί ζηνπο ραξαθηήξεο "l", "-", "a" θαη
πξνζπαζεί λα εξκελεχζεη ηνλ θαζέλαλ ραξαθηήξα απφ απηνχο σο νδεγία. Γηα ηα "l" θαη "a" βξίζθεη ζε
πνηα νδεγία αληηζηνηρνχλ. Όρη φκσο γηα ην "-", ην νπνίν απφ κφλν ηνπ δελ αληηζηνηρεί ζε θακία. Έηζη ην
κήλπκα ζθάικαηνο ηεο εληνιήο είλαη φηη δελ επηηξέπεηαη ε επηινγή "-".
Δδψ, αμίδεη λα αλαθέξνπκε θαη ηελ εμήο ηδηάδνπζα πεξίπησζε. Έζησ φηη ππάξρεη έλα αξρείν, ηνπ
νπνίνπ ην φλνκα μεθηλάεη κε ην ραξαθηήξα "-". Αο ζεσξήζνπκε φηη ην αξρείν νλνκάδεηαη "-file1.txt".
Θέινπκε λα ρξεζηκνπνηήζνπκε ηελ εληνιή cat, γηα λα δνχκε ηα πεξηερφκελά ηνπ. Δθφζνλ ζηελ cat δίλνπκε
σο φξηζκα ην φλνκα ηνπ αξρείνπ πξνο εκθάληζε, ε παξαθάησ εληνιή ζα πεξηκέλακε λα εθηειεζηεί ζσζηά:

asidirop@dellpc:~/tmp/unix$ cat -file1.txt


cat: invalid option -- 'f'
Try `cat --help' for more information.

Όκσο βιέπνπκε φηη ε εληνιή cat εκθαλίδεη ην κήλπκα ζθάικαηνο: «δελ επηηξέπεηαη ε ξχζκηζε 'f'».
Απηφ πξνθχπηεη απφ ην γεγνλφο, φηη ην φξηζκα μεθηλά κε ηνλ ραξαθηήξα "-". Έηζη, ε εληνιή cat δελ κπνξεί
λα θαηαιάβεη φηη πξφθεηηαη γηα φλνκα αξρείνπ, αιιά ζεσξεί φηη πξφθεηηαη γηα φξηζκα ηχπνπ ζεκαίαο. Δπεηδή

45
ην φξηζκα μεθηλάεη κε κηα παχια, ρσξίδεη ηελ ππφινηπε ζπκβνινζεηξά ζε ραξαθηήξεο "f", "i", "l",
"e", "1", ".", "t", "x", "t". Σνλ θαζέλαλ απφ ηνπο ραξαθηήξεο απηνχο πξνζπαζεί λα ηνλ
εξκελεχζεη σο νδεγία-ξχζκηζε. Δπεηδή φκσο δελ ππάξρεη ξχζκηζε πνπ λα αληηζηνηρεί ζην ραξαθηήξα "f",
εκθαλίδεηαη ην αλάινγν ζθάικα.
Αληίζηνηρε πεξίπησζε ζα είρακε αλ ην φλνκα ηνπ αξρείνπ πνπ ζέινπκε λα εκθαλίζνπκε άξρηδε κε
δπν παχιεο, γηα παξάδεηγκα "--file2.txt".

asidirop@dellpc:~/tmp/unix$ cat --file2.txt


cat: unrecognized option '--file2.txt'
Try `cat --help' for more information.

΢ε απηήλ ηελ πεξίπησζε, ε εληνιή cat δηαπηζηψλεη φηη ην φξηζκα πνπ δέρζεθε αξρίδεη κε δπν
παχιεο, άξα ζεσξεί φηη πξφθεηηαη γηα ξχζκηζε πνπ εθθξάδεηαη κε κηα ιέμε. Έηζη, εκθαλίδεηαη θαη πάιη ην
αληίζηνηρν κήλπκα ζθάικαηνο.
Πψο ζα κπνξνχζακε λα ρεηξηζηνχκε ζσζηά ηηο παξαπάλσ πεξηπηψζεηο; Ζ απάληεζε είλαη:
δηαηππψλνληαο ην φλνκα ηνπ αξρείνπ κε ηέηνηνλ ηξφπν ψζηε λα κελ αξρίδεη κε "-". Έηζη, κπνξνχκε λα
ρξεζηκνπνηήζνπκε ηε Γηαδξνκή (Path) πξνο ην αξρείν φπσο παξαθάησ. Γηα ηηο δηαδξνκέο φκσο ζα κηιήζνπκε
ζην επφκελν θεθάιαην.

asidirop@dellpc:~/tmp/unix$ cat ./-file1.txt


Απηά είλαη ηα πεξηερόκελα ηνπ αξρείνπ -file1.txt
asidirop@dellpc:~/tmp/unix$ cat ./--file2.txt
Απηά είλαη ηα πεξηερόκελα ηνπ αξρείνπ --file2.txt
asidirop@dellpc:~/tmp/unix$

2.3.5 Γηαρσξηζκόο εληνιώλ

Όπσο έρεη γίλεη αληηιεπηφ, νη εληνιέο ρσξίδνληαη κεηαμχ ηνπο κε ηελ αιιαγή γξακκήο. Όηαλ παηάκε ην
πιήθηξν "Enter", ην θέιπθνο εξκελεχεη νηηδήπνηε έρεη πιεθηξνινγεζεί ζηε γξακκή θαη ην εθηειεί.
Μπνξνχκε, φκσο, ζε κηα γξακκή λα πιεθηξνινγήζνπκε πνιιέο εληνιέο. Οη εληνιέο κεηαμχ ηνπο κπνξνχλ λα
δηαρσξίδνληαη κε ηνλ ραξαθηήξα ";", φπσο ζπκβαίλεη ζηηο πεξηζζφηεξεο γιψζζεο πξνγξακκαηηζκνχ.

Error! Not a valid link.


΢ρήκα 2.10: Δθηέιεζε δπν εληνιώλ ζε κηα γξακκή εληνιήο.

΢ην ΢ρήκα 2.10 βιέπνπκε έλα παξάδεηγκα, φπνπ ζε κηα γξακκή έρνπλ δηαηππσζεί δπν εληνιέο.
Γηαρσξηζηήο είλαη ην ειιεληθφ εξσηεκαηηθφ (;). Πξηλ θαη κεηά ην εξσηεκαηηθφ κπνξνχλ λα ππάξρνπλ θελά
δηαζηήκαηα ή φρη. Σν θελφ δηάζηεκα δελ παίδεη ξφιν ζε απηήλ ηελ πεξίπησζε, δηφηη έηζη θη αιιηψο ην
θέιπθνο εξκελεχεη ην εξσηεκαηηθφ κε κεγαιχηεξε πξνηεξαηφηεηα απφ ηνπο ππφινηπνπο εηδηθνχο ραξαθηήξεο
φπσο ην θελφ δηάζηεκα. Σν θέιπθνο, αθνχ θάλεη ηελ ζπληαθηηθή αλάιπζε ηεο γξακκήο εληνιήο, αλαγλσξίδεη
φηη πξφθεηηαη γηα δπν εληνιέο. Πξψηα ζα εθηειέζεη ηελ πξψηε, θαη αθνχ νινθιεξσζεί ε εθηέιεζή ηεο, ζα
εθηειέζεη ηε δεχηεξε. ΢ην ηεξκαηηθφ ζα εκθαληζηεί πξψηα ε έμνδνο ηεο πξψηεο εληνιήο, θαη κεηά, ρσξίο λα
ππάξρεη θάπνην δηαρσξηζηηθφ, ζα εκθαληζηεί ε έμνδνο ηεο δεχηεξεο εληνιήο. Δπνκέλσο, κε ηνλ ίδην ηξφπν, ζε
κηα γξακκή κπνξνχλ λα ζπλδπαζηνχλ πεξηζζφηεξεο απφ δπν εληνιέο.

46
2.3.6 Αθύξσζε εληνιήο

Καηά ηε δηάξθεηα πιεθηξνιφγεζεο κηαο καθξνζθεινχο εληνιήο, θαη εθφζνλ επηζπκνχκε ηελ αθχξσζε ηεο
πιεθηξνιφγεζεο κπνξνχκε λα παηήζνπκε ηνλ ζπλδπαζκφ πιήθηξσλ Control-C. Σν πιήθηξν Control, ζην
UNIX ζπλήζσο ζπκβνιίδεηαη κε ηνλ ραξαθηήξα "^". Έηζη, ην Control-C ζπκβνιίδεηαη σο "^C". Ζ επηινγή
ηνπ πιήθηξνπ "C" γηα ηελ αθχξσζε πξνθχπηεη απφ ηε ιέμε "Cancel". Μεηά απφ ην πάηεκα απηνχ ηνπ
ζπλδπαζκνχ, ην θέιπθνο εκθαλίδεη ζηελ επφκελε γξακκή ηελ πξνηξνπή (prompt) θαη είλαη έηνηκν λα δερζεί
ηελ επφκελε εληνιή (΢ρήκα 2.11). Απηφο ν ζπλδπαζκφο πιήθηξσλ ρξεζηκνπνηείηαη αληί λα δηαγξάςνπκε φιε
ηε γξακκή πνπ έρνπκε πιεθηξνινγήζεη ρξεζηκνπνηψληαο ην πιήθηξν "Backspace".

΢ρήκα 2.11: Αθύξσζε εληνιήο.

2.4 Αζθήζεηο γηα εμάζθεζε

΢ηόρνο
Δμνηθείσζε κε ηα ζπζηήκαηα Unix/Linux ηνπ ηκήκαηνο. Δμνηθείσζε κε ηελ γξακκή εληνιψλ.

Άζθεζε 1
1. Υξεζηκνπνηείζηε έλα ζχζηεκα κε Linux. Δάλ είζηε ρξήζηεο ησλ εξγαζηεξίσλ ηνπ ηκήκαηνο Μεραληθψλ
Πιεξνθνξηθήο ηνπ ΑΣΔΗ Θεζ/λίθεο, επηιέμηε θαηά ηελ εθθίλεζε ηνπ ππνινγηζηή (boot) ηελ επηινγή
"Debian Linux".

2. Δκθαλίδεηαη ε αξρηθή νζφλε εηζφδνπ φπνπ δεηείηαη ην φλνκα ρξήζηε θαη ν θσδηθφο εηζφδνπ
(username/password). Δλεκεξσζείηε απφ ηνλ θαζεγεηή ζαο πνηα πξέπεη λα ρξεζηκνπνηήζεηε.

Login νλνκάδεηαη ε δηαδηθαζία εηζόδνπ ζην ζύζηεκα (ηαπηνπνίεζε ρξήζηε) θαη logout νλνκάδεηαη
ε δηαδηθαζία εμόδνπ (απνζύλδεζεο)

3. Δληνπίζηε ηελ εθαξκνγή "Terminal" ή "Konsole" θαη θάληε θιηθ. Δθηειείηαη κηα εθαξκνγή ε νπνία
πξνζνκνηψλεη έλα ηεξκαηηθφ. Μέζα ζην ηεξκαηηθφ εθηειείηαη έλα θέιπθνο (shell). Σν θέιπθνο είλαη
ππεχζπλν λα αλαγλσξίζεη ηηο εληνιέο καο θαη λα ηηο πξνσζήζεη ζηνλ ππξήλα γηα εθηέιεζε.

4. Γνθηκάζηε λα εθηειέζεηε ηηο παξαθάησ εληνιέο [7, 3, 11, 4]:

47
whoami
date
cal
cal 2016
echo "Hello world"
whoami; date

5. Ο ηξφπνο πνπ εξκελεχνληαη νη εληνιέο εμαξηάηαη απφ ην θέιπθνο πνπ ρξεζηκνπνηνχκε θαη φρη απφ ην
πξφγξακκα πξνζνκνίσζεο ηεξκαηηθνχ. Πιένλ επξέσο δηαδεδνκέλν θέιπθνο, πνπ ρξεζηκνπνηείηαη ζπρλά,
είλαη ην "bash". ΢ην παξφλ ζα ρξεζηκνπνηήζνπκε ην bash θαη ηνλ πξφγνλφ ηνπ ην sh.

6. Παηήζηε Ctrl-Alt-F1. Δκθαλίδεηαη κπξνζηά ζαο έλα άιιν ηεξκαηηθφ (θνλζφια). Tελ ίδηα εηθφλα ζα
βιέπαηε ζε θάπνην ζχζηεκα ζην νπνίν δελ ππάξρεη εγθαηεζηεκέλν παξαζπξηθφ πεξηβάιινλ. ΢αο δεηείηαη
πάιη φλνκα ρξήζηε θαη θσδηθφο.

Όηαλ πιεθηξνινγνύκε θσδηθό πξόζβαζεο ζε θάπνην πξόγξακκα (π.ρ. ζε κηα ηζηνζειίδα κέζσ ελόο
browser), δελ εκθαλίδνληαη νη ραξαθηήξεο πνπ πιεθηξνινγνύκε θαη αληί απηώλ ζπλήζσο
εκθαλίδνληαη αζηεξάθηα (*). Όηαλ πιεθηξνινγνύκε θσδηθό πξόζβαζεο ζε θάπνην ηεξκαηηθό ή
θνλζόια, δελ εκθαλίδεηαη απνιύησο θαλέλαο ραξαθηήξαο (νύηε αζηεξάθηα), όκσο ην ζύζηεκα
αλαγλσξίδεη ηα πιήθηξα πνπ πιεθηξνινγνύληαη. Σν ηέινο εηζαγσγήο ηνπ θσδηθνύ ζεκαηνδνηείηαη
κε ην πάηεκα ηνπ Enter.

7. Δθηειέζηε αθξηβψο ηηο ίδηεο εληνιέο κε ηηο παξαπάλσ. Σα απνηειέζκαηα είλαη αθξηβψο ηα ίδηα, κφλν πνπ
δελ βξηζθφκαζηε ζε παξαζπξηθφ πεξηβάιινλ.

8. Παηήζηε Ctrl-Alt-F2. Μηα λέα θνλζφια εκθαλίδεηαη, φπνπ πάιη πξέπεη λα δψζεηε φλνκα ρξήζηε θαη
θσδηθφ. Πιεθηξνινγήζηε ηα ζσζηά. Γψζηε κηα εληνιή απφ ηηο πξνεγνχκελεο θαη ζηε ζπλέρεηα ηελ
εληνιή "logout".

9. Παηήζηε Ctrl-Alt-F1. Δπηζηξέςαηε ζηελ πξνεγνχκελε θνλζφια. Πιεθηξνινγήζηε ηελ εληνιή "exit".

10. Γνθηκάζηε ηνπο ζπλδπαζκνχο Ctrl-Alt-F1, Ctrl-Alt-F2, ... Ctrl-Alt-F6. Τπάξρνπλ πξν-ξπζκηζκέλεο 6
θνλζφιεο. Παηήζηε Ctrl-Alt-F7 γηα λα επηζηξέςεηε ζην παξαζπξηθφ πεξηβάιινλ.

11. Δληνπίζηε ηελ εθαξκνγή "Terminal" ή "Konsole" θαη εθηειέζηε ηε δπν θνξέο. Άλνημαλ αθφκε δπν
ηεξκαηηθά. Μπνξείηε λα εξγάδεζηε κε πνιιά ηεξκαηηθά ζπγρξφλσο. Καζέλα ηεξκαηηθφ είλαη αλεμάξηεην
απφ ηα ππφινηπα.

Άζθεζε 2
Απνκαθξπζκέλε πξφζβαζε.

Όινη νη θνηηεηέο ηνπ ηκήκαηνο Μεραληθώλ Πιεξνθνξηθήο ηνπ ΑΣΔΙ Θεζζαινλίθεο έρεηε e-mail
ινγαξηαζκό ζηνλ mail-server ηνπ ηκήκαηνο. Η δηεύζπλζε ηνπ email ζαο είλαη ηεο κνξθήο:

antonis@it.teithe.gr

48
όπνπ ην "antonis" είλαη ην όλνκα ρξήζηε (username). Δπίζεο, όινη έρεηε αληίζηνηρν ινγαξηαζκό
(account) ζηνλ θεληξηθό Linux-server ηνπ ηκήκαηνο, o νπνίνο έρεη ηε δηεύζπλζε (hostname)
aetos.it.teithe.gr Σν όλνκα ρξήζηε πνπ αληηζηνηρεί ζηνλ ινγαξηαζκό ζαο ζηνλ aetos είλαη ίδην κε ην
όλνκα ρξήζηε ηνπ mail-server (πρ. antonis), όπσο θαη ν θσδηθόο πξόζβαζεο.

Μπνξείηε λα "αλνίμεηε" έλα θέιπθνο ζηνλ aetos.it.teithe.gr ή ζε νπνηνλδήπνηε απνκαθξπζκέλν


ππνινγηζηή ζηνλ νπνίν δηαζέηεηε ινγαξηαζκό θαη λα εθηειείηε εληνιέο απνκαθξπζκέλα (δειαδή νη
εληνιέο ζαο λα εθηεινύληαη ζην απνκαθξπζκέλν κεράλεκα). Απηό πνπ ρξεηάδεζηε είλαη έλα
πξόγξακκα ην νπνίν λα έρεη ηελ ηθαλόηεηα λα επηθνηλσλεί κε έλα απνκαθξπζκέλν ππνινγηζηή θαη
λα εθηειέζεη εθεί έλα θέιπθνο. Από ηελ άιιε κεξηά, ν απνκαθξπζκέλνο ππνινγηζηήο πξέπεη λα
κπνξεί λα επηθνηλσλήζεη κε απηό ην πξόγξακκα θαη λα δερηεί ηε ζύλδεζε. Απηή ε επηθνηλσλία ησλ
δπν ππνινγηζηώλ γίλεηαη βάζεη θάπνηνλ πξσηνθόιισλ επηθνηλσλίαο. Σα πεξηζζόηεξν γλσζηά είλαη
ηα: telnet, rsh (remote shell), rlogin (remote login), ssh (secure shell) [9]. Πιένλ ρξεζηκνπνηείηαη
κόλν ην ssh, δηόηη ηα ππόινηπα δελ παξέρνπλ αξθεηή αζθάιεηα θαηά ηελ επηθνηλσλία θαη ηελ
αληαιιαγή δεδνκέλσλ. Ο aetos δελ ζα δερηεί θακία ζύλδεζε κε ηα ππόινηπα πξσηόθνιια
επηθνηλσλίαο παξά κόλν κε ην ssh γηα ιόγνπο αζθαιείαο. Σν ίδην ζα ζπκβεί θαη κε νπνηνδήπνηε
άιιν ππνινγηζηή ν νπνίνο δηαρεηξίδεηαη ζσζηά.

1. ΢ε έλα απφ ηα ηεξκαηηθά πνπ έρεηε αλνίμεη, πιεθηξνινγήζηε ηελ εληνιή (φπνπ "antonis" βάιηε ην δηθφ
ζαο φλνκα ρξήζηε):

ssh antonis@aetos.it.teithe.gr

Δάλ είλαη ε πξψηε αζθαιήο ζχλδεζε ζηνλ ζπγθεθξηκέλν ππνινγηζηή, ζα ζαο δεηεζεί λα επηβεβαηψζεηε
ηελ ηαπηφηεηα ηνπ ππνινγηζηή πιεθηξνινγψληαο "yes". ζα ζαο δεηεζεί θσδηθφο πξφζβαζεο.
Πιεθηξνινγήζηε ηνλ θσδηθφ ζαο θαη παηήζηε "Enter". Δθφζνλ έρεηε πιεθηξνινγήζεη ζσζηά ηνλ θσδηθφ
ζαο, ην ζχζηεκα ζαο θαισζνξίδεη φπσο ζην ΢ρήκα 2.12.

2. Ζ πξνηξνπή πνπ εκθαλίδεη ην θέιπθνο, ζπλήζσο είλαη ηεο κνξθήο: username@hostname:pwd$ δνθηκάζηε
λα εθηειέζεηε ηηο ίδηεο εληνιέο πνπ εθηειέζαηε θαη ηνπηθά λσξίηεξα. Δίλαη ηα απνηειέζκαηα ησλ εληνιψλ
αθξηβψο ίδηα κε πξηλ;

3. Γψζηε ηελ εληνιή [1]: finger antonis (φπνπ antonis ην δηθφ ζαο φλνκα ρξήζηε)

4. Δθηειέζηε ηελ εληνιή [6]: who


Ση βιέπεηε σο απνηέιεζκα; Δίλαη ην δηθφ ζαο φλνκα ρξήζηε αλάκεζα ζηα απνηειέζκαηα ηεο εληνιήο;
Πνηα είλαη ηα ππφινηπα νλφκαηα ρξεζηψλ πνπ εκθαλίδνληαη;

5. Δπηιέμηε έλα απφ ηα νλφκαηα ρξεζηψλ πνπ ζαο εκθάληζε ε who (πρ. ην asidirop). Πνηνο ρξήζηεο είλαη
απηφο; Γψζηε ηελ εληνιή: finger asidirop (φπνπ asidirop ην φλνκα ρξήζηε πνπ επηιέμαηε) γηα λα δείηε
πιεξνθνξίεο γηα ηνλ ρξήζηε.

Error! Not a valid link.


΢ρήκα 2.12: Απνκαθξπζκέλε ζύλδεζε.

49
Άζθεζε 3

΢χληαμε εληνιψλ.

Σν θέιπθνο (shell) αλακέλεη λα πιεθηξνινγήζνπκε εληνιέο. Τπάξρνπλ δηάθνξα θειύθε θαη ην


θαζέλα κπνξεί λα έρεη ηνπο δηθνύο ηνπ θαλόλεο ζύληαμεο. Σν θέιπθνο πνπ ρξεζηκνπνηνύκε είλαη ην
bash (βειηησκέλε έθδνζε ηνπ sh). Η γεληθή ζύληαμε κηαο εληνιήο είλαη:

Όνομα_εντολής ορίσματα_τύποσ_flag ορίσματα_αρτείων

Σα νξίζκαηα από ην όλνκα εληνιήο ρσξίδνληαη κε ηνπιάρηζηνλ έλα θελό δηάζηεκα (space). Σα
νξίζκαηα κεηαμύ ηνπο ρσξίδνληαη επίζεο κε ηνπιάρηζηνλ έλα θελό δηάζηεκα. Πρ:

ls -l -a /tmp

εθηεινύκε ηελ εληνιή κε όλνκα "ls", θαη ηεο δίλνπκε ηξία νξίζκαηα:
1ν όξηζκα: -l
2ν όξηζκα: -a
3ν όξηζκα: /tmp. Σν /tmp είλαη όξηζκα πνπ εθθξάδεη όλνκα θαηαιόγνπ (ή ζα κπνξνύζε θαη
αξρείνπ)

΢πλήζσο νη εληνιέο δηαρσξίδνπλ ηα νξίζκαηα πνπ εθθξάδνπλ όλνκα αξρείνπ από ηα νξίζκαηα πνπ
εθθξάδνπλ ζεκαία (flag ή option) από ηελ παύια (-) πνπ βάδνπκε κπξνζηά ζηα νξίζκαηα ηύπνπ
ζεκαίαο. Σα νξίζκαηα πνπ κπνξνύκε λα δώζνπκε ζε θάζε εληνιή εμαξηώληαη απνθιεηζηηθά από
ηελ ίδηα ηελ εληνιή.

1. Δθηειέζηε ηηο παξαθάησ εληνιέο:

1. ls
2. ls -a
3. ls -l
4. ls -l -a
5. ls -la
6. ls --all
7. ls -a

2. Ση δηαθνξά ππάξρεη ζην απνηέιεζκα ησλ εληνιψλ (6) θαη (7);

3. Ση δηαθνξά ππάξρεη ζην απνηέιεζκα ησλ εληνιψλ (4) θαη (5);

Η εληνιή ls εκθαλίδεη ηα πεξηερόκελα (αξρεία θαη ππνθαηαιόγνπο) ηνπ θαηαιόγνπ (θαθέινπ) ηνλ
νπνίν έρνπκε σο ηξέρνληα θάθειν εξγαζίαο (ζην επόκελν θεθάιαην ζα δνύκε πεξηζζόηεξεο
ιεπηνκέξεηεο γη’ απηό).

50
Με ηα νξίζκαηα ζε κηα εληνιή δίλνπκε νδεγίεο ζηελ εληνιή πώο λα ζπκπεξηθεξζεί. Γηα ηελ ls ην
-a ζεκαίλεη όια ηα αξρεία (θαη ηα θξπθά). Σν -l ζεκαίλεη λα εκθαλίζεη επηπιένλ πιεξνθνξίεο γηα
ηα αξρεία (long listing).
Γηα λα δνύκε ηα δπλαηά νξίζκαηα πνπ κπνξεί λα δερηεί κηα εληνιή, πξέπεη λα δηαβάζνπκε ην
εγρεηξίδην ρξήζεο ή αιιηώο "manual page".
Οη πεξηζζόηεξεο εληνιέο, όηαλ νη ζεκαίεο εθθξάδνληαη κε έλα γξάκκα (πρ: -a ή -l) επηηξέπνπλ
ηελ ζύκπηπμε ηνπο: -a -l ⇔ -al. Απηό είλαη ζέκα δπλαηνηήησλ ηεο θάζε εληνιήο θαη όρη ηνπ
θειύθνπο ή ηνπ UNIX.

4. Δθηειέζηε ηελ εληνιή: "man ls". Βξείηε ηη ζεκαίλεη ην "--all".

Η εληνιή man εκθαλίδεη ην εγρεηξίδην ρξήζεο (manual page) ηεο εληνιήο ηεο νπνίαο ην όλνκα
δώζακε σο όξηζκα. Μέζα ζην "man" κπνξνύκε λα κεηαθηλεζνύκε πάλσ-θάησ κε ηνπο θέξζνξεο ή
ην πιήθηξν θελνύ δηαζηήκαηνο (space), ή ην "Enter". Γηα έμνδν από ην πεξηβάιινλ ηνπ εγρεηξηδίνπ
παηάκε ην πιήθηξν "q".

5. Δθηειέζηε ηελ εληνιή:

ls-l

Ση παξαηεξείηε; Γηαηί;

2.5 Αλαθνξέο
[1] BSD General Commands Manual: finger command.
[2] GNU coreutils Reference Manual: cat command.
[3] GNU coreutils Reference Manual: date command.
[4] GNU coreutils Reference Manual: echo command.
[5] GNU coreutils Reference Manual: ls command.
[6] GNU coreutils Reference Manual: who command.
[7] GNU coreutils Reference Manual: whoami command.
[8] Colin Watson, GNU Manual Pager Utils Reference Manual: man command.
[9] Tatu Ylonen, Markus Friedl, BSD General Commands Manual: ssh command.
[10] WikiPedia. List of terminal emulators, February 2015.
[ http://en.wikipedia.org/wiki/List_of_terminal_emulators ]
[11] Wolfgang Helbig, BSD General Commands Manual: cal command.

51
Κεθάιαην 3

3 Δηζαγσγή ζην ΢ύζηεκα Αξρείσλ

3.1 Οξγάλσζε ηνπ ΢πζηήκαηνο Αξρείσλ


΢ε έλα ζχζηεκα ππνινγηζηή, ζπλήζσο ην ζχζηεκα αξρείσλ πνπ ππνζηεξίδεηαη επηηξέπεη ηε δεκηνπξγία κηαο
ηεξαξρίαο θαθέισλ θαη αξρείσλ. Απηή ε ηεξαξρία είλαη ζρεδφλ ππνρξεσηηθή, δηφηη, αλ φια ηα αξρεία ηνπ
ζπζηήκαηνο βξίζθνληαλ ζε έλαλ κφλν θάθειν, ηφηε ζα ππήξρε κεγάιε δπζθνιία ζηελ νλνκαηνινγία ηνπο.
Δπηπιένλ, δε ζα κπνξνχζε λα γίλεη νξγάλσζε θαη νκαδνπνίεζε απηψλ. Έηζη, έλα ζχζηεκα αξρείσλ ηνπ
Λεηηνπξγηθνχ ΢πζηήκαηνο Microsoft Windows κπνξεί λα αλαπαξαζηαζεί φπσο ζην ΢ρήκα 3.1.

My
Computer

X: (Network
C: D: E: (CD-ROM)
drive)

Program
Temp Windows Users Data Backups
Files

Test1.txt File2.txt asidirop dimitris

΢ρήκα 3.1: Ιεξαξρία ηνπ ΢πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνύ ΢πζηήκαηνο Windows.

Ο όξνο ΢ύζηεκα Αξρείσλ (File System) ζεκαίλεη ην ζύλνιν ησλ αξρείσλ-θαηαιόγσλ θαη
απνζεθεπηηθώλ κέζσλ πνπ δηαρεηξίδεηαη έλαο ππνινγηζηήο. Χο όξνο Σύπνο ΢πζηήκαηνο Αξρείσλ
(File System Type) ελλνείηαη ε δνκή θαη ν αιγόξηζκνο γηα ηελ αληηζηνίρεζε ησλ αξρείσλ ζε
θπζηθά ηκήκαηα ηνπ δίζθνπ. Γλσζηνί Σύπνη ΢πζηεκάησλ Αξρείσλ είλαη νη:
 FAT: File Allocation Table. Τπάξρνπλ δηάθνξεο εθδόζεηο απηνύ ηνπ ηύπνπ, όπσο FAT16,
FAT32, exFAT, vFAT θ.ά.
 NTFS: New Technology File System. Δίλαη ν βαζηθόο ηύπνο ζπζηήκαηνο αξρείσλ πνπ
ρξεζηκνπνηείηαη ζηα ιεηηνπξγηθά ηεο Microsoft.
 Ext: Extended Filesystem. Δίλαη ν βαζηθόο ηύπνο ζπζηήκαηνο αξρείσλ πνπ ρξεζηκνπνηείηαη
από ηηο πεξηζζόηεξεο δηαλνκέο Linux. Έρνπλ αλαπηπρζεί δηάθνξεο εθδόζεηο: ext2, ext3, ext4.
Πξνθαλώο ζε θάζε έθδνζε πξνζηίζεληαη δπλαηόηεηεο.
 Τπάξρνπλ δεθάδεο αθόκε ζπζηήκαηα αξρείσλ, ηα νπνία κπνξείηε λα ηα βξείηε ζην [10]

53
Πνιιέο θνξέο γηα ιόγνπο ζπληνκίαο, αληί ηνπ όξνπ «Σύπνο ΢πζηήκαηνο Αξρείσλ», ρξεζηκνπνηείηαη
ν όξνο «΢ύζηεκα Αξρείσλ». Η δεκηνπξγία ηνπ ΢πζηήκαηνο Αξρείσλ γίλεηαη κε ηε δηαδηθαζία ηεο
«δηακόξθσζεο» (format). Δπίζεο, θάζε ζπζθεπή απνζήθεπζεο κπνξεί λα έρεη δηαθνξεηηθό Σύπν
΢πζηήκαηνο Αξρείσλ. Ο ηύπνο FAT είλαη ν πην απιόο θαη αλαγλσξίδεηαη από όια ηα Λεηηνπξγηθά
(ζπκπεξηιακβαλνκέλσλ ζπζθεπώλ ηειενξάζεσλ, Media Players, ηειέθσλα, εθηππσηέο θηι.). Γη'
απηό θαη πξνηηκάηαη γηα ζπζθεπέο απνζήθεπζεο ηύπνπ USB Stick ή SD Cards. Ο ηύπνο NTFS
αλαγλσξίδεηαη από ηα πεξηζζόηεξα Λεηηνπξγηθά ΢πζηήκαηα (θαη ζπζθεπέο), θαη πιένλ
ρξεζηκνπνηείηαη όιν θαη πεξηζζόηεξν αθόκε θαη γηα θνξεηέο ζπζθεπέο (USB Sticks). Ο ηύπνο ext
αλαγλσξίδεηαη κόλν από Λεηηνπξγηθά ΢πζηήκαηα ηεο νηθνγέλεηαο UNIX.

Τπάξρεη ε έλλνηα ηνπ «Τπνινγηζηή κνπ» (“My Computer”). Απηφ απνηειεί ηνλ αξρηθφ θφκβν ζηελ
ηεξαξρία ησλ αξρείσλ. Κάησ αθξηβψο απφ ηνλ «Τπνινγηζηή κνπ» ππάξρνπλ θφκβνη ησλ νπνίσλ ηα νλφκαηα
απνηεινχληαη απφ έλα ιαηηληθφ γξάκκα θαη ην ζχκβνιν “:”. Παξάδεηγκα C:, D:θηι. Καζέλαο απφ απηνχο
ηνπο θφκβνπο αληηζηνηρεί ζε κηα ζπζθεπή απνζήθεπζεο: CD-ROM, USB Stick, ηφκν ζθιεξνχ δίζθνπ (disk
partition). ΢ρεδφλ πάληα ν πξσηεχσλ ζθιεξφο δίζθνο (θαη ν πξσηεχσλ ηφκνο ηνπ) αληηζηνηρίδνληαη ζην
γξάκκα C:. Ο δεχηεξνο ηφκνο ή ην CD-Rom ζην D:θ.ν.θ.
Έλα εξψηεκα πνπ κπνξεί λα δεκηνπξγεζεί ζηνλ αλαγλψζηε είλαη γηαηί ε αξίζκεζε μεθηλά απφ ην
γξάκκα “C:” θαη φρη απφ ην “A:”. Ζ απάληεζε βαζίδεηαη ζηελ ηζηνξία ησλ πξνζσπηθψλ ππνινγηζηψλ (PCs)
θαη ησλ Λεηηνπξγηθψλ ζπζηεκάησλ πνπ αλαπηχρζεθαλ απφ ηελ Microsoft (MS-DOS, MS-Windows). Αξρηθά
νη πξνζσπηθνί ππνινγηζηέο, ζπκβαηνί κε ηελ αξρηηεθηνληθή IBM, δελ είραλ ζθιεξφ δίζθν, αιιά κφλν
ζπζθεπή δηζθέηαο. Ζ αξρηηεθηνληθή ππνζηήξηδε κέρξη δπν ζπζθεπέο δηζθέηαο. Ζ πξψηε δηζθέηα
ζπκβνιηδφηαλ κε ην “Α:” θαη ε δεχηεξε κε ην “Β:”. Αξγφηεξα (ηέιε ηεο δεθαεηίαο ηνπ 1980) αλαπηχρζεθαλ
νη ζθιεξνί δίζθνη. Κάζε πξνζσπηθφο ππνινγηζηήο κπνξνχζε λα έρεη κέρξη ηέζζεξηο ζθιεξνχο δίζθνπο θαη
δπν δηζθέηεο. Δπεηδή φια ηα πξνγξάκκαηα ζεσξνχζαλ κέρξη ηφηε φηη νη ζπζθεπέο Α: θαη “Β:” είλαη δηζθέηεο,
ρξεζηκνπνηήζεθαλ ηα επφκελα γξάκκαηα γηα λα ζπκβνιίζνπλ ηνπο ζθιεξνχο δίζθνπο (C:, D:, ...). Όηαλ
θπθινθφξεζαλ νη επαλεγγξάςηκνη νπηηθνί δίζθνη (CD-RW), ε ρξήζε ησλ δηζθεηψλ άξρηζε λα θζίλεη (πεξίπνπ
ην 2000). Παξφια απηά, επεηδή αθφκε θάπνηνη ρξήζηεο ρξεζηκνπνηνχζαλ πξνγξάκκαηα θηηαγκέλα ηελ
πξνεγνχκελε δεθαεηία, ε ζχκβαζε γηα ηα γξάκκαηα Α: θαη Β: δηαηεξήζεθε θαη νη ρξήζηεο ζπλήζηζαλ ηελ
ηδέα φηη ν πξψηνο ζθιεξφο δίζθνο είλαη ην C:. Ζ Microsoft δηαηήξεζε απηφλ ηνλ ζπκβνιηζκφ πξνθεηκέλνπ λα
κελ αιιάμεη ηε ζπλήζεηα ησλ ρξεζηψλ θαη απηή ε ζχκβαζε ζπλερίδεηαη κέρξη θαη ζήκεξα παξφηη νη
πξνζσπηθνί ππνινγηζηέο δελ δηαζέηνπλ πιένλ ζπζθεπή δηζθέηαο, αιιά νχηε ρξεζηκνπνηνχληαη πξνγξάκκαηα
ηεο πξνεγνχκελεο ηξηαθνληαεηίαο - είλαη «πξσηφγνλα» ζπγθξηλφκελα κε ηηο ζεκεξηλέο δπλαηφηεηεο. Ο
ζπκβνιηζκφο ηνπ C: φκσο έρεη παξακείλεη, ίζσο γηα λα ζπκίδεη ζηνπο παιαηφηεξνπο ιίγν απφ ηζηνξία.
΢ε ζχγθξηζε κε ην ζχζηεκα αξρείσλ ησλ MS-Windows θαη ην πψο απηφ παξνπζηάδεηαη πξνο ηνπο
ρξήζηεο, ζε έλα ζχζηεκα Unix έρνπκε παξφκνηα θηινζνθία. Τπάξρνπλ, φκσο, θαη δηαθνξέο. ΢ε έλα ζχζηεκα
αξρείσλ UNIX ππάξρεη ε έλλνηα ηνπ “/” ην νπνίν είλαη ε ξίδα ηνπ δέληξνπ. Σν “/” νλνκάδεηαη θαη “root
directory” (ξηδηθφο θαηάινγνο). ΢ε αληηπαξαβνιή κε ηα MS-Windows αληηζηνηρεί ζην “My Computer”.
΢εκαληηθή, φκσο, δηαθνξά είλαη φηη ε ξίδα ηνπ δέληξνπ αληηζηνηρεί ζε έλαλ ηφκν (partition) πνπ είλαη ν
πξσηεχσλ ηφκνο πνπ έρεη νξηζηεί. Γηα θάζε επηπιένλ ζπζθεπή απνζήθεπζεο πνπ είλαη ζπλδεδεκέλε, δελ
αληηζηνηρίδνληαη γξάκκαηα ηνπ αγγιηθνχ αιθαβήηνπ. Αληίζεηα, θάζε ζπζθεπή εκθαλίδεηαη σο ηκήκα ηνπ
δέληξνπ. Ο δηαρεηξηζηήο ηνπ ζπζηήκαηνο κπνξεί λα νξίζεη ζε πνην ζεκείν ζηελ ήδε ππάξρνπζα ηεξαξρία.
Έηζη, ζην ΢ρήκα 3.2 ζα κπνξνχζε ν θαηάινγνο SPARE λα αληηζηνηρεί ζε έλαλ δεχηεξν ηφκν ηνπ δίζθνπ.
Δπίζεο, ν θαηάινγνο MOVIE ζα κπνξνχζε λα αληηζηνηρεί ζε έλα DVD. Σέινο, ν
θαηάινγνο remote_files ζα κπνξνχζε λα αληηζηνηρεί ζε θάπνην άιιν δίζθν ή δηθηπαθφ δίζθν.
΢ην ΢ρήκα 3.2 αλαπαξηζηψληαη κε ίδηα ρξψκαηα νη θαηάινγνη πνπ αλήθνπλ ζην ίδην ζχζηεκα αξρείσλ (ηφκν
ή ζπζθεπή απνζήθεπζεο). Οη πεξηζζφηεξεο δηακνλέο Linux, έρνπλ πξν-ξπζκηζκέλε ζπκπεξηθνξά λα
αληηζηνηρνχλ θάζε λέα ζπζθεπή πνπ αλαγλσξίδεηαη θάησ απφ ηνλ θάθειν /media, εθφζνλ δελ έρεη νξηζηεί
δηαθνξεηηθά.

54
/

home tmp boot bin SPARE media

vmlinuz MOVIE MOVIΕ_Π


asidirop dimitris Data Backups (DVD2)
(DVD)

Test1.txt File2.txt Test1.txt File2.txt VIDEO_ AUDIO VIDEO_ AUDIO


local Remote_files
TS _TS TS _TS

…… ……

΢ρήκα 3.2: Σππηθή ηεξαξρία ηνπ ΢πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνύ ΢πζηήκαηνο Unix.

΢ε θάζε ζχζηεκα UNIX αληηζηνηρίδεηαη έλαο θάθεινο γηα θάζε ρξήζηε. Απηφο ν θάθεινο νλνκάδεηαη
“home directory” ηνπ ρξήζηε. ΢ην ΢ρήκα 3.3 παξνπζηάδεηαη έλα ππνηηζέκελν ζχζηεκα αξρείσλ, πνπ κνηάδεη
αξθεηά κε ηελ νξγάλσζε πνπ αθνινπζείηαη ζηνλ θεληξηθφ εμππεξέηε (server) ηνπ ΑΣΔΗ.Θ-Σ.Μ.Τ (ΑΣΔΗ
Θεζζαινλίθεο - Σκήκαηνο Μεραληθψλ Τπνινγηζηψλ). ΢ε απηφλ ηνλ ππνινγηζηή, επεηδή ππάξρνπλ
εθαηνληάδεο ινγαξηαζκνί ρξεζηψλ (πεξίπνπ 1600 θαηά ηε δηάξθεηα ηνπ 2015), αθνινπζείηαη θάπνηα
νκαδνπνίεζε ζε ζρέζε κε ηα home directories ησλ ρξεζηψλ. Γηα ηνπο ρξήζηεο πνπ είλαη θνηηεηέο ηνπ
ηκήκαηνο, δεκηνπξγνχληαη θάθεινη θάησ απφ ηε ζέζε students πνπ βξίζθεηαη θάησ απφ ηε ζέζε /home.
Μάιηζηα, νη θνηηεηέο νκαδνπνηνχληαη κε βάζε ην εμάκελν εγγξαθήο ηνπο ζην ηκήκα. Έηζη, βιέπνπκε ζην
παξαπάλσ παξάδεηγκα φηη θάθεινο γηα ηνλ ρξήζηε abliouka, βξίζθεηαη κέζα ζηνλ θάθειν x1112, πνπ
ζεκαίλεη φηη ν ζπγθεθξηκέλνο θνηηεηήο εγγξάθεθε ζην ηκήκα θαηά ην ρεηκεξηλφ εμάκελν 2011-12.
Αληίζηνηρα, ππάξρεη ν θάθεινο staff γηα ηνπο εξγαδφκελνπο, νη νπνίνη θαη απηνί νκαδνπνηνχληαη ζε
θαηεγνξίεο: it, ektaktoi θηι.
΢πλήζσο, φηαλ εγθαζηζηνχκε έλα ζχζηεκα Unix ή Linux, ηα home directories ησλ ρξεζηψλ,
δεκηνπξγνχληαη ακέζσο θάησ απφ ηνλ θάθειν/home. Παξάδεηγκα, εάλ ζηνλ ππνινγηζηή ηνπ ζπηηηνχ καο (κε
linux) δεκηνπξγήζνπκε ηνλ ρξήζηε asidirop, ζα δεκηνπξγεζεί ν θάθεινο/home/asidirop, εθηφο
βέβαηα θαη αλ ξπζκίζνπκε δηαθνξεηηθά. Αληίζηνηρα, νη λέεο εθδφζεηο ησλ MS-Windows (Windows 7 θαη 8),
δεκηνπξγνχλ ηα home directories ησλ ρξεζηψλ κέζα ζηνλ θάθειν C:\Users (΢ρήκα 3.1).

home bin tmp

students staff Test1.txt File2.txt

x1112 x1011 κ.τ.λ. ektaktoi It

aanesiad abacharo abliouka Κ.τ.λ. asidirop vassik Κ.τ.λ. dad klefturi κ.τ.λ.

Test1.txt File2.txt Test1.txt File2.txt Φάκελος

File2.txt
Home directory Home directory
του asidirop του vassik
΢ρήκα 3.3: Σππηθή ηεξαξρία ηνπ ΢πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνύ ΢πζηήκαηνο Unix.

55
Ζ δεκηνπξγία θαη ρξήζε ηεο κεζφδνπ κε ηα home directories ησλ ρξεζηψλ βνεζά ζηελ θαιχηεξε
αζθάιεηα ηνπ ζπζηήκαηνο. ΢πλήζσο, ν θάζε ρξήζηεο έρεη πιήξε δηθαηψκαηα ζηνλ πξνζσπηθφ θάθειν αιιά
θαλέλα δηθαίσκα έμσ απφ απηφλ. Γειαδή έλαο ρξήζηεο κπνξεί ζηνλ πξνζσπηθφ ηνπ θάθειν λα δεκηνπξγεί
αξρεία, θαηαιφγνπο θαη λα ηα δηαγξάθεη. Έμσ απφ ηνλ πξνζσπηθφ ηνπ θάθειν δελ έρεη ην δηθαίσκα λα
δεκηνπξγήζεη αξρεία ή θαηαιφγνπο θαη ζπλήζσο δελ έρεη ην δηθαίσκα λα 'δεη' ή λα ρξεζηκνπνηήζεη ηα αξρεία
ησλ ππνινίπσλ ρξεζηψλ. Πεξηζζφηεξα γηα ηα δηθαηψκαηα ζην ζχζηεκα αξρείσλ ζα δνχκε ζην Κεθάιαην 5.

3.2 Πεξηνξηζκνί - θαλόλεο γηα έλα ΢ύζηεκα Αξρείσλ


Γηα θάζε ζχζηεκα αξρείσλ ππάξρνπλ δηάθνξνη θαλφλεο ζε ζρέζε κε ηελ νλνκαηνινγία ησλ αξρείσλ θαη
θαθέισλ. Γηα ηα πεξηζζφηεξα ζπζηήκαηα αξρείσλ πνπ ππάξρνπλ ζην Unix ηζρχνπλ νη εμήο πεξηνξηζκνί:
 Σν φλνκα ελφο αξρείνπ κπνξεί λα είλαη νπνηαδήπνηε ζεηξά απφ ραξαθηήξεο.
 Γελ επηηξέπεηαη κέζα ζε φλνκα αξρείνπ (ή θαηαιφγνπ) λα ππάξρεη ν ραξαθηήξαο "/". ΢ηελ επφκελε
παξάγξαθν ζα δνχκε ηνλ ιφγν γηα ηνλ νπνίν ν ραξαθηήξαο "/" είλαη εηδηθφο.
 Οη θεθαιαίνη απφ ηνπο πεδνχο ραξαθηήξεο είλαη δηαθνξεηηθνί. Μέζα ζε έλαλ θάθειν κπνξνχκε λα
έρνπκε έλα αξρείν κε ην φλνκα Test1.txt θαη αθφκε έλα αξρείν κε ην φλνκα test1.txt. Σα
πξνεγνχκελα είλαη δηαθνξεηηθά νλφκαηα (θάηη πνπ δελ ηζρχεη ζηα Windows).
 Μέζα ζε έλα θάθειν/θαηάινγν κπνξνχκε λα έρνπκε πνιιά αξρεία θαη πνιινχο θαηαιφγνπο.
 Μέζα ζε έλαλ θαηάινγν δελ κπνξνχκε λα έρνπκε δπν αξρεία κε ην ίδην αθξηβψο φλνκα. Οχηε αξρείν θαη
θαηάινγν κε ην ίδην φλνκα. Παξάδεηγκα, ζηνλ θαηάινγν asidirop (΢ρήκα 3.3) δελ επηηξέπεηαη λα
ππάξρεη θαη έλαο ππνθαηάινγνο κε ην φλνκαTest1.txt, δηφηη ήδε ππάξρεη έλα αξρείν κε απηφ ην
φλνκα. ΢εκείσζε εδψ φηη ε θαηάιεμε (.txt) δελ δεκηνπξγεί πξφβιεκα.

Αλάινγα κε ηνλ Σχπν ΢πζηήκαηνο Αξρείσλ πνπ ρξεζηκνπνηείηαη κπνξεί λα ππάξρνπλ θαη άιινη
πεξηνξηζκνί. ΢ηνλ ηχπν ζπζηήκαηνο αξρείσλ πνπ ρξεζηκνπνηείηαη απφ ηα Windows (NTFS file system)
ηζρχνπλ νη εμήο πεξηνξηζκνί:

1. Σν φλνκα ελφο αξρείνπ κπνξεί λα είλαη νπνηαδήπνηε ζεηξά απφ ραξαθηήξεο. Γελ επηηξέπεηαη κέζα ζε
φλνκα αξρείνπ (ή θαηαιφγνπ) λα ππάξρνπλ νη ραξαθηήξεο: \, /, :, *, ?, ", <, >, |.
2. Οη θεθαιαίνη κε ηνπο πεδνχο ραξαθηήξεο είλαη ηζνδχλακνη.

Οη πξνεγνύκελνη πεξηνξηζκνί ηζρύνπλ γηα ηνλ θάζε ηύπν ζπζηήκαηνο αξρείσλ. Αλ ζε έλαλ
ππνινγηζηή κε Linux, έρνπκε πξόζβαζε ζηνλ ηόκν ησλ windows πνπ είλαη δηακνξθσκέλνο ζε
NTFS, ηόηε αλ θαη ε πξόζβαζε γίλεηαη κέζα από Linux, ηζρύνπλ νη πεξηνξηζκνί ηνπ ζπζηήκαηνο
NTFS.

Ση ζπκβαίλεη κε ηνπο ειιεληθνχο ραξαθηήξεο; Δπηηξέπνληαη;

3.3 Γηαδξνκέο

3.3.1 Απόιπηεο Γηαδξνκέο

΢ην ππνηηζέκελν ζχζηεκα αξρείσλ ηνπ ζρήκαηνο 3.4, πψο ζα κπνξνχζακε λα αλαθεξζνχκε ζην αξρείν
Test1.txt (1) θαη ζην αξρείν Test1.txt (2); Αλ ρξεζηκνπνηνχκε κηα γξαθηθή εθαξκνγή ρεηξηζκνχ αξρείσλ (πρ.
Windows Explorer ζηα Windows, nautilus θαη dolphin ζην Linux), είλαη εχθνιν, δηφηη εληνπίδνπκε ζηνλ
πεξηεγεηή ην αξρείν πνπ επηζπκνχκε θαη θάλνληαο θιηθ επηιέγνπκε ηελ ελέξγεηα πνπ ζέινπκε λα θάλνπκε.
Πψο, φκσο, κπνξνχκε λα αλαθεξζνχκε ζηα δπν παξαπάλσ αξρεία κέζα απφ ηε γξακκή εληνιψλ;

56
Σν ίδην πξόβιεκα ππάξρεη θαη ζην Λεηηνπξγηθό ησλ Windows, όηαλ πξέπεη λα εξγαζηνύκε κέζα από
ηε γξακκή εληνιώλ. Σα παξαθάησ πνπ ζα αλαθεξζνύλ, ηζρύνπλ κε ηνλ ίδην ηξόπν θαη γηα ηα
Windows.

Γηα ηελ αληηκεηψπηζε ηνπ παξαπάλσ πξνβιήκαηνο ρξεζηκνπνηνχληαη νη Γηαδξνκέο (paths).


Μηα Γηαδξνκή είλαη ην κνλνπάηη πνπ αθνινπζνχκε απφ ηε ξίδα ηνπ δέληξνπ ("/") κέρξη ην αξρείν ή ην
θάθειν πνπ καο ελδηαθέξεη. Κάζε ηκήκα ηνπ κνλνπαηηνχ απνηειείηαη απφ ην φλνκα ηνπ θφκβνπ ζηνλ νπνίν
θαηεπζπλφκαζηε. Έηζη, φπσο αλαπαξίζηαηαη ην δέληξν ζην ΢ρήκα 3.4, κε κηα δηαδξνκή κπνξνχκε λα
κεηαθηλεζνχκε κφλν απφ πάλσ πξνο ηα θάησ (αξγφηεξα ζα δνχκε θαη ηνλ έκκεζν ηξφπν γηα κεηαθίλεζε πξνο
ηα επάλσ). Σα ηκήκαηα κηαο Γηαδξνκήο ρσξίδνληαη κεηαμχ ηνπο κε ηνλ ραξαθηήξα "/". Έηζη, ε Γηαδξνκή
πξνο ην αξρείν (1) είλαη ε: /home/staff/ektaktoi/asidirop/Test1.txt, ελψ γηα ην αξρείν (2)
είλαη ε: /tmp/Test1.txt. Ο πξψηνο ραξαθηήξαο "/" ζπκβνιίδεη ηε ξίδα ηνπ δέληξνπ.

home bin tmp


(2)

students staff Test1.txt File2.txt

x1112 x1011 κ.τ.λ. ektaktoi It

aanesiad abacharo abliouka Κ.τ.λ. asidirop vassik Κ.τ.λ. dad klefturi κ.τ.λ.

Test1.txt File2.txt Test1.txt File2.txt Φάκελος

(1) File2.txt

΢ρήκα 3.4: Σππηθή ηεξαξρία ηνπ ΢πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνύ ΢πζηήκαηνο Unix.

Αληίζηνηρα ζε έλα ζχζηεκα κε Windows νη Γηαδξνκέο δηαηππψλνληαη σο: C:\TMP\Test1.txt.


Δδψ δελ ππάξρεη ν ζπκβνιηζκφο γηα ηε ξίδα ηνπ δέληξνπ, ππάξρεη φκσο ε ζήκαλζε "C:". ΢ηα Λεηηνπξγηθά
ησλ Windows θαη ηνπ DOS, σο δηαρσξηζηήο ησλ ηκεκάησλ ηεο Γηαδξνκήο ρξεζηκνπνηείηαη ν
ραξαθηήξαο "\" (back-slash) θαη φρη ν ραξαθηήξαο "/" (slash). Απηή ε δηαθνξνπνίεζε δεκηνπξγνχζε πάληα
ζχγρπζε θαη ζηνπο ρξήζηεο, αιιά θαη ζηα πξνγξάκκαηα πνπ ιεηηνπξγνχλ θαη ζηα δπν Λεηηνπξγηθά
΢πζηήκαηα. Οη λεφηεξεο εθδφζεηο φκσο ησλ Windows αλαγλσξίδνπλ σο δηαρσξηζηή ηκεκάησλ κηαο
Γηαδξνκήο θαη ηνλ ραξαθηήξα "/".

57
 Μέζα ζε κηα Γηαδξνκή ηα «κνλνπάηηα» ή νη «θόκβνη» πνπ αθνινπζνύκε δηαρσξίδνληαη κε ηνλ
ραξαθηήξα / (slash).

 Αλ κηα δηαδξνκή μεθηλάεη κε ηνλ ραξαθηήξα /, ηόηε μεθηλάεη από ηε ξίδα ηνπ δέληξνπ (root
directory).

 Μηα δηαδξνκή πνπ μεθηλάεη από ηελ ξίδα ηνπ δέληξνπ νλνκάδεηαη Απόιπηε Γηαδξνκή (Absolute
Path).

3.3.2 ΢ρεηηθέο Γηαδξνκέο

Δίλαη φκσο δχζθνιν, θάζε θνξά πνπ ζέινπκε λα αλαθεξζνχκε ζην αξρείν (1), λα γξάθνπκε νιφθιεξε ηε
δηαδξνκή:/home/staff/ektaktoi/asidirop/Test1.txt. Φαληαζηείηε ην αξρείν, ζην νπνίν
ζέινπκε λα αλαθεξζνχκε, λα βξίζθεηαη 20 επίπεδα καθξηά απφ ηε ξίδα. Σφηε ε Απφιπηε Γηαδξνκή ζα ήηαλ
πνιχ κεγάιε θαη αζχκθνξν λα ρξεζηκνπνηεζεί. Γηα ζπληνκία, κπνξνχκε λα ρξεζηκνπνηήζνπκε ΢ρεηηθή
Γηαδξνκή (Relative path), γηα λα αλαθεξζνχκε ζε έλα αξρείν. Μηα ζρεηηθή δηαδξνκή μεθηλάεη απφ ηε ζέζε
ζηελ ηεξαξρία πνπ νλνκάδεηαη Σξέρσλ Καηάινγνο Δξγαζίαο (Current Working Directory) θαη ε
ζπληνκνγξαθία ηνπ είλαη cwd. Όηαλ γξάθνπκε κφλν ην φλνκα ελφο αξρείνπ (ρσξίο Γηαδξνκή απφ κπξνζηά),
ηφηε ελλνείηαη πσο ην αξρείν βξίζθεηαη ζηνλ Σξέρνληα Καηάινγν Δξγαζίαο. ΢ην ΢ρήκα 3.4, αλ έρνπκε
Σξέρνληα Καηάινγν Δξγαζίαο ηνλ θαηάινγν asidirop, γξάθνληαο Test1.txt ελλνείηαη ην αξρείν
λνχκεξν (1).

 Κάζε δηεξγαζία (άξα θαη θάζε θέιπθνο) πνπ εθηειείηαη έρεη αλά πάζα ζηηγκή έλαλ Σξέρνληα
Καηάινγν Δξγαζίαο (cwd).

 Όηαλ έλαο ρξήζηεο θάλεη είζνδν ζην ζύζηεκα (login) θαη εθηειείηαη έλα θέιπθνο, ηόηε νξίδεηαη
αξρηθά σο cwd ην home directory ηνπ ρξήζηε.

Όηαλ ν ρξήζηεο asidirop (΢ρήκα 3.5) θάλεη είζνδν ζην ζχζηεκα, ηφηε απηφκαηα ην θέιπθνο ην
νπνίν μεθηλά λα εθηειείηαη έρεη σο Σξέρνληα Καηάινγν Δξγαζίαο ηνλ θάθειν κε αξηζκφ (4), δειαδή
ηνλ: /home/staff/ektaktoi/asidirop. Αληίζηνηρα, φηαλ ζα θάλεη είζνδν ν ρξήζηεο abliouka, ζα
νξηζηεί αξρηθά ζην θέιπθνο πνπ ζα εθηειεζηεί ν θάθεινο /home/students/x1112/abliouka σο
ηξέρσλ θάθεινο εξγαζίαο.

58
/
(3)

home bin tmp


(2)

students staff Test1.txt File2.txt

x1112 x1011 κ.τ.λ. ektaktoi It


(4)

aanesiad abacharo abliouka Κ.τ.λ. asidirop vassik Κ.τ.λ. dad klefturi κ.τ.λ.

Test1.txt File2.txt Test1.txt File2.txt Φάκελος

(1) File2.txt

΢ρήκα 3.5: Σππηθή ηεξαξρία ηνπ ΢πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνύ ΢πζηήκαηνο Unix.

Χζηφζν, κε ΢ρεηηθή Γηαδξνκή κπνξνχκε λα νδεγεζνχκε θαη ζε αξρεία ή θαηαιφγνπο πνπ βξίζθνληαη
θαη εθηφο ηνπ home directory καο. Ο ρξήζηεο κπνξεί λα αιιάμεη Σξέρνληα Καηάινγν Δξγαζίαο
ρξεζηκνπνηψληαο ηελ εληνιή cd. Ζ εληνιή cd δέρεηαη σο φξηζκα κηα Γηαδξνκή πξνο έλαλ θαηάινγν
(Απφιπηε ή ΢ρεηηθή) θαη νξίδεη ηνλ λέν θαηάινγν σο ηξέρνληα. Πρ:

cd /tmp

΢ηελ παξαπάλσ πεξίπησζε, ην φξηζκα ζηελ εληνιή cd είλαη Απφιπηε Γηαδξνκή θαη νδεγεί ζηνλ
θαηάινγν κε ηελ ζήκαλζε (3) ηνπ ΢ρήκαηνο 3.5. ΢πλεπψο, αλ κεηά αθξηβψο απφ ηελ είζνδν ηνπ ζην ζχζηεκα
ν ρξήζηεο asidirop δψζεη ηελ παξαθάησ αθνινπζία εληνιψλ:

cat Test1.txt
cd /tmp
cat Test1.txt

ηφηε ε πξψηε εληνιή ζα έρεη σο απνηέιεζκα ηελ εκθάληζε ηνπ αξρείνπ (1), ελψ ε ηξίηε ζα εκθαλίζεη ην
αξρείν (2).

59
/

(3)
home bin tmp

(5)
students Test1.txt File2.txt

(2)
x1112 x1011 κ.τ.λ.

aanesiad abacharo abliouka Κ.τ.λ.


(4)

Test1.txt File2.txt

(1)

΢ρήκα 3.6: Σππηθή ηεξαξρία ηνπ ΢πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνύ ΢πζηήκαηνο Unix.

Αληίζηνηρα ζην ΢ρήκα 3.6 έζησ φηη θάλεη είζνδν ν ρξήζηεο "abliouka". Σν home directory ηνπ
ρξήζηε απηνχ είλαη ην/home/students/x1112/abliouka θαη είλαη ζεκεησκέλν κε ηνλ αξηζκφ (4). Σν
θέιπθνο πνπ ζα δεκηνπξγεζεί ακέζσο κεηά ηε δηαδηθαζία εηζφδνπ ζα έρεη σο Σξέρνληα Καηάινγν Δξγαζίαο
ηνλ (4). ΢πλεπψο, ε πξψηε εληνιή απφ ηελ πξνεγνχκελε αθνινπζία εληνιψλ ζα εκθαλίζεη ηα πεξηερφκελα
ηνπ αξρείνπ (1), δειαδή απηνχ κε απφιπηε δηαδξνκή
ηελ: /home/students/x1112/abliouka/Test1.txt. Ζ ηξίηε εληνιή ζα έρεη σο απνηέιεζκα ηελ
εκθάληζε ηνπ αξρείνπ /tmp/Test1.txt κε ηνλ αξηζκφ (2).
Έζησ φηη απφ ηνλ ρξήζηε abliouka δίλνληαη νη παξαθάησ εληνιέο:

cat /home/students/x1112/abliouka/Test1.txt # Δληνιή 1


cd /home/students # Δληνιή 2
cat x1112/abliouka/Test1.txt # Δληνιή 3

 Ζ εληνιή 1 ζα εκθαλίζεη ην αξρείν (1). ΢ηελ εληνιή 1 έρνπκε δψζεη ηελ Απφιπηε Γηαδξνκή ηνπ αξρείνπ.
 Ζ εληνιή 2 ζα ζέζεη σο Σξέρνληα Καηάινγν Δξγαζίαο ηνλ θάθειν (5).
 Ζ εληνιή 3 ζα εκθαλίζεη ην αξρείν (1). ΢ηελ εληνιή 3 έρνπκε δψζεη ΢ρεηηθή Γηαδξνκή. Δίλαη ε Γηαδξνκή
πνπ μεθηλά απφ ηνλ Σξέρνληα Καηάινγν Δξγαζίαο πξνο ηνλ πξννξηζκφ καο.

Απφ κηα ΢ρεηηθή Γηαδξνκή κπνξνχκε λα βξνχκε ηελ Απφιπηε, αλ ζηε ζπκβνινζεηξά πνπ εθθξάδεη
ηνλ Σξέρνληα Καηάινγν Δξγαζίαο (δειαδή ηελ Απφιπηε Γηαδξνκή πξνο ηνλ Σξέρνληα Καηάινγν Δξγαζίαο)
ελψζνπκε ηε ζπκβνινζεηξά ηεο ΢ρεηηθήο Γηαδξνκήο (΢ρήκα 3.7).

60
Απόιπηε Δηαδξνκή

/home/students / x1112/abliouka/Test1.txt

cwd δηαρωξηζηήο Σρεηηθή Δηαδξνκή


΢ρήκα 3.7: Καηαζθεπή Απόιπηεο Γηαδξνκήο από ηε ΢ρεηηθή.

 Καηά ηε ρξήζε ηνπ θειύθνπο επηιέγνπκε αλ ζα ρξεζηκνπνηήζνπκε Απόιπηε ή ΢ρεηηθή


Γηαδξνκή κε βάζε ην πνηα είλαη ζπληνκόηεξε ζηελ πιεθηξνιόγεζε.

 Όηαλ εηζάγνπκε Γηαδξνκέο ζε αξρεία ξπζκίζεσλ εθαξκνγώλ, ηόηε ζπλήζσο απαηηείηαη λα


ρξεζηκνπνηεζεί Απόιπηε Γηαδξνκή. ΢ε κεξηθέο πεξηπηώζεηο απαηηείηαη ε ρξήζε ΢ρεηηθήο
Γηαδξνκήο κε αθεηεξία ηνλ θάθειν εγθαηάζηαζεο ηεο εθαξκνγήο.

Αλ δε δψζνπκε νξίζκαηα ζηελ εληνιή cd, ηφηε απηή ζεσξεί ην home directory ηνπ ηξέρνληα ρξήζηε.
΢πλεπψο, νξίδεη σο Σξέρνληα Φάθειν Δξγαζίαο ην home directory. ΢ην παξάδεηγκα παξαπάλσ (΢ρήκα 3.6),
αλ ν ρξήζηεο "abliouka" δψζεη ηελ εληνιή:

cd

ηφηε ζα νξηζηεί σο Σξέρσλ Καηάινγνο Δξγαζίαο ν θάθεινο (4).

3.4 Μεηαθίλεζε πξνο ηα επάλσ κε ΢ρεηηθή Γηαδξνκή


Δίδακε ζηελ πξνεγνχκελε παξάγξαθν πψο αλαθεξφκαζηε ζε αξρεία πνπ βξίζθνληαη ζην ηκήκα ηνπ δέληξνπ
θάησ απφ ηνλ ηξέρνληα θάθειν. Πψο, φκσο, κπνξνχκε λα αλαθεξζνχκε ζε θάπνην αξρείν πνπ βξίζθεηαη πην
ςειά ζηελ ηεξαξρία απφ ηνλ ηξέρνληα θάθειν ρξεζηκνπνηψληαο ΢ρεηηθή Γηαδξνκή; Αθφκε, πψο κπνξνχκε λα
αλαθεξζνχκε ζε αξρεία ηα νπνία κπνξεί λα κελ είλαη ςειφηεξα ζηελ ηεξαξρία, αιιά ην κνλνπάηη πνπ πξέπεη
λα αθνινπζήζνπκε πεξηιακβάλεη θαη ηκήκαηα κεηαθίλεζεο πξνο ηα επάλσ; Γηα παξάδεηγκα ζην ΢ρήκα 3.8,
έρνληαο σο Σξέρνληα Καηάινγν Δξγαζίαο ηνλ θαηάινγν abliouka (2), ε Γηαδξνκή πνπ ζα πξέπεη λα
δηαηππψζνπκε θαίλεηαη κε ηα θαθέ βέιε ζην ζρήκα.

61
/

home bin tmp

students Test1.txt File2.txt

(4) x1112 x1011 κ.τ.λ.

aanesiad abacharo (2) abliouka Κ.τ.λ.

(1) file1 file2 Test1.txt File2.txt x1112 (3)

΢ρήκα 3.8: Γηαδξνκή πξνο ηα επάλσ.

Θα έιεγε θάπνηνο φηη, εθφζνλ ε Γηαδξνκή εκπεξηέρεη ηα ηκήκαηα κε


φλνκα: x1112, abacharo, file1, ε ΢ρεηηθή Γηαδξνκή ζα είλαη: x1112/abacharo/file1. Όκσο ην
παξαπάλσ ΓΔΝ είλαη ζσζηφ. Γελ είλαη ζσζηφ, δηφηη μεθηλψληαο απφ ηνλ θάθειν abliouka (2),
ρξεζηκνπνηψληαο ην φλνκα x1112, ελλνείηαη ν θάθεινο x1112 πνπ βξίζθεηαη κέζα ζηνλ
θάθειν abliouka, δειαδή ν (3).

 Μέζα ζ’ έλα θάθειν είλαη έγθπξα κόλν ηα νλόκαηα αξρείσλ θαη θαθέισλ πνπ βξίζθνληαη κέζα
ζην θάθειν. ΢ηνλ θάζε θόκβν ηνπ δέληξνπ είλαη γλσζηά κόλν ηα «παηδηά» ηνπ. Όρη, όκσο, ηα
νλόκαηα θαθέισλ πνπ είλαη «πξόγνλνί» ηνπ.

΢πλεπψο, ε δηαδξνκή x1112/abacharo/file1 είλαη εζθαικέλε, αλ Σξέρσλ Φάθεινο


Δξγαζίαο είλαη ην (2).

΢ηνλ Σύπν ΢πζηήκαηνο Αξρείσλ ηνπ UNIX, κέζα ζε θάζε θάθειν, από ηε δεκηνπξγία ηνπ,
δεκηνπξγνύληαη απηόκαηα θαη δπν ππνθάθεινη. Απηνύο κπνξνύκε λα ηνπο ραξαθηεξίζνπκε θαη
εηθνληθνύο:

 Ο ππνθάθεινο κε ην όλνκα ".", ν νπνίνο «δείρλεη» πξνο ηνλ ίδην ηνλ θάθειν.

 Ο ππνθάθεινο κε ην όλνκα "..", ν νπνίνο «δείρλεη» πξνο ηνλ γνληθό θάθειν.

Έηζη, κέζα ζηνλ θάθειν abliouka (2), ππάξρεη ν ππνθάθεινο κε ην φλνκα ".." (΢ρήκα 3.9). Δάλ
αθνινπζήζνπκε ην κνλνπάηη "..", νδεγνχκαζηε ζηνλ θάθειν (4). ΢πλεπψο, ε ΢ρεηηθή Γηαδξνκή απφ ηνλ
θάθειν (2) πξνο ην αξρείν (1) είλαη ε:

62
../abacharo/file1

home bin tmp

students Test1.txt File2.txt

(4) x1112 x1011 κ.τ.λ.

aanesiad abacharo (2) abliouka Κ.τ.λ.

. .. file1 file2 . .. Test1.txt File2.txt x1112

(1) (3)

΢ρήκα 3.9: Οη ππνθαηάινγνη "." θαη "..".

΢ην ΢ρήκα 3.10, παξνπζηάδεηαη έλα κηθξφηεξν ηκήκα ηνπ ζπζηήκαηνο αξρείσλ, αιιά
αλαπαξηζηψληαη φινη νη θάθεινη "." θαη "..". Δδψ βιέπνπκε φηη ν θάθεινο /home/students πεξηέρεη
ηνλ ππνθάθειν "..", ν νπνίνο «δείρλεη» ζηνλ /home. Δπίζεο, ν θάθεινο /home/students πεξηέρεη ηνλ
ππνθάθειν ".", ν νπνίνο δείρλεη ζηνλ ίδην ηνλ θάθειν /home/students. Όινη νη θάθεινη πεξηέρνπλ
απηνχο ηνπο δπν ππνθαθέινπο, αθφκε θαη ν "/" (ην root directory - ξηδηθφο θάθεινο). Βέβαηα, ζηελ
πεξίπησζε ηνπ ξηδηθνχ θαθέινπ, είλαη πξνθαλέο φηη έηζη θη αιιηψο ν ππνθάθεινο "." δείρλεη ζηνλ ίδην ηνλ
ξηδηθφ θάθειν. Ο ππνθάθεινο ".." φκσο πνπ δείρλεη; Πξνθαλψο δελ κπνξεί λα δείρλεη θάπνπ πην πάλσ απφ
ηνλ ξηδηθφ θάθειν γηαηί εθεί είλαη ε αξρή ηνπ ζπζηήκαηνο αξρείσλ θαη δελ ππάξρεη θάηη πην επάλσ. ΢ε απηήλ
ηελ πεξίπησζε, ινηπφλ, ν ".." δεκηνπξγείηαη κε ηέηνηνλ ηξφπν, ψζηε λα δείρλεη ζηνλ ίδην ηνλ ξηδηθφ θάθειν.
/

. .. home bin tmp

. .. students . .. . .. Test1.txt File2.txt

. .. x1112 x1011

. .. . ..

΢ρήκα 3.10: Οη ππνθαηάινγνη "." θαη ".." αλαιπηηθά.

63
Οη θαηάινγνη "." θαη ".." κπνξνχλ λα ρξεζηκνπνηεζνχλ κέζα ζε κηα δηαδξνκή φπσο θάζε άιινο
θάθεινο. Έζησ ην ζχζηεκα αξρείσλ ηνπ ΢ρήκαηνο 3.10 θαη έζησ φηη Σξέρσλ Φάθεινο Δξγαζίαο είλαη
ν /home/students/x1112. ΢ηνλ Πίλαθα 3.1 θαίλνληαη θάπνηεο ΢ρεηηθέο Γηαδξνκέο θαη νη ηζνδχλακεο
Απφιπηεο, δεδνκέλνπ ηνπ Σξέρνληνο Φαθέινπ Δξγαζίαο.

Πίλαθαο 3.1: Παξαδείγκαηα ΢ρεηηθώλ θαη Απόιπησλ Γηαδξνκώλ.

A/A ΢ρεηηθή Γηαδξνκή Απόιπηε Γηαδξνκή


1 . /home/students/x1112
2 .. /home/students
3 ../.. /home
4 ../../.. /
5 ../x1011 /home/students/x1011
6 ../../../tmp/Test1.txt /tmp/Test1.txt

Πνιιέο θνξέο ρξεζηκνπνηείηαη ην "." γηα λα δειψζεη ηνλ ηξέρνληα θάθειν, ρσξίο λα είλαη
ππνρξεσηηθή ε ρξήζε ηνπ. Έηζη, κπνξνχλ λα δεκηνπξγεζνχλ πνιιέο ηζνδχλακεο παξαιιαγέο ηεο ίδηαο
δηαδξνκήο:

Πίλαθαο 3.2: Παξαδείγκαηα ηζνδύλακσλ ΢ρεηηθώλ θαη Απόιπησλ Γηαδξνκώλ.

A/A Απόιπηε Γηαδξνκή Ιζνδύλακεο ΢ρεηηθέο Γηαδξνκέο


1 /home/students/x1112 . ./ ./. ././.
2 /home/students .. ../. ./.. ./../

Μεξηθέο θνξέο βέβαηα κπνξεί λα είλαη ππνρξεσηηθή ε ρξήζε ηνπ "." (ζα ην κειεηήζνπκε
ζην Κεθάιαην 8).

 Πνιιέο θνξέο, όηαλ ζπληάζζεηαη κηα Γηαδξνκή πξνο Καηάινγν, ρξεζηκνπνηείηαη ν


ραξαθηήξαο "/" ζην ηέινο ηεο δηαδξνκήο. Παξάδεηγκα /tmp/ αληί ηνπ /tmp . Απηό
δηεπθνιύλεη ηνπο ρξήζηεο ώζηε λα αληηιεθζνύλ άκεζα όηη ε δηαδξνκή είλαη πξνο θάθειν θαη
όρη πξνο αξρείν. Από ηελ άιιε είλαη έηνηκε ε ζπκβνινζεηξά λα ζπλελσζεί κε έλα όλνκα
αξρείνπ, όηαλ ηελ ρξεζηκνπνηνύκε κέζα από πξόγξακκα.

64
1
/
2 3 4
home bin tmp
5 6 7
students Test1.txt File2.txt

8 9
x1112 x1011

΢ρήκα 3.11: Παξάδεηγκα ηεξαξρίαο θαηαιόγσλ.

΢ην ΢ρήκα 3.11 θαίλεηαη ε ίδηα ηεξαξρία κε ην πξνεγνχκελν ζρήκα, ρσξίο ηελ πνιππινθφηεηα πνπ
πξνζζέηεη ε αλαπαξάζηαζε ησλ θαθέισλ"." θαη "..". ΢ηνλ Πίλαθα 3.3 παξνπζηάδνπκε κεξηθέο Απφιπηεο θαη
΢ρεηηθέο Γηαδξνκέο, ζπκπεξηιακβαλνκέλσλ θαη ζπρλψλ ιαζψλ:

Πίλαθαο 3.3: Παξαδείγκαηα ΢ρεηηθώλ θαη Απόιπησλ Γηαδξνκώλ.

Σξέρσλ Καηάινγνο
A/A Γηαδξνκή ΢ρόιηα
Δξγαζίαο
Δίλαη ε Γηαδξνκή πξνο ηνλ
1 /home/students/x1112 νπνηνζδήπνηε θάθειν (8) αλεμάξηεηα απφ
ηνλ Σξέρνληα (cwd)
Δίλαη ε Γηαδξνκή πξνο ηνλ
2 /home/students νπνηνζδήπνηε θάθειν (5) αλεμάξηεηα απφ
ηνλ Σξέρνληα (cwd)
Δίλαη ε Γηαδξνκή πξνο ηνλ
θάθειν (5) αλεμάξηεηα απφ
3 /home/students/ νπνηνζδήπνηε
ηνλ Σξέρνληα (cwd) κε
θαηάιεμε "/".
Δίλαη ε Γηαδξνκή πξνο ηνλ
θάθειν (9) αλεμάξηεηα απφ
ηνλ Σξέρνληα (cwd). Γελ είλαη
4 /home/students/x1112/../x1011 νπνηνζδήπνηε
ε βέιηηζηε δηαδξνκή δηφηη
πεξηέρεη "παξάθακςε", είλαη
φκσο ζσζηή.
Δίλαη ε Γηαδξνκή πξνο ηνλ
θάθειν (2) αλεμάξηεηα απφ
ηνλ Σξέρνληα (cwd). Γελ είλαη
5 /tmp/../home νπνηνζδήπνηε
ε βέιηηζηε Γηαδξνκή, δηφηη
πεξηέρεη "παξάθακςε", είλαη
φκσο ζσζηή.

65
ΛΑΘΟ΢. Αλ ην
ζηνηρείν Test1.txt δελ ήηαλ
αξρείν αιιά θάθεινο, ε
δηαδξνκή ζα ήηαλ ζσζηή. Δίλαη
6 /tmp/Test1.txt/../../home νπνηνζδήπνηε
φκσο αξρείν, θαη έλα αξρείν
δελ κπνξεί λα είλαη ηκήκα κηαο
δηαδξνκήο. Μπνξεί λα είλαη
κφλν πξννξηζκφο.
Δίλαη ε Γηαδξνκή πξνο ηνλ
θάθειν (9) ζρεηηθή κε ηνλ
Σξέρνληα (cwd). Γελ είλαη ε
7 x1112/../x1011 /home/students
βέιηηζηε δηαδξνκή, δηφηη
πεξηέρεη «παξάθακςε», είλαη
φκσο ζσζηή.
ΛΑΘΟ΢. Ξεθηλψληαο απφ ην
θάθειν (5), δελ ππάξρεη κέζα
8 students/x1011 /home/students ζε απηφλ θάθεινο κε ην
φλνκαstudents. Άξα, ε
Γηαδξνκή είλαη ιάζνο.
Δίλαη ε Γηαδξνκή πξνο ηνλ
θάθειν (9) ζρεηηθή κε ηνλ
9 ./x1011 /home/students
Σξέρνληα (cwd). Τπάξρεη ν
πιενλαζκφο ρξήζεο ηνπ "./".
ΛΑΘΟ΢. Ξεθηλψληαο απφ ην
θάθειν (5), δελ ππάξρεη κέζα
ζε απηφλ θάθεινο κε ην
10 home /home/students φλνκαhome. Άξα, ε Γηαδξνκή
είλαη ιάζνο. Ζ αλαθνξά πξνο
ηνλ θάθειν (2) πξέπεη λα γίλεη
κε ηε ρξήζε ηνπ "..".
ΛΑΘΟ΢. Ξεθηλψληαο απφ ην
θάθειν (5), δελ ππάξρεη κέζα
11 tmp/Test1.txt /home/students ζε απηφλ θάθεινο κε ην
φλνκαtmp. Άξα, ε Γηαδξνκή
είλαη ιάζνο.
Δίλαη ε Γηαδξνκή πξνο ην
αξρείν (6). Δίλαη Απφιπηε
12 /tmp/Test1.txt /home/students
Γηαδξνκή θαη άξα αλεμάξηεηε
απφ ηνλ cwd.
Δίλαη ε Γηαδξνκή πξνο ην
αξρείν (6). Δίλαη Απφιπηε
Γηαδξνκή. Τπάξρεη ν
πιενλαζκφο ρξήζεο πνιιψλ "/"
σο δηαρσξηζηψλ. Απηφ δελ
13 /tmp///Test1.txt /home/students ελνριεί, θαη κάιηζηα είλαη
πηζαλφ λα πξνθχπηνπλ ηέηνηνπ
ηχπνπ Γηαδξνκέο, φηαλ
θαηαζθεπάδνληαη απφ
πξφγξακκα. Γελ ελνρινύλ ηα
πνιιαπιά "/".

66
Δίλαη ε Γηαδξνκή πξνο ην
αξρείν (6). Δίλαη ΢ρεηηθή
Γηαδξνκή μεθηλψληαο απφ ην
(4). Τπάξρεη ν πιενλαζκφο
ρξήζεο πνιιψλ "/"θαη πνιιψλ
αλαθνξψλ ζηνλ ηξέρνληα
θάθειν"./". Απηφ δελ ελνριεί,
14 ././///Test1.txt /tmp
θαη, φπσο ζηελ πξνεγνχκελε
πεξίπησζε είλαη πηζαλφ λα
πξνθχπηνπλ ηέηνηνπ ηχπνπ
δηαδξνκέο, φηαλ
θαηαζθεπάδνληαη απφ
πξφγξακκα. Γελ ελνρινύλ ηα
πνιιαπιά "./".

3.4.1 Ο θάθεινο HOME ησλ ρξεζηώλ

Γηα ην θέιπθνο o ραξαθηήξαο ~ (tilde ή θπκαηνεηδήο γξακκή ή πεξηζπσκέλε) έρεη εηδηθή ζεκαζία, φηαλ
εκθαλίδεηαη κφλνο ηνπ ή ζηελ αξρή κηαο ζπκβνινζεηξάο πνπ εθθξάδεη δηαδξνκή. ΢ηνλ Πίλαθα
3.4 εκθαλίδνληαη νη πηζαλέο πεξηπηψζεηο θαη ε αληίζηνηρε ζεκαζία ηνπο.

Πίλαθαο 3.4: Πεξηπηώζεηο ρξήζεο ηνπ Δηδηθνύ ραξαθηήξα κπαιαληέξ "~".

΢πκβνιηζκόο Δμήγεζε
Ο ραξαθηήξαο ~, ρσξίο λα αθνινπζείηαη απφ θάηη ζεκαίλεη ην home directory ηνπ
~
ηξέρνληνο ρξήζηε.
Ο ραξαθηήξαο ~, αθνινπζνχκελνο απφ ηελ "/", ζεκαίλεη ην home directory ηνπ
~/
ηξέρνληνο ρξήζηε.
Ο ραξαθηήξαο ~, αθνινπζνχκελνο απφ ηελ "/", ζεκαίλεη ην home directory ηνπ
ηξέρνληνο ρξήζηε. Μεηά αθνινπζεί ε ππφινηπε δηαδξνκή πξνο αξρεία ή θαηαιφγνπο.
~/file1.txt
Σν ζπγθεθξηκέλν παξάδεηγκα ζεκαίλεη ην αξρείνfile1.txt κέζα ζην home directory ηνπ
ηξέρνληνο ρξήζηε.
Ο ραξαθηήξαο ~, αθνινπζνχκελνο απφ νηηδήπνηε εθηφο απφ "/", ζεκαίλεη ην home
~antonis directory ηνπ ρξήζηε, ηνπ νπνίνπ ην username αθνινπζεί ην ~. Σν παξάδεηγκα ζεκαίλεη
ην home directory ηνπ ρξήζηε antonis.

Πην ζπγθεθξηκέλα, ζην ΢ρήκα 3.12 θαίλεηαη έλα παξάδεηγκα (ηκήκα) ελφο ζπζηήκαηνο αξρείσλ. Αλ
ζε απηφ ην ζχζηεκα ππάξρνπλ νη ρξήζηεο κε ηα νλφκαηα ρξεζηψλ asidirop, vassik θαη dimitris,
ην home directory ηνπ asidirop είλαη ην /home/asidirop (9), ηνhome directory ηνπ vassik είλαη
ην /home/others/vassik (10), ελψ ην home directory ηνπ dimitris είλαη
ην /var/usr/spare(11).

΢πλεζίδεηαη, όηαλ νξίδεηαη ην home directory ελόο θαηλνύξγηνπ ρξήζηε, λα νξίδεηαη όηη έρεη ίδην
όλνκα κε ην όλνκα ηνπ ρξήζηε (όπσο ζην παξάδεηγκα νη asidirop, vassik). Απηό, βέβαηα, δελ είλαη
απαξαίηεην.

67
 Σν home directory ελόο ρξήζηε κπνξεί λα έρεη νπνηνδήπνηε όλνκα θαη λα δεκηνπξγεζεί (από
ην δηαρεηξηζηή) ζε νπνηνδήπνηε ζεκείν ηνπ δίζθνπ.

Αλ ηξέρσλ ρξήζηεο είλαη ν asidirop, φιεο νη παξαθάησ Γηαδξνκέο είλαη ηζνδχλακεο θαη αλαθέξνληαη
ζηνλ (9):

~
~/
~asidirop
/home/asidirop

Αληίζηνηρα ηζνδχλακεο κεηαμχ ηνπο είλαη θαη νη παξαθάησ Γηαδξνκέο νη νπνίεο νδεγνχλ ζην αξρείν (2):

~/file2.txt
~asidirop/file2.txt
/home/asidirop/file2.txt

Αλ ηξέρσλ ρξήζηεο είλαη ν vassik, ηφηε ζηελ πξνεγνχκελε πεξίπησζε, κφλν νη δπν ηειεπηαίεο
δηαδξνκέο δείρλνπλ ζην αξρείν (2). Ζ πξψηε Γηαδξνκή ζα δείρλεη ζην αξρείν file2.txt πνπ βξίζθεηαη
κέζα ζην home directory ηνπ ηξέρνληνο ρξήζηε, δειαδή ηνπ vassik. Σν αξρείν απηφ είλαη ην (5).

home bin tmp var


9 7 8

asidirop others test1.txt file2.txt usr

1 2 10 11
test1.txt file2.txt dir_tmp vassik spare

3 4 5 6 12
file2.txt test1.txt file2.txt dir2 file1.txt

΢ρήκα 3.12: Παξάδεηγκα ηεξαξρίαο θαηαιόγσλ κε θαηαιόγνπο ρξεζηώλ.

΢ηελ πξαγκαηηθφηεηα ην θέιπθνο, φηαλ ζε κηα γξακκή εληνιήο δεη ηνλ ραξαθηήξα "~", πξηλ
εθηειέζεη ηελ εληνιή, εξκελεχεη ηνλ ραξαθηήξα απηφλ. Μπνξνχκε λα ρξεζηκνπνηήζνπκε ηελ
εληνιή echo [3], γηα λα επηβεβαηψζνπκε ην παξαπάλσ. Ζ εληνιή echo δέρεηαη σο φξηζκα κηα
ζπκβνινζεηξά θαη απιά ηελ ηππψλεη ζην ηεξκαηηθφ. Δίλαη θάηη αλάινγν ησλ εληνιψλ print ή write πνπ
ππάξρνπλ ζε δηάθνξεο γιψζζεο πξνγξακκαηηζκνχ.

68
asidirop@asidirop:~$ echo "Hello World"
Hello World
asidirop@asidirop:~$ echo /home/asidirop
/home/asidirop
asidirop@asidirop:~$ echo ~
/home/asidirop
asidirop@asidirop:~$ echo \~
~
asidirop@asidirop:~$ echo ~/file2.txt
/home/asidirop/file2.txt
asidirop@asidirop:~$

΢ην πξνεγνχκελν παξάδεηγκα ε πξψηε εληνιή echo, απιά ηππψλεη ην κήλπκα "Hello World".
΢ηε δεχηεξε εληνιή, έρνπκε δψζεη σο φξηζκα ην /home/asidirop θαη ε εληνιή πξνθαλψο απιά ην
ηππψλεη. ΢ηελ ηξίηε εληνιή, δψζακε σο φξηζκα ην "~"θαη βιέπνπκε ην ίδην απνηέιεζκα κε ηελ πξνεγνχκελε
εληνιή. Απηφ ζπκβαίλεη, δηφηη ην θέιπθνο, πξηλ εθηειέζεη ηελ εληνιή echo, εξκελεχεη ηνπο εηδηθνχο
ραξαθηήξεο πνπ ππάξρνπλ ζηε γξακκή εληνιήο. Σνλ ραξαθηήξα "~" ηνλ αληηθαζηζηά κε απηφ πνπ
αληηπξνζσπεχεη, δειαδή κε ην /home/asidirop. Όηαλ ην θέιπθνο εθηειέζεη ηελ εληνιή echo, ζα
πεξάζεη σο φξηζκα ην /home/asidirop θαη φρη ην "~".
Δάλ ζέιακε ε εληνιή echo λα ηππψζεη ηνλ ίδην ηνλ ραξαθηήξα "~", ηφηε ζα έπξεπε λα αθπξψζνπκε
ηελ εηδηθή ηνπ ζεκαζία. Ζ αθχξσζε ηεο εηδηθήο ζεκαζίαο γίλεηαη κε ηνλ ραξαθηήξα "\" (εληνιή ηέηαξηε).
Σέινο, ζηελ πέκπηε θαη ηειεπηαία εληνιή ηνπ παξαδείγκαηνο, ην θέιπθνο πάιη εξκελεχεη ηνλ
ραξαθηήξα "~" θαη ηνλ αληηθαζηζηά κε ην/home/asidirop. Έηζη, ε ζπκβνινζεηξά πνπ πξνθχπηεη είλαη
ε /home/asidirop/file2.txt θαη απηφ δίλεηαη σο φξηζκα ζηελ εληνιή echo.

3.5 Σύπνη αξρείσλ


Όπσο αλαθέξζεθε ζηελ Παξάγξαθν 1.3.7, ππάξρνπλ αξθεηνί ηχπνη αξρείσλ ζην ζχζηεκα UNIX. Απηνί
ζπλνςίδνληαη ζην ΢ρήκα 3.13. ΢ηελ παξνχζα θάζε ζα αζρνιεζνχκε κφλν κε ηηο δπν πξψηεο θαηεγνξίεο:
Καλνληθά Αξρεία θαη Φαθέινπο (Καηαιφγνπο).

• Καλνληθά Αξρεία (Regular Files)


Πξαγκαηηθά
• Φάθεινη (Directories)
Αξρεία
• Σπκβνιηθνί Σύλδεζκνη (Symbolic Links)

• Σπζθεπέο Μπιόθ (Block Devices)


Αξρεία
Σπζθεπώλ • Σπζθεπέο ραξαθηήξωλ (Character
Devices)

Αξρεία • Αξρεία Δηαζωιήλωζεο (Pipes)


Επηθνηλωλίαο • Αξρεία Socket

΢ρήκα 3.13: Σύπνη αξρείσλ ζε έλα ηππηθό ζύζηεκα UNIX.

3.5.1 Δληνιέο Γηαρείξηζεο Φαθέισλ

Οη βαζηθέο εληνιέο πνπ αθνξνχλ ηε δηαρείξηζε θαθέισλ είλαη νη:

69
 cd: change directory – αιιαγή θαηαιφγνπ εξγαζίαο [1],
 pwd: print working directory – εθηχπσζε θαηαιφγνπ εξγαζίαο[6],
 mkdir: make directory - δεκηνπξγία θαηαιφγνπ [4],
 rmdir: remove directory – δηαγξαθή θαηαιφγνπ [8].

Όιεο νη παξαπάλσ εληνιέο (εθηφο ηεο pwd) δέρνληαη σο νξίζκαηα Γηαδξνκέο Καηαιφγσλ (Απφιπηεο
ή ΢ρεηηθέο). Παξάδεηγκα:

cd /tmp
mkdir ./test

Θα νξηζηεί σο Σξέρσλ Φάθεινο Δξγαζίαο ν /tmp θαη έπεηηα ζα δεκηνπξγεζεί ν θάθεινο κε


φλνκα test κέζα ζηνλ Σξέρνληα Φάθειν (δειαδή ηνλ /tmp).

mkdir /tmp/test

Δλαιιαθηηθά ησλ δπν πξνεγνχκελσλ εληνιψλ, ζα κπνξνχζακε, ρσξίο λα έρνπκε αιιάμεη Σξέρνληα
Φάθειν Δξγαζίαο, λα δεκηνπξγήζνπκε απ’ επζείαο ηνλ /tmp/test, δειαδή ηνλ test κέζα ζην /tmp.
Οη εληνιέο mkdir θαη rmdir επηδέρνληαη νξίζκαηα πνπ αληηζηνηρνχλ ζε πεξηζζφηεξεο απφ κηα
Γηαδξνκέο Καηαιφγσλ (Τπνθεθάιαην 4.2).

3.5.2 Δληνιέο Γηαρείξηζεο Φαθέισλ θαη Αξρείσλ

Οη βαζηθέο εληνιέο πνπ ρξεζηκνπνηνχληαη γηα ηε δηαρείξηζε αξρείσλ αιιά θαη θαθέισλ είλαη νη:
 cp: copy – αληηγξαθή αξρείσλ ή θαθέισλ [2],
 mv: move – κεηαθίλεζε ή κεηνλνκαζία αξρείσλ ή θαθέισλ [5],
 rm: remove - δηαγξαθή αξρείσλ ή θαθέισλ [7],
 ls: list - εκθάληζε πεξηερνκέλσλ θαθέισλ ή πιεξνθνξηψλ γηα αξρεία [7].

΢ε φιεο ηηο παξαπάλσ εληνιέο δίλνληαη σο νξίζκαηα αξρεία ή θάθεινη. Απηά εθθξάδνληαη είηε κε
΢ρεηηθέο είηε κε Απφιπηεο Γηαδξνκέο.

cp a.txt b.txt

΢ηελ παξαπάλσ εληνιή δίλνπκε δπν νξίζκαηα. Σν πξψην εθθξάδεη ην αξρείν πεγή θαη ην δεχηεξν
εθθξάδεη ην αξρείν πξννξηζκνχ. Σν απνηέιεζκα ζα είλαη λα δεκηνπξγεζεί κέζα ζηνλ ηξέρνληα θάθειν ην
αξρείν κε φλνκα b.txt ην νπνίν ζα είλαη αληίγξαθν ηνπ a.txt.

cp /etc/passwd ./

΢ηελ παξαπάλσ εληνιή δίλνπκε δπν νξίζκαηα. Σν πξψην εθθξάδεη ην αξρείν πεγή θαη ην δεχηεξν
εθθξάδεη ην αξρείν πξννξηζκνχ. Σν απνηέιεζκα ζα είλαη λα δεκηνπξγεζεί κέζα ζηνλ ηξέρνληα θάθειν ην
αξρείν κε φλνκα b.txt ην νπνίν ζα είλαη αληίγξαθν ηνπ a.txt.

70
cp /etc/passwd ./test

΢ηελ παξαπάλσ εληνιή δίλνπκε δπν νξίζκαηα. Σν πξψην εθθξάδεη ην αξρείν πεγή ην νπνίν είλαη ην
αξρείν /etc/passwd φπσο θαη ζην πξνεγνχκελν παξάδεηγκα. Σν δεχηεξν φξηζκα είλαη ην ./test θαη
εθθξάδεη πξννξηζκφ. Γελ δηεπθξηλίδεηαη, φκσο, αλ ν πξννξηζκφο είλαη θάθεινο ή λέν φλνκα αξρείνπ.
΢πλεπψο, αλάινγα κε ηελ χπαξμε ή φρη θαη ηνλ ηχπν ηνπ ./test ππάξρνπλ νη εμήο πεξηπηψζεηο:
 Δάλ ζηνλ ηξέρνληα θάθειν δελ ππάξρεη ην test (νχηε αξρείν, νχηε θάθεινο κε απηφ ην φλνκα), ηφηε ζα
γίλεη αληηγξαθή ηνπ αξρείνπ /etc/passwd ζηνλ ηξέρνληα θάθειν. Σν αξρείν ζα νλνκαζηεί test.
 Δάλ ζηνλ ηξέρνλ θάθειν ππάξρεη έλαο θάθεινο κε ην φλνκα test, ηφηε ζα γίλεη αληηγξαθή ηνπ
αξρείνπ passwd απφ ηνλ θαηάινγν /etc ζηνλ θάθειν test. Σν αξρείν ζα νλνκαζηεί passwd.
 Δάλ ζηνλ ηξέρνληα θάθειν ππάξρεη αξρείν κε ην φλνκα test, ηφηε ζα γίλεη αληηγξαθή ηνπ
αξρείνπ /etc/passwd ζηνλ ηξέρνληα θάθειν. Σν αξρείν ζα νλνκαζηεί test θαη ζα γίλεη
αληηθαηάζηαζε (overwrite) ηνπ πξνεγνχκελνπ αξρείνπ test.

Mε ηελ εληνιή cp κπνξεί λα γίλεη αληηγξαθή ελφο αξρείνπ ζε έλα άιιν, αιιά θαη αληηγξαθή
πεξηζζνηέξσλ αξρείσλ ζε έλα θάθειν πξννξηζκφ (Τπνθεθάιαην 4.2).
Με ηελ option –r (recursive) κπνξεί λα αληηγξαθεί έλαο θάθεινο κε φια ηα πεξηερφκελά ηνπ κέζα ζε
έλαλ άιιν θάθειν/πξννξηζκφ (βιέπε Άζθεζε 4.6).
Όπσο αθξηβψο ιεηηνπξγεί ε εληνιή cp, ιεηηνπξγεί θαη ε εληνιή mv. Οη παξαθάησ εληνιέο κε ρξήζε
ηεο mv, ζα έρνπλ ην ίδην απνηέιεζκα κε ηηο πξνεγνχκελεο cp πνπ πεξηγξάθεθαλ, κφλν πνπ κεηά απφ
πεηπρεκέλε αληηγξαθή ηνπ αξρείνπ, ην αξρείν πεγή ζα δηαγξαθεί απφ ηελ αξρηθή ηνπ ηνπνζεζία.

mv /etc/passwd ./
mv /etc/passwd ./test

Ζ εληνιή mv ρξεζηκνπνηείηαη επίζεο θαη γηα κεηνλνκαζία αξρείσλ, φπσο:

mv a.txt b.txt

Θα γίλεη κεηνλνκαζία ηνπ αξρείνπ a.txt ζε b.txt.

rm /etc/passwd /tmp/x ./test

Ζ εληνιή rm, δέρεηαη θαη απηή σο νξίζκαηα νλφκαηα αξρείσλ (ή θαη θαθέισλ) θαη ηα δηαγξάθεη. Ζ
πξνεγνχκελε εληνιή ζα δηαγξάςεη ηα αξρεία: passwd απφ ηνλ θάθειν /etc, x απφ ηνλ
θάθειν /tmp θαη test απφ ηνλ ηξέρνληα θάθειν.
Δμ’ νξηζκνχ ε εληνιή rm, δελ δηαγξάθεη θαθέινπο, αιιά κε ηελ ζεκαία –r (recursive) κπνξεί λα
δηαγξάςεη θάθειν καδί κε φια ηα πεξηερφκελά ηνπ (βιέπε Άζθεζε 4.8).
Σέινο, ε εληνιή ls εκθαλίδεη ηα πεξηερφκελα ελφο θαθέινπ (θαη φρη κφλν).

71
Πίλαθαο 3.5: Παξαδείγκαηα ρξήζεο ηεο εληνιήο ls.

Δληνιή Δμήγεζε
εκθαλίδεη ηα πεξηερφκελα ηνπ θαηαιφγνπ
ls /tmp
/tmp.
εκθαλίδεη ηα πεξηερφκελα ηνπ θαηαιφγνπ
ls /etc ./test
/etc θαη ηνπ θαηαιφγνπ ./test.
εάλ δελ δνζεί φξηζκα φλνκα θαηαιφγνπ ή
ls αξρείνπ, ηφηε εκθαλίδεη ηα πεξηερφκελα
ηνπ ηξέρνληνο θαηαιφγνπ.
εκθαλίδεη ηα νλφκαηα ησλ αξρείσλ πνπ ηεο
δψζακε σο νξίζκαηα – έρεη λφεκα κφλν
ls /etc/passwd file1.txt file2.txt φηαλ ζπλδπάδεηαη κε ζεκαίεο ηεο ls θαη
ζπλήζσο ηελ "-l", ψζηε λα εκθαληζηνχλ
επηπιένλ πιεξνθνξίεο γηα ηα αξρεία.

΢πλήζεηο ζεκαίεο ηεο ls θαίλνληαη ζηνλ Πίλαθα 3.6:


Ζ πεξηζζφηεξν ζπρλή ζεκαία ζηελ εληνιή ls είλαη ε -l, ε νπνία δίλεη ηελ νδεγία ζηελ εληνιή λα
εκθαλίζεη πεξηζζφηεξεο πιεξνθνξίεο γηα θάζε αξρείν. ΢ην ΢ρήκα 3.14 παξνπζηάδνληαη νη ζηήιεο νη νπνίεο
εκθαλίδνληαη απφ ηε ζεκαία -l.

Πίλαθαο 3.6: ΢πλήζεηο ζεκαίεο ηεο ls.

΢εκαία Δμήγεζε
-a (all) εκθαλίδεη θαη ηα θξπθά αξρεία/θαηαιφγνπο.
-l (long listing format) εκθαλίδεη αλαιπηηθέο πιεξνθνξίεο γηα ηα αξρεία/θαηαιφγνπο.
-t (time) ηαμηλνκεί ην απνηέιεζκα κε βάζε ηελ ψξα ηξνπνπνίεζεο.
εάλ ην φξηζκα είλαη θαηάινγνο, ηφηε δελ εκθαλίδεη ηα πεξηερφκελα ηνπ θαηαιφγνπ ην νπνίν είλαη
-d
ε ζπλήζεο ζπκπεξηθνξά, αιιά εκθαλίδεη πιεξνθνξίεο γηα ηνλ ίδην ηνλ θαηάινγν.
(recursive) εκθαλίδεη θαη φινπο ηνπο ππνθαηαιφγνπο θαη ηα πεξηερφκελά ηνπο θαη ηα
-R πεξηερφκελα απηψλ θαη νπνησλδήπνηε θαηαιφγσλ θάησ απφ ηνλ ηξέρνληα (ή θάησ απφ ηνλ
θάθειν πνπ δφζεθε σο φξηζκα).

72
asidirop@asidirop:/tmp$ ls -l
total 84
-rw-r--r-- 1 asidirop asidirop 45539 Feb 28 19:32 a.xml
-rw------- 1 asidirop asidirop 0 Mar 5 10:06 bib2html513cd3
-rw-r--r-- 1 asidirop asidirop 148 Mar 5 10:06 bib2html513cd3.aux
-rw-r--r-- 1 asidirop asidirop 1118 Mar 5 10:06 bib2html513cd3.bbl
drwx------ 2 asidirop asidirop 4096 Jan 1 1970 orbit-asidirop

Τύπνο Σύλδεζκνη Ιδηνθηήηξηα Ώξα


Αξρείνπ Οκάδα Τξνπνπνίεζεο
Αξρείνπ
Άδεηεο Ιδηνθηήηεο Μέγεζνο Όλνκα
πξόζβαζεο Αξρείνπ Αξρείνπ αξρείνπ
΢ρήκα 3.14: Οη ζηήιεο ηεο ls -l.

3.5.3 Κξπθά αξρεία

΢ην UNIX ππάξρεη ε ζχκβαζε: αξρεία (ή θαηάινγνη) πνπ ην φλνκά ηνπο μεθηλάεη κε ην ραξαθηήξα "." είλαη
θξπθά. Ζ εληνιή ls δελ εκθαλίδεη έλα θξπθφ αξρείν (ή θαηάινγν), παξά κφλν αλ δνζεί ην φξηζκα -a.
΢ην ΢ρήκα 3.15 δίλεηαη έλα παξάδεηγκα εκθάληζεο θαη ησλ θξπθψλ αξρείσλ.

Εκθάληζε ηωλ πεξηερνκέλωλ ηνπ . Τξέρνλ θάθεινο,


ηξέρνληνο θαηαιόγνπ .. Γνληθόο Φάθεινο.

asidirop@asidirop~$ ls -la
total 126
drwxr-xr-x 13 asidirop it 1024 Apr 26 15:49 . Αξρεία κε όλνκα
drwxr-xr-x 15 root root 512 Apr 24 15:18 ..
πνπ μεθηλά κε ηελ
-rwx------ 1 asidirop it 1120 Apr 12 13:11 .cshrc
«.» είλαη θξπθά
-rwxr--r-- 1 asidirop it 885 Dec 2 13:07 .login
-rw-r--r-- 1 asidirop it 141 Mar 14 13:42 .logout
αξρεία.
-rwx------ 1 asidirop it 436 Apr 12 11:59 .profile
drwx------ 7 asidirop it 512 May 17 14:11 330 θάθεινη
drwx------ 3 asidirop it 512 Mar 19 13:31 467
drwx------ 2 asidirop it 512 Mar 31 10:16 Data
Καλνληθό
-rw-r--r-- 1 asidirop it 80 Feb 27 12:23 crontab.cron
αξρείν

΢ρήκα 3.15: Υξήζε ηεο ls κε ηνλ ζπλδπαζκό "-la".

73
 Οη θάθεινη ".", ".." είλαη θξπθνί..

 ΢ε έλαλ θάθειν κπνξνύλ λα ζπλππάξρνπλ ηα αξρεία .file1 θαη file1. Δίλαη δπν
δηαθνξεηηθά νλόκαηα αξρείσλ. Σν πξώην είλαη θξπθό.

 ΢ηα windows θξπθό είλαη έλα αξρείν πνπ έρεη ηελ ηδηόηεηα “hidden”, ε νπνία νξίδεηαη γηα
θάζε αξρείν/θαηάινγν, θαη είλαη εληειώο δηαθνξεηηθή έλλνηα ζε ζρέζε κε ην UNIX.

3.6 Αζθήζεηο γηα εμάζθεζε

΢ηόρνο
Δμνηθείσζε κε ηε δηαρείξηζε αξρείσλ θαη θαηαιφγσλ.

Άζθεζε 1
΢ηνλ παξαθάησ πίλαθα αλαθέξνληαη νη πην ζπρλέο εληνιέο γηα ηε δηαρείξηζε αξρείσλ θαη θαηαιφγσλ.
Υξεζηκνπνηψληαο ηελ εληνιή man, ζπκπιεξψζηε ηα θελά ζηνλ παξαθάησ πίλαθα.

Πίλαθαο 3.7: Πίλαθαο ΢πρλώλ Δληνιώλ

Δληνιή Βαζηθά Οξίζκαηα Δμήγεζε


mkdir [νλόκαηα θαηαιόγωλ] Γεκηνπξγεί θαηαιφγνπο.
rmdir [νλόκαηα θαηαιόγωλ] Γηαγξάθεη άδεηνπο θαηαιφγνπο.
[-i] [-f] [-r] [πεγή/έο] Αληηγξάθεη αξρεία ή θαηαιφγνπο απφ ηελ πεγή
cp
[πξννξηζκόο] ζηνλ πξννξηζκφ.
[-i] [-f] [πεγή/έο] Μεηαθηλεί/κεηνλνκάδεη αξρεία ή θαηαιφγνπο απφ
mv
[πξννξηζκόο] ηελ πεγή ζηνλ πξννξηζκφ.
[-i] [-f] [-r] [νλόκαηα
rm Γηαγξάθεη αξρεία ή θαηαιφγνπο.
αξρείωλ ή θαηαιόγωλ]
cd [όλνκα θαηαιόγνπ] Αιιαγή ηξέρνληνο θαηαιφγνπ.
[-l] [-a] [νλόκαηα αξρείωλ Δκθαλίδεη ηα πεξηερφκελα θαηαιφγσλ ή/θαη
ls
ή θαηαιόγωλ] πιεξνθνξίεο γηα ηα αξρεία.
pwd ?
cat [νλόκαηα αξρείωλ] ?
more [νλόκαηα αξρείωλ] ?
[-λνύκεξν] [νλόκαηα
head ?
αξρείωλ]
[-λνύκεξν] [νλόκαηα
tail ?
αξρείωλ]

74
Άζθεζε 2
1. Αλνίμηε έλα ηεξκαηηθφ ηνπηθά θαη εξγαζηείηε ζε απηφ.

2. Βξείηε πνηνο είλαη ν ηξέρσλ θαηάινγνο εξγαζίαο (current working directory – cwd).

3. Γείηε πνηα αξρεία/θαηάινγνη πεξηέρνληαη ζε απηφλ.

4. Αιιάμηε ηξέρνληα θαηάινγν εξγαζίαο. Μεηαβείηε ζηνλ θαηάινγν /tmp. Γείηε πνηα αξρεία/θαηάινγνη
πεξηέρνληαη εδψ.

5. Αλνίμηε αθφκε έλα ηεξκαηηθφ θαη ζπλδεζείηε ζηνλ aetos.it.teithe.gr ή ζε έλα άιιν απνκαθξπζκέλν
ζχζηεκα ζην νπνίν έρεηε πξφζβαζε.

6. Δπαλαιάβεηε ηα βήκαηα 2-4 ζην λέν ηεξκαηηθφ (δειαδή ζηνλ απνκαθξπζκέλν ππνινγηζηή).

7. Δθηειέζηε (ζηνλ aetos) ηελ εληνιή finger xxx, φπνπ xxx ην φλνκα ρξήζηε (username) πνπ έρεηε ζηνλ
aetos. Ση ζρέζε έρεη ε πιεξνθνξία "Directory:" πνπ καο εκθάληζε ε εληνιή finger κε ηνλ
ηξέρνληα θαηάινγν εξγαζίαο καο;

Άζθεζε 3

Η εληνιή touch [9] κπνξεί λα ρξεζηκνπνηεζεί γηα ηε δεκηνπξγία λέσλ (θελώλ) αξρείσλ. Η
εληνιή touch file3.txtζα δεκηνπξγήζεη (ζηνλ ηξέρνληα θαηάινγν) ην αξρείν κε
όλνκα file3.txt εθόζνλ απηό δελ πξνϋπήξρε. Αλ ππάξρεη ήδε ην αξρείν file3.txt, ηόηε
δελ ζα επεξεάζεη ηα πεξηερόκελά ηνπ. Θα αιιάμεη, όκσο, όιεο ηηο ρξνλνζθξαγίδεο (timestamps)
πνπ έρνπλ ζρέζε κε ηελ ζηηγκή ηειεπηαίαο πξόζβαζεο θαη δεκηνπξγίαο ηνπ αξρείνπ ζηελ ηξέρνπζα
ρξνληθή ζηηγκή.

1. Να δεκηνπξγήζεηε ηνλ θαηάινγν test01 θάησ απφ ην home directory ζαο (ζηνλ αεηφ). Κάληε cd (change
directory) ζηνλtest01.

2. Να δεκηνπξγήζεηε δχν θελά αξρεία κε νλφκαηα file1 θαη file2.

3. Να αιιάμεηε ην φλνκα ηνπ αξρείνπ file1 ζε test1.

4. Να ρξεζηκνπνηήζεηε ηελ εληνιή ls γηα λα ειέγμεηε ηα απνηειέζκαηα.

5. Να δεκηνπξγήζεηε έλα λέν θαηάινγν temp κέζα ζηνλ test01.

6. Να αληηγξάςεηε φια ηα αξρεία ηνπ test01 ζηνλ θαηάινγν temp.

7. Να εθηειέζεηε ηελ εληνιή tree θαη θαηαλνήζηε ην απνηέιεζκά ηεο.

8. Να δηαγξάςεηε ην αξρείν file2 ρξεζηκνπνηψληαο ηελ εληνιή rm –ri. Ση παξαηεξείηε;

9. Να δηαγξάςεηε ηνλ θαηάινγν temp κε ηελ εληνιή rmdir.

ΤΠΌΓΔΗΞΖ : Να ρξεζηκνπνηείηε ηελ εληνιή pwd γηα λα ειέγρεηε θάζε θνξά πνηνο είλαη ν Σξέρσλ
Φάθεινο Δξγαζίαο.

75
Άζθεζε 4
1. Μέζα ζην home directory ζαο (ζηνλ αεηφ) δεκηνπξγήζηε ηνλ θαηάινγν transport.

2. Γεκηνπξγήζηε ηνπο εμήο ππνθαηαιφγνπο (κέζα ζηνλ transport):

transport/
|-- cars
| |-- ford
| |-- honda
| | |-- accord
| | `-- civic
| `-- renault
|-- planes
| |-- airbus
| `-- learjet
`-- trains

3. Υξεζηκνπνηήζηε ηελ εληνιή cd, γηα λα πεξηεγεζείηε ζε απηνχο ηνπο θαηαιφγνπο.

4. Υξεζηκνπνηήζηε ηελ εληνιή ls, γηα λα δείηε ηα πεξηερφκελά ηνπο.

5. Μεηαβείηε ζηνλ θαηάινγν cars (κε ηελ εληνιή cd) θαη δείηε κε ηελ εληνιή ls ηα πεξηερφκελα ηνπ
θαηαιφγνπ planes.

6. Αληηγξάςηε ηνλ θαηάινγν planes κέζα ζηνλ θαηάινγν cars. Πψο κπνξείηε λα ην θάλεηε κε ηελ
εληνιή cp;

7. Μεηαβείηε ζηνλ θαηάινγν transport θαη δείηε κε ηελ εληνιή tree ην απνηέιεζκα.

8. Μεηαβείηε ζηνλ θαηάινγν honda θαη πξνζπαζήζηε λα δηαγξάςεηε ηνπο θαθέινπο . (current) θαη ..
(parent) κε ηελ εληνιή rm. Ση παξαηεξείηε;

Άζθεζε 5
Δθηειέζηε ηηο παξαθάησ εληνιέο (ζηνλ aetos ή ζε έλα ζχζηεκα κε πνιινχο ρξήζηεο) θαη εξκελεχζηε ηα
απνηέιεζκά ηνπο:

cat /etc/passwd
more /etc/passwd
head -15 /etc/passwd
tail -10 /etc/passwd
cd /etc
tail -10 passwd
tail -10 /etc/mtools.conf
tail –n +10 /etc/mtools.conf

Άζθεζε 6
Βξείηε ην απνηέιεζκα ηεο εθηέιεζεο (ζηνλ aetos) ησλ παξαθάησ εληνιψλ :

76
echo ~
echo ~/
echo ~asidirop
echo ~klefturi
echo $HOME
echo ~studin
echo ~root
echo ~asidirop/tmp
echo ~asidirop/denyparxei/fakelos
cd ~asidirop/denyparxei/fakelos
ls ~asidirop/denyparxei/fakelos
echo ~asidirop/..
ls ~asidirop/..

΢ηελ πεξίπησζε πνπ δελ δηαζέηεηε ινγαξηαζκφ ζηνλ ζπγθεθξηκέλν ππνινγηζηή (aetos), ηφηε,
φπνπ asidirop ή klefturi ζηηο πξνεγνχκελεο εληνιέο ρξεζηκνπνηήζηε νλφκαηα ρξεζηψλ πνπ
ππάξρνπλ.

Άζθεζε 7
΢ην παξαθάησ δηαδξαζηηθφ ζρήκα (΢ρήκα 3.16) παξνπζηάδεηαη έλα ηπραίν ζχζηεκα αξρείσλ. Μπνξείηε
ρξεζηκνπνηψληαο ηελ επηινγή «Νέν ΢χζηεκα Αξρείσλ» λα δεκηνπξγήζεηε λέν δηαθνξεηηθφ. Όηαλ παηήζεηε
ην θνπκπί «Έλαξμε παηρληδηνχ», ζα εκθαλίδνληαη ζην κπιε πιαίζην θάπνηεο δηαδξνκέο. Θα πξέπεη λα θάλεηε
θιηθ επάλσ ζην ζρήκα, ζηνλ θφκβν πνπ αληηζηνηρεί ζηε δηαδξνκή πνπ ζαο εκθαλίδεηαη. Αλ ε δηαδξνκή πνπ
εκθαλίδεηαη είλαη ιαλζαζκέλε, ζα πξέπεη λα παηήζεηε ην θνπκπί «Δίλαη Λάζνο». ΢πλνιηθά, έρεηε 30
δεπηεξφιεπηα γηα λα βξείηε φζν πεξηζζφηεξεο δηαδξνκέο κπνξείηε.

 Σν παξφλ ΢ρήκα είλαη Γηαδξαζηηθφ ΢ρήκα θαη πεξηέρεηαη


κφλν ζηελ ειεθηξνληθή έθδνζε ηνπ βηβιίνπ.

΢ρήκα 3.16: Άζθεζε-Παηρλίδη κε απόιπηεο δηαδξνκέο.

Άζθεζε 8
Τπνζέζηε φηη ην δηθφ ζαο home directory πεξηέρεη ηνπο θαθέινπο alice, bob, θαζψο θαη ηα
αξρεία carol, eve, fred, φπσο θαίλνληαη ζην παξαθάησ ζρήκα:

My home directory

alice bob

carol eve fred

΢ρήκα 3.17: Άζθεζε ηύπνπ ΢σζηό-Λάζνο κε δηαδξνκέο

77
1. Πνηα είλαη ε Απφιπηε Γηαδξνκή γηα ην δηθφ ζαο home directory;

2. Πνηα είλαη ε Απφιπηε Γηαδξνκή γηα ηνλ παξαπάλσ θαηάινγν alice;

3. Να δεκηνπξγήζεηε ηελ παξαπάλσ δνκή θαηαιφγσλ (ρξεζηκνπνηήζηε ηελ εληνιή touch γηα ηε
δεκηνπξγία ησλ αξρείσλ, mkdir γηα ηε δεκηνπξγία θαηαιφγσλ)

4. Τπνζέηνληαο φηη ν ηξέρσλ θαηάινγνο εξγαζίαο (cwd) είλαη ν θάθεινο bob, πνηεο απφ ηηο παξαθάησ
δηαδξνκέο είλαη ζσζηέο; Να δηθαηνινγήζεηε ηελ απάληεζή ζαο.

1. ../alice/carol
2. ~/alice/carol
3. ./../alice/carol
4. carol
5. ./carol
6. ./alice/carol
7. ~alice/carol
8. ..//alice/./carol
Αλαηξέμηε ζηελ ειεθηξνληθή έθδνζε ηνπ βηβιίνπ γηα λα
κεηξήζεηε ζθνξ θαη λα δείηε ηηο απαληήζεηο
΢ρήκα 3.18: Δξσηήζεηο ΢σζηό-Λάζνο γηα ηηο Γηαδξνκέο

5. Διέγμηε ηελ νξζφηεηα ησλ παξαπάλσ δηαδξνκψλ ρξεζηκνπνηψληαο ηελ εληνιή stat.

H εληνιή stat, δέρεηαη σο νξίζκαηα κηα ή πεξηζζόηεξεο Γηαδξνκέο ζε αξρεία ή θαηαιόγνπο, θαη
εκθαλίδεη πιεξνθνξίεο γηα απηά (όπσο ζε πνηνλ αλήθεη, πόηε ηξνπνπνηήζεθε ηειεπηαία θνξά θηι.).
Δάλ ζηελ εληνιή statδώζνπκε σο όξηζκα κηα δηαδξνκή πνπ δελ είλαη έγθπξε, ηόηε (πξνθαλώο)
εκθαλίδεηαη κήλπκα ζθάικαηνο.

6. Μπνξείηε λα ειέγμεηε ηελ νξζφηεηα ησλ παξαπάλσ δηαδξνκψλ ρξεζηκνπνηψληαο (αληί ηελ stat) ηελ
εληνιή ls;

7. Μπνξείηε λα ειέγμεηε ηελ νξζφηεηα ησλ παξαπάλσ δηαδξνκψλ ρξεζηκνπνηψληαο (αληί ηελ stat) ηελ
εληνιή cd;

8. Τπνζέηνληαο φηη ν ηξέρσλ θαηάινγνο είλαη ν bob, πνηεο είλαη νη εληνιέο γηα:
α) κεηαθίλεζε ησλ carol θαη eve κέζα ζηνλ θαηάινγν bob (κε κηα εληνιή),
β) κεηαθίλεζε ηνπ bob (άξα θαη ησλ πεξηερνκέλσλ ηνπ) κέζα ζηνλ θαηάινγν alice,
γ) αληηγξαθή ηνπ fred κέζα ζηνλ θαηάινγν alice κε έλα λέν φλνκα.

9. Τπνζέηνληαο φηη ν ηξέρσλ θαηάινγνο είλαη ην δηθφ ζαο home directory


α) ηη πξέπεη λα πιεθηξνινγήζεηε γηα ηε δηαγξαθή ηνπ directory bob;
β) λα δψζεηε κηα εληνιή γηα ηε δηαγξαθή ησλ carol, θαη eve.

78
Άζθεζε 9
΢ην παξαθάησ δηαδξαζηηθφ ζρήκα (Γηαδξαζηηθφ ΢ρήκα 3.19) παξνπζηάδεηαη έλα ηπραίν ζχζηεκα αξρείσλ
(φπσο θαη ζηελ Άζθεζε 7). Όηαλ παηήζεηε ην θνπκπί «Έλαξμε παηρληδηνχ», ζα εκθαλίδνληαη ζην κπιε
πιαίζην θάπνηεο δηαδξνκέο. Θα πξέπεη λα θάλεηε θιηθ επάλσ ζην ζρήκα, ζηνλ θφκβν πνπ αληηζηνηρεί ζηε
δηαδξνκή πνπ ζαο εκθαλίδεηαη. Δπηπιένλ, αλ ε δηαδξνκή είλαη ζρεηηθή, ηφηε παίδεη ξφιν θαη ν ηξέρσλ
θαηάινγνο εξγαζίαο. Σν πνηνο είλαη θάζε θνξά εκθαλίδεηαη ζην θφθθηλν πιαίζην. Αλ ε δηαδξνκή πνπ
εκθαλίδεηαη είλαη ιαλζαζκέλε, ζα πξέπεη λα παηήζεηε ην θνπκπί «Δίλαη Λάζνο». ΢πλνιηθά έρεηε 30
δεπηεξφιεπηα γηα λα βξείηε φζν πεξηζζφηεξεο δηαδξνκέο κπνξείηε.

 Σν παξφλ ΢ρήκα είλαη Γηαδξαζηηθφ ΢ρήκα θαη πεξηέρεηαη


κφλν ζηελ ειεθηξνληθή έθδνζε ηνπ βηβιίνπ.

΢ρήκα 3.19: Άζθεζε-Παηρλίδη κε απόιπηεο θαη ζρεηηθέο δηαδξνκέο.

3.7 Αλαθνξέο
[1] GNU Bash, General Commands Manual.
[2] GNU coreutils Reference Manual: cp command.
[3] GNU coreutils Reference Manual: echo command.
[4] GNU coreutils Reference Manual: mkdir command.
[5] GNU coreutils Reference Manual: mv command.
[6] GNU coreutils Reference Manual: pwd command.
[7] GNU coreutils Reference Manual: rm command.
[8] GNU coreutils Reference Manual: rmdir command.
[9] GNU coreutils Reference Manual: touch command.
[10] WikiPedia. List of file systems, February 2015. [ http://en.wikipedia.org/wiki/List_of_file_systems ]

79
Κεθάιαην 4

4 Γνπιεύνληαο κε πνιιά αξρεία ρξεζηκνπνηώληαο ραξαθηήξεο κπαιαληέξ


(wildcards).
Όηαλ εξγαδφκαζηε απφ ηε γξακκή εληνιψλ ελφο ζπζηήκαηνο, πξνθαλψο είλαη ζρεδφλ αλαγθαία κηα κέζνδνο
ε νπνία λα καο επηηξέπεη λα γξάςνπκε πνιιά «ζηνηρεία» πιεθηξνινγψληαο ιίγα. Σν θέιπθνο bash καο δίλεη
δπν εξγαιεία γηα ηε δηεπθφιπλζε καο. Σν πξψην είλαη ε απηφκαηε ζπκπιήξσζε νλνκάησλ αξρείσλ
(Τπνθεθάιαην 4.1). Σν δεχηεξν εξγαιείν (Τπνθεθάιαην 4.2) είλαη νη ραξαθηήξεο κπαιαληέξ (wildcards).

4.1 Απηόκαηε ζπκπιήξσζε νλνκάησλ αξρείσλ (filename auto-completion)


Καζψο ζην θέιπθνο [1] πιεθηξνινγνχκε κηα αλαθνξά ζε έλα φλνκα αξρείνπ, κπνξνχκε λα παηήζνπκε ην
πιήθηξν “Tab” θαη ην θέιπθνο λα ζπκπιεξψζεη απηφκαηα ην φλνκα αξρείνπ. Έζησ φηη κέζα ζε έλαλ
θαηάινγν ππάξρνπλ ηα αξρεία test.txt θαη file.txt θαη ζέινπκε λα πιεθηξνινγήζνπκε ηελ
εληνιή ls -l file.txt, κπνξνχκε λα πιεθηξνινγήζνπκε κφλν ην ls -l f θαη λα παηήζνπκε ην
πιήθηξν “Tab”. Σν θέιπθνο απηφκαηα ζα ζπκπιεξψζεη ην φλνκα αξρείνπ.
΢ηελ πεξίπησζε πνπ ζηνλ θάθειν ππάξρνπλ πνιιά αξρεία πνπ μεθηλνχλ κε ην ίδην γξάκκα, ηφηε ην
θέιπθνο ζα ζπκπιεξψζεη κφλν ηνπο ραξαθηήξεο νη νπνίνη είλαη θνηλνί ζε φια ηα νλφκαηα αξρείσλ.
Παξάδεηγκα, έζησ ζε έλαλ θαηάινγν ππάξρνπλ ηα παξαθάησ αξρεία:

asidirop@antonis-PC:/tmp/tests$ ls -l
total 0
-rw-rw-r-- 1 asidirop asidirop 0 Mar 14 22:23 file1.txt
-rw-rw-r-- 1 asidirop asidirop 0 Mar 14 22:23 file2
-rw-rw-r-- 1 asidirop asidirop 0 Mar 14 22:23 file.txt
-rw-rw-r-- 1 asidirop asidirop 0 Mar 14 22:23 test.txt
asidirop@antonis-PC:/tmp/tests$ ls -l f█

Δάλ θαηά ηελ πιεθηξνιφγεζε ηνπ νλφκαηνο αξρείνπ πιεθηξνινγήζνπκε κφλν ην "f" θαη κεηά
παηήζνπκε ην πιήθηξν “Tab”, ηφηε ην θέιπθνο ζα αλαγλσξίζεη φηη ηα
αξρεία file1.txt, file2 θαη file.txt μεθηλνχλ φια κε "f" θαη ηαηξηάδνπλ ζε απηφ πνπ μεθηλήζακε
λα πιεθηξνινγνχκε. Θα ζπκπιεξψζεη κφλν ηνπο θνηλνχο ραξαθηήξεο, δειαδή ζα ζπκπιεξψζεη ην "f" κε
ην ile πνπ είλαη νη θνηλνί ραξαθηήξεο, θαη ζα ζηακαηήζεη ε απηφκαηε ζπκπιήξσζε. ΢ε απηφ ην ζεκείν, εάλ
μαλαπαηήζνπκε ην πιήθηξν “Tab”, ζα καο εκθαλίζεη φιεο ηηο δπλαηέο επηινγέο, δειαδή:

asidirop@antonis-PC:/tmp/tests$ ls -l file
file1.txt file2 file.txt
asidirop@antonis-PC:/tmp/tests$ ls -l file█

Απφ εθεί θαη κεηά κπνξνχκε λα ζπλερίζνπκε ηελ πιεθηξνιφγεζε ηνπ νλφκαηνο αξρείνπ θαη λα
μαλαπαηήζνπκε “Tab”. Παξάδεηγκα, αλ πιεθηξνινγήζνπκε ην έλα (“1”) θαη έπεηηα ην “Tab”, ηφηε ην
θέιπθνο ζα αλαγλσξίζεη φηη δεηείηαη αλαθνξά ζην αξρείν file1.txt θαη ζα ζπκπιεξψζεη νιφθιεξν ην
φλνκα αξρείνπ.
Πξνθαλψο, ε απηφκαηε ζπκπιήξσζε ηζρχεη φρη κφλν γηα νλφκαηα αξρείσλ, αιιά θαη γηα νλφκαηα
θαηαιφγσλ.

81
asidirop@antonis-PC:/tmp/tests$ ls -l /tmp/t
tests/ tmp6VdHaF tmp8DwO_C
asidirop@antonis-PC:/tmp/tests$ ls -l /tmp/t█

Ζ πιεθηξνιφγεζε ηνπ “Tab” κεηά απφ ην "/t" εκθάληζε φηη δπλαηέο επηινγέο είλαη
νη tests/, tmp6VdHaF θαη tmp8DwO_C. Μάιηζηα καο δίλεηαη θαη ε πιεξνθνξία φηη ην tests είλαη
θαηάινγνο πξνζζέηνληαο ζην ηέινο ηνπ νλφκαηνο θαηαιφγνπ θαη ηνλ ραξαθηήξα "/".

4.2 Χαξαθηήξεο Μπαιαληέξ (Wildcards)


Δάλ ζέινπκε, κπνξνχκε λα δηαγξάςνπκε πνιιά αξρεία κε κηα εληνιή, γηα παξάδεηγκα λα ρξεζηκνπνηήζνπκε
ηελ rm κε νξίζκαηα πνιιά νλφκαηα αξρείσλ:

rm file1.c file2.c file3.c file4.c

Οκνίσο, κπνξνχκε λα αληηγξάςνπκε πνιιά αξρεία κε κηα εληνιή:

cp file1.c file2.c file3.c file4.c /media/USB_STICK

΢ε απηή ηε πεξίπησζε, ην ηειεπηαίν φξηζκα ζηελ εληνιή cp πξέπεη λα είλαη έλαο θαηάινγνο πνπ
ππάξρεη. Με ηνλ ίδην ηξφπν, ζα κπνξνχζακε λα ρξεζηκνπνηήζνπκε θάπνηα άιιε εληνιή πνπ ζα εθαξκφζεη
θάπνηα ελέξγεηα ζε πνιιά αξρεία.
Φαληαζηείηε, φκσο, λα ζέινπκε λα αληηγξάςνπκε εθαηφ αξρεία. Αθφκε θαη αλ ρξεζηκνπνηήζνπκε ηε
δπλαηφηεηα ηνπ θειχθνπο γηα απηφκαηε ζπκπιήξσζε νλφκαηνο αξρείνπ, ζα ήηαλ αδχλαην λα
πιεθηξνινγήζνπκε εθαηφ νλφκαηα αξρείσλ.

Αλ όια ηα αξρεία πνπ ζέινπκε λα δηαγξάςνπκε ή αληηγξάςνπκε ή κεηαθηλήζνπκε έρνπλ θάπνην


θνηλό ραξαθηεξηζηηθό, ηόηε κπνξνύκε λα ρξεζηκνπνηήζνπκε ηνπο ραξαθηήξεο κπαιαληέξ, γηα λα
αλαθεξζνύκε ζε απηά, ρσξίο λα γξάθνπκε όια ηα νλόκαηα.

Οη ραξαθηήξεο κπαιαληέξ (wildcard characters) [] ζπλνςίδνληαη ζηνλ παξαθάησ πίλαθα:

82
Πίλαθαο 4.1: Δηδηθνί ραξαθηήξεο κπαιαληέξ

΢ύκβνιν Δμήγεζε
΢εκαίλεη νπνηνζδήπνηε ζπλδπαζκφο ραξαθηήξσλ νπνηνπδήπνηε κήθνπο (αθφκε θαη
*
κεδεληθνχ κήθνπο)
? ΢εκαίλεη έλαο αθξηβψο ραξαθηήξαο – νπνηνζδήπνηε ραξαθηήξαο
΢εκαίλεη έλαο αθξηβψο ραξαθηήξαο απφ ην ζχλνιν ησλ ραξαθηήξσλ πνπ αλαγξάθνληαη
[xyz]
κέζα ζηηο αγθχιεο: ("x", "y", "z" )
΢εκαίλεη έλαο αθξηβψο ραξαθηήξαο – νπνηνζδήπνηε ραξαθηήξαο εθηφο ησλ ("x", "y", "z" ).
[^xyz]
Σν ζχκβνιν "^" ακέζσο κεηά ηελ αγθχιε "[" δειψλεη άξλεζε.
[!xyz] Δλαιιαθηηθά ηνπ "^" κπνξεί λα ρξεζηκνπνηεζεί θαη ην "!". Γειψλεη άξλεζε.
[abcdxyz] Δάλ νη ραξαθηήξεο ηνπ ζπλφινπ πνπ δειψλνπκε είλαη ζπλερφκελνη ζηνλ πίλαθα
[a-dxyz] ραξαθηήξσλ, ηφηε κπνξεί λα ρξεζηκνπνηεζεί ε παχια "-" γηα λα δειψζεη "απφ - έσο". Οη
[a-dx-z] ηξεηο εθθξάζεηο είλαη ηζνδχλακεο.
Μπνξεί λα γίλεη ζπλδπαζκφο ηνπ εχξνπο ("-") κε ηελ άξλεζε. Σν παξάδεηγκα ζεκαίλεη
[!a-dxyz] έλαο νπνηνζδήπνηε ραξαθηήξαο, αιιά φρη θάπνηνο απφ ηνπο ("a", "b", "c", "d", "x", "y",
"z").

Δπίζεο, ππάξρνπλ θαη αξθεηέο ζπληνκεχζεηο ζε θάπνηα ζπρλά ρξεζηκνπνηνχκελα ζχλνια


ραξαθηήξσλ. Γηα παξάδεηγκα ε ζπληφκεπζε [:upper:] ζεκαίλεη έλα νπνηνδήπνηε θεθαιαίν γξάκκα θαη κπνξεί
λα ρξεζηκνπνηεζεί κέζα ζε αθφκε έλα δεπγάξη αγθπιψλ: [[:upper:]]. Παξαδείγκαηα:

ls [[:upper:]]* # ζα εκθαλίζεη ηα νλόκαηα αξρείωλ/θαηαιόγωλ


# πνπ μεθηλνύλ κε θεθαιαίν γξάκκα.
ls [[:upper:]156]* # ζα εκθαλίζεη ηα νλόκαηα αξρείωλ/θαηαιόγωλ
# πνπ μεθηλνύλ κε θεθαιαίν γξάκκα
# ή "1" ή "5" ή "6".
ls [![:upper:]]* # ζα εκθαλίζεη ηα νλόκαηα αξρείωλ
# πνπ δεν μεθηλνύλ κε θεθαιαίν γξάκκα.
ls [![:upper:]ad]* # ζα εκθαλίζεη ηα νλόκαηα αξρείωλ
# πνπ δεν μεθηλνύλ νύηε κε
# θεθαιαίν γξάκκα νύηε κε ηα
# γξάκκαηα "a", "d".

΢ηνλ Πίλαθα 4.2 παξνπζηάδνληαη νη πεξηζζφηεξν ζπρλέο ζπληνκεχζεηο:

83
Πίλαθαο 4.2: Οκάδεο ραξαθηήξσλ όπσο νξίδνληαη ζην POSIX.

΢ύκβνιν Δμήγεζε
[:alnum:] αιθαξηζκεηηθφο ραξαθηήξαο
[:alpha:] αιθαβεηηθφο ραξαθηήξαο
[:upper:] αιθαβεηηθφο θεθαιαίνο ραξαθηήξαο
[:lower:] αιθαβεηηθφο πεδφο ραξαθηήξαο
[:digit:] ραξαθηήξαο δεθαδηθνχ αξηζκνχ, δειαδή 0-9
[:xdigit:] ραξαθηήξαο δεθαεμαδηθνχ αξηζκνχ, δειαδή 0-9abcdef ή θαη θεθαιαία.
ραξαθηήξαο πνπ αληηζηνηρεί ζε δηάζηεκα: θελφ δηάζηεκα (space), ζηεινζέηεο (tab),
[:space:]
αιιαγή γξακκήο (Enter) θαη παξφκνηνπο
[:print:] Όινη νη εθηππψζηκνη ραξαθηήξεο.
[:graph:] Όινη νη εθηππψζηκνη ραξαθηήξεο εθηφο ησλ [:space:]
[:cntrl:] Όινη νη ραξαθηήξεο ειέγρνπ, δειαδή κε εθηππψζηκνη.
[:punct:] Υαξαθηήξεο ζηίμεο.

4.2.1 ΢ύλνια Χαξαθηήξσλ (Charsets)


Όπσο είλαη γλσζηφ, ηα δεδνκέλα απνζεθεχνληαη ζε bytes. Όηαλ απνζεθεχεηαη έλα αξρείν κε θείκελν, ηφηε ν
θάζε ραξαθηήξαο αληηζηνηρεί ζε έλα byte, δειαδή ζε έλαλ αξηζκφ απφ 0 έσο 255. Απηή ε αληηζηνηρία
ραξαθηήξα κε byte νλνκάδεηαη ζχλνιν ραξαθηήξσλ (character set ή ζπληνκνγξαθηθά charset).
΢ην θέιπθνο, φηαλ ρξεζηκνπνηνχκε κηα θιάζε ραξαθηήξσλ ηεο κνξθήο [A-Z], γηα ηε ζχγθξηζε ησλ
ραξαθηήξσλ ρξεζηκνπνηνχληαη νη θαλφλεο ζχγθξηζεο ραξαθηήξσλ πνπ νξίδνληαη απφ ην ζχλνιν ραξαθηήξσλ
(character set) πνπ ρξεζηκνπνηείηαη. Σα βαζηθά ζχλνια ραξαθηήξσλ είλαη ηα: ASCII, ISO8859-1, ISO8859-2,
... ISO8859-16, UTF8, UTF16, θηι.
Έλα απφ ηα πξψηα ζχλνια ραξαθηήξσλ θαη ε βάζε γηα πνιιά επφκελα είλαη ην ζχλνιν ASCII
(American Standard Code for Information Interchange). Σν ASCII έγηλε πξφηππν απφ ηνλ νξγαληζκφ ISO
(International Organization for Standardization) ηε δεθαεηία ηνπ 1960 σο ISO-646. ΢ε απηφ ην ζχλνιν
ραξαθηήξσλ ρξεζηκνπνηνχληαη 7bits γηα ηελ αλαπαξάζηαζε ηνπ θάζε ραξαθηήξα. Τπάξρνπλ 128 ραξαθηήξεο,
νη πξψηνη 32 είλαη ραξαθηήξεο ειέγρνπ θαη νη ππφινηπνη είλαη εθηππψζηκνη (αξηζκνί, ηα γξάκκαηα ηνπ
αγγιηθνχ αιθαβήηνπ, ζεκεία ζηίμεο θαη θάπνηα ζχκβνια.

Πίλαθαο 4.3: Ο πίλαθαο ASCII.

30 40 50 60 70 80 90 100 110 120


----------------------------------
0: ( 2 < F P Z d n x
1: ) 3 = G Q [ e o y
2: * 4 > H R \ f p z
3: ! + 5 ? I S ] g q {
4: " , 6 @ J T ^ h r |
5: # - 7 A K U _ i s }
6: $ . 8 B L V ` j t ~
7: % / 9 C M W a k u DEL
8: & 0 : D N X b l v
9: ´ 1 ; E O Y c m w

84
΢ηνλ Πίλαθα 4.3 παξνπζηάδνληαη νη εθηππψζηκνη ραξαθηήξεο ηνπ ζπλφινπ ASCII θαη ε αληηζηνηρία
ηνπο. Οη πξψηνη 32 ραξαθηήξεο (0-31) ηνπ πίλαθα (θαη ν 127) πεξηέρνπλ ραξαθηήξεο ειέγρνπ. Οη ραξαθηήξεο
ειέγρνπ δελ θαίλνληαη, αιιά δίλνπλ θάπνηα πιεξνθνξία (ζπλήζσο ζην ηεξκαηηθφ πνπ ηνπο εξκελεχεη).
Παξάδεηγκα, ν ραξαθηήξαο πνπ αληηζηνηρεί ζην 7 νδεγεί ην ηεξκαηηθφ λα θάλεη ήρν (bell ζπκβνιίδεηαη σο
BEL, \a, ^G), ν 10 αληηζηνηρεί ζηελ αιιαγή γξακκήο (line feed: ζπκβνιίδεηαη σο LF, \n, ^J) θηι. ΢ηνλ
παξαπάλσ πίλαθα εκθαλίδνληαη κφλν νη εθηππψζηκνη ραξαθηήξεο, βιέπνπκε γηα παξάδεηγκα φηη ην "Α"
αληηζηνηρεί ζηνλ αξηζκφ 65, ην "i" ζηνλ αξηζκφ 105 θηι.

Η ζεηξά κε ηελ νπνία εθθξάδεηαη έλα εύξνο ραξαθηήξσλ νξίδεηαη από ηε ζεηξά ησλ ραξαθηήξσλ
ζηνλ πίλαθα ASCII ή ζην ζύλνιν ραξαθηήξσλ πνπ ρξεζηκνπνηείηαη.

Έηζη αλ δψζνπκε:

ls [5-T]*

ην [5-Σ] ζεκαίλεη έλαο ραξαθηήξαο κέζα ζην εχξνο απφ ην ραξαθηήξα "5" κέρξη ηνλ "Σ". Πνην είλαη απηφ ην
εχξνο; Θα είλαη νη ραξαθηήξεο 5 6 7 8 9 : ; < = > ? @ A...Σ.
Δδψ, πξέπεη λα παξαηεξήζνπκε φηη ην ζχλνιν ASCII νξίδεη 128 ραξαθηήξεο. Άξα, ρξεζηκνπνηεί 7
bits. Σν φγδνν bit ζπλήζσο ρξεζηκνπνηνχληαλ σο bit ειέγρνπ (parity bit).

Ιζηνξηθή Αλαδξνκή
Απηνί νη 128 ραξαθηήξεο, πνπ ζηελ πξαγκαηηθφηεηα ήηαλ 95, αλ εμαηξέζνπκε ηνπο ραξαθηήξεο ειέγρνπ, ήηαλ
αξθεηνί γηα ηνλ ζπκβνιηζκφ ησλ αγγιηθψλ γξακκάησλ, φρη φκσο θαη γηα γξάκκαηα άιισλ γισζζψλ.
Δπηπιένλ, ηε δεθαεηία ηνπ 1990 είραλ βειηησζεί αξθεηά ηα κέζα απνζήθεπζεο θαη επηθνηλσλίαο θαη δελ
απαηηνχληαλ ε ρξήζε ηνπ bit ειέγρνπ. Σφηε νξίζηεθαλ ηα ζχλνια ραξαθηήξσλ ISO-8859, θαηά ηα νπνία
ρξεζηκνπνηνχληαλ 8bits γηα ηελ αλαπαξάζηαζε ελφο ραξαθηήξα, δειαδή ππήξραλ 256 δηαζέζηκνη
ραξαθηήξεο.
Παξφια απηά, νη 256 δηαζέζηκεο ζέζεηο ραξαθηήξσλ δελ αξθνχλ γηα ηνλ ζπκβνιηζκφ φισλ ησλ
γξακκάησλ φισλ ησλ γισζζψλ. Έηζη, ν νξγαληζκφο ISO φξηζε ηα ππνζχλνια: ISO-8859-1, ISO-8859-2, ...
ISO-8859-16. ΢ε φια απηά ηα ζχλνια, νη πξψηνη 128 ραξαθηήξεο είλαη ίδηνη κε ην ASCII. Οη ππφινηπνη
ραξαθηήξεο νξίδνληαη γηα ηα ζχκβνια ηεο ρψξαο πνπ ρξεζηκνπνηνχληαη. Σν ISO-8859-1 [2] αληηζηνηρεί ζηα
αγγιηθά (΢ρήκα 4.1) ελψ ην ISO-8859-7 [3] πεξηέρεη ηνπο ειιεληθνχο ραξαθηήξεο (΢ρήκα 4.2).
Ο νξηζκφο ησλ ISO-8859 θαη ηδηαίηεξα ηνπ ISO-8859-7 ππνηίζεηαη φηη ζα έδηλε έλα ηέινο ζηε ρξήζε
ησλ greeklish ζε ειιεληθά (αλεπίζεκα ζπλήζσο) θείκελα. Όκσο, ζηελ πξαγκαηηθφηεηα δεκηνχξγεζε αθφκε
πεξηζζφηεξα πξνβιήκαηα. Έλαο ρξήζηεο (ή ην ζχζηεκα) ζα έπξεπε λα γλσξίδεη ην ζχλνιν ραξαθηήξσλ πνπ
ρξεζηκνπνηεί έλα θείκελν γηα λα κπνξέζεη λα ην πξνβάιεη ζσζηά. Έηζη, έρνληαο έλα θείκελν γξακκέλν κε
ISO-8859-7, αλ ζηελ πξνβνιή ηνπ δελ ιακβάλνληαλ απηφ ππφςε θαη ρξεζηκνπνηνχληαλ ην ISO-8859-1 (πνπ
είλαη ην πιένλ ζπρλφ παγθνζκίσο), ηφηε ην θείκελν δελ είλαη αλαγλψζηκν. Παξάδεηγκα (φπσο θαίλεηαη ζηα 2
΢ρήκαηα), ν ραξαθηήξαο "β" ζα εκθαλίδεηαη σο "â", ελψ ν ραξαθηήξαο "Π" ζαλ "Ð" θ.ν.θ.

85
΢ρήκα 4.1: ISO-8859-1 όπσο νξίδεηαη από ηνπο νξγαληζκνύο ISO-IEC

΢ρήκα 4.2: ISO-8859-7 όπσο νξίδεηαη από ηνπο νξγαληζκνύο ISO-IEC

Ήηαλ πξνθαλήο ε αλάγθε γηα νξηζκφ ελφο ζπλφινπ ραξαθηήξσλ κε βάζε ην νπνίν δελ ζα ππήξρε
δηθνξνχκελν byte. Έηζη, νξίζηεθαλ ηα multi-byte character sets θαη ε νηθνγέλεηα UTF. ΢ε απηά ηα ζχλνια
ραξαθηήξσλ γηα ηελ αλαπαξάζηαζε ελφο ραξαθηήξα ρξεζηκνπνηνχληαη πάλσ απφ έλα bytes. ΢πλεπψο, νη
δπλαηνί ζπλδπαζκνί είλαη πνιινί θαη ηθαλνί λα αλαπαξαζηήζνπλ πνιινχο ραξαθηήξεο. ΢ην UTF-8 έλαο

86
ραξαθηήξαο θαηαιακβάλεη απφ 8 έσο 16 bits (1 - 2 bytes). Οη πξψηνη 128 ραξαθηήξεο είλαη ίδηνη κε ην ASCII.
΢ην UTF-16 έλαο ραξαθηήξαο θαηαιακβάλεη 16 ή 32 bits (2 - 4 bytes).
΢ην Linux, ρξεζηκνπνηείηαη πιένλ σο πξνθαζνξηζκέλν ζχλνιν ραξαθηήξσλ ην UTF-8. Δπίζεο, ζηνλ
Παγθφζκην Ηζηφ (WWW) ρξεζηκνπνηείηαη θπξίσο ην UTF-8. Παξφια απηά, δεδνκέλεο ηεο χπαξμεο πνιιψλ
ζπλφισλ πνπ έρνπλ νξηζηεί απφ ηνλ νξγαληζκφ ISO θαη δεδνκέλνπ φηη ε Microsoft έρεη νξίζεη ηα δηθά ηεο
ζχλνια ραξαθηήξσλ (windows-1252, windows-1253, θ.α.), εμαθνινπζεί λα ππάξρεη ζχγρπζε ζε πνιιέο
πεξηπηψζεηο αλαγλψξηζεο ησλ ραξαθηήξσλ. Απαηηείηαη ηδηαίηεξε πξνζνρή, ηδίσο θαηά ηε δηαρείξηζε αξρείσλ
πνπ δεκηνπξγήζεθαλ ζε δηαθνξεηηθφ ππνινγηζηή, ν νπνίνο πηζαλφλ ρξεζηκνπνηεί δηαθνξεηηθφ
πξνθαζνξηζκέλν ζχλνιν ραξαθηήξσλ.

4.2.2 ΢ύλνια Χαξαθηήξσλ θαη Wildcards

΢ηα ζύλζεηα ζύλνια ραξαθηήξσλ (UTF), νξίδνληαη θαη ηζνδπλακίεο ραξαθηήξσλ. Παξάδεηγκα ην
"α" είλαη ηζνδύλακν κε ην "ά", κε ην "Α" θαη κε ην "Ά". Γηα θάπνηα άιιε γιώζζα:
"à" ⇔ "á" ⇔ "â" ⇔ "ã" ⇔ "ä" ⇔ "å".

Έηζη, ην [Α-Ε] ηαηξηάδεη θαη ηνπο πεδνχο ραξαθηήξεο (a-z) εθφζνλ ρξεζηκνπνηείηαη UTF ζχλνιν
ραξαθηήξσλ. ΢πλεπψο, είλαη πξνηηκφηεξν λα ρξεζηκνπνηνχληαη νη ζπληνκεχζεηο, φπνπ απηφ είλαη εθηθηφ.
Δπίζεο, γηα παξάδεηγκα ε ζπληφκεπζε [[:upper:]] ππεξηεξεί απφ ηε δηαηχπσζε [Α-Ε], δηφηη ην πξψην
ζα ηαηξηάμεη ζε φινπο ηνπο θεθαιαίνπο ραξαθηήξεο είηε ειιεληθνχο, είηε αγγιηθνχο, είηε ηνληζκέλνπο
ειιεληθνχο.
Μέζα ζε έλα θέιπθνο κπνξνχκε λα αιιάμνπκε ην ζχλνιν ραξαθηήξσλ πνπ ρξεζηκνπνηείηαη
νξίδνληαο ηε κεηαβιεηή πεξηβάιινληνο LC_ALL. Πεξηζζφηεξα γηα ηηο κεηαβιεηέο πεξηβάιινληνο ζα δνχκε
ζην Κεθάιαην 8. ΢ηνλ Πίλαθα 4.4 παξαζέηνπκε κφλν ηνλ ηξφπν ρσξίο πεξαηηέξσ εμήγεζε [4]:

Πίλαθαο 4.4: Παξαδείγκαηα ηηκώλ γηα ηηο ξπζκίζεηο ρώξαο (locale).

Θέηεη σο ηξέρνλ ζχλνιν ραξαθηήξσλ ην ASCII. Μεηά απφ απηφ ζα ππάξρεη


export LC_ALL=C
πξφβιεκα ρεηξηζκνχ ειιεληθψλ γξακκάησλ.
Θέηεη σο ηξέρνλ ζχλνιν ραξαθηήξσλ ην UTF-8 θαη κελχκαηα ζηα ειιεληθά.
Μεηά απφ απηφ νη εληνιέο ζα πξνζπαζνχλ λα εκθαλίζνπλ ηα κελχκαηα ζηα
export
ειιεληθά, πρ. ε εληνιή ls -l, αληί ηεο ιέμεο "total" ζα εκθαλίζεη ηε ιέμε
LC_ALL=el_GR.UTF-8
"ζχλνιν". Δπίζεο, φια ηα κελχκαηα ζθαικάησλ ζα εκθαλίδνληαη ζηα
ειιεληθά (΢ρήκα 4.3).
export
Θέηεη σο ηξέρνλ ζχλνιν ραξαθηήξσλ ην UTF-8 θαη κελχκαηα ζηα αγγιηθά.
LC_ALL=en_US.UTF-8
export Θέηεη σο ηξέρνλ ζχλνιν ραξαθηήξσλ ην ISO-8859-7 θαη κελχκαηα ζηα
LC_ALL=el_GR ειιεληθά.

87
΢ρήκα 4.3: Αξηζηεξά: Δκθάληζε κελπκάησλ ζηα αγγιηθά. Γεμηά: Δκθάληζε κελπκάησλ ζηα ειιεληθά.

Απαηηείηαη πξνζνρή φηαλ αιιάδνπκε ηηο ξπζκίζεηο ηνπ ζπλφινπ ραξαθηήξσλ. Γελ αξθεί λα νξίζνπκε
ζην θέιπθνο πνην είλαη ην ζχλνιν ραξαθηήξσλ πνπ ρξεζηκνπνηνχκε, αιιά θαη ζηελ εθαξκνγή ηεξκαηηθνχ.
΢ην ΢ρήκα 4.4 θαίλεηαη κηα ηέηνηα πεξίπησζε. ΢ηελ αξηζηεξή εηθφλα ην ηεξκαηηθφ εκθαλίδεη "ISO-8859-7",
αιιά ην θέιπθνο ρξεζηκνπνηεί ην UTF-8. Θα πξέπεη λα ελεκεξσζεί ε πιεξνθνξία απηή θαη ζηελ εθαξκνγή
ηεξκαηηθνχ.

΢ρήκα 4.4: Παξάδεηγκα εκθάληζεο θεηκέλνπ κε ιάζνο θσδηθνπνίεζε.

Αληίζηνηρε ξχζκηζε απαηηείηαη λα γίλεη ζε φια ηα πξνγξάκκαηα πξνζνκνίσζεο ηεξκαηηθνχ είηε ζην
Linux, είηε ζηα Windows. Παξάδεηγκα, ην putty.exe πνπ είλαη πξφγξακκα πξνζνκνίσζεο ηεξκαηηθνχ θαη ssh
client, αλ θαη ιεηηνπξγεί ζε Microsoft Windows, απαηηεί αληίζηνηρε ξχζκηζε (΢ρήκα 4.5).

88
΢ρήκα 4.5: Ρύζκηζε ζπλόινπ ραξαθηήξσλ ζην putty.

4.3 Παξαδείγκαηα Χξήζεο Μπαιαληέξ


Έζησ φηη ζηνλ ηξέρνληα θαηάινγν εξγαζίαο ππάξρνπλ ηα αξρεία: file1.c, file2.c, file3.c, file4.c, file5.c,
file8.c, file3.h, file4.h, file2.out, test.c. Δάλ ζέινπκε λα αληηγξάςνπκε ηα αξρεία πνπ ην φλνκά ηνπο μεθηλά
απφ f ζε έλαλ άιινλ θαηάινγν, κπνξνχκε λα δψζνπκε ηελ εληνιή:

cp f* /media/USB_STICK

Δάλ ζέινπκε λα αληηγξάςνπκε φια ηα αξρεία κε ηελ θαηάιεμε .c θαη ηελ θαηάιεμε .h:

cp *.[ch] /media/USB_STICK

Δδψ πξέπεη λα ζεκεησζεί φηη:

 Οη ραξαθηήξεο κπαιαληέξ ηνπ θειύθνπο (shell wildcards) εξκελεύνληαη από ην θέιπθνο θαη
είλαη αλεμάξηεηνη ηεο εληνιήο πνπ ρξεζηκνπνηείηαη. Άξα, κπνξνύλ λα ρξεζηκνπνηεζνύλ κε
νπνηαδήπνηε εληνιή, κε ηνλ ίδην ηξόπν.

΢ηα παξαθάησ παξαδείγκαηα ρξεζηκνπνηνχληαη κπαιαληέξ κε ηηο εληνιέο ls θαη echo.

89
asidirop@aetos:~/tmp/os_wild$ ls -l *.c
-rw------- 2 asidirop conit 0 2008-10-01 10:15 file1.c
-rw------- 2 asidirop conit 0 2008-10-01 10:15 file2.c
-rw------- 2 asidirop conit 0 2008-10-01 10:15 file3.c
-rw------- 2 asidirop conit 0 2008-10-01 10:15 file4.c
-rw------- 2 asidirop conit 0 2008-10-01 10:15 file5.c
-rw------- 2 asidirop conit 0 2008-10-01 10:15 file8.c
-rw------- 2 asidirop conit 0 2008-10-01 10:15 test.c
asidirop@aetos:~/tmp/os_wild$ echo *.h
file3.h file4.h
asidirop@aetos:~/tmp/os_wild$ echo The .h files in cwd are: *.h
The .h files in cwd are: file3.h file4.h

΢ηελ πξψηε εληνιή, δίλνπκε σο φξηζκα ζηελ ls φια ηα αξρεία ησλ νπνίσλ ε θαηάιεμε είλαη ".c". ΢ηε
δεχηεξε εληνιή, δίλνληαη σο φξηζκα φια ηα νλφκαηα αξρείσλ ησλ νπνίσλ ε θαηάιεμε είλαη ".h". Ζ εληνιή
echo απιά εκθαλίδεη ηα νξίζκαηα πνπ ηεο δφζεθαλ, ζπλεπψο, απιά εκθαλίδνληαη ηα νλφκαηα αξρείσλ πνπ
ηαίξηαμαλ ζην κπαιαληέξ. Ζ ηξίηε εληνιή ρξεζηκνπνηεί ην ίδην κπαιαληέξ κε ηε δεχηεξε. Ζ δηαθνξά κε ηελ
πξνεγνχκελε είλαη φηη δίλνληαη ζηελ echo θαη άιια νξίζκαηα (ιέμεηο). Ζ εληνιή echo πξνθαλψο ζα
εκθαλίζεη φια ηα νξίζκαηα πνπ ηεο δφζεθαλ, θαη επνκέλσο ην απνηέιεζκά ηεο ζα είλαη ην "The .h files in
cwd are: file3.h file4.h".

 ΢ε αληίζεζε κε ην UNIX, ην DOS δελ ππνζηεξίδεη ραξαθηήξεο κπαιαληέξ (wildcards). ΢ε


κεξηθέο εληνιέο, όκσο, ρξεζηκνπνηνύληαη (πρ. dir *.exe). H εξκελεία ηνπο εμαξηάηαη από ηελ
θάζε εληνιή. ΢ην πξνεγνύκελν παξάδεηγκα ε εληνιή dir εξκήλεπζε ην *.

 ΢ηα Microsoft Windows ππάξρεη ε δπλαηόηεηα ρξήζεο κπαιαληέξ θαηά ηελ αλαδήηεζε
αξρείσλ κέζα από ηνλ δηαρεηξηζηή αξρείσλ, θαζώο επίζεο θαη από ην Microsoft Power
Shell.

Καηά ηε ρξήζε κηαο αλαθνξάο ζε αξρείν κε κπαιαληέξ, εάλ δελ βξεζεί αληηζηνηρία κε θάπνην φλνκα
αξρείνπ, ηφηε νη ραξαθηήξεο κπαιαληέξ (wildcards) δελ «κεηαθξάδνληαη» απφ ην θέιπθνο. ΢ην παξαθάησ
παξάδεηγκα, ε πξψηε εληνιή πεξηιακβάλεη ην "*.x". Γελ βξίζθεηαη, φκσο, θάπνην αξρείν κε απηφ ην φλνκα.
΢πλεπψο, ην θέιπθνο δελ κπνξεί λα αληηθαηαζηήζεη ην κπαιαληέξ κε θάηη άιιν θαη ην "*.x" παξακέλεη φπσο
είλαη. Ζ εληνιή echo ζα ιάβεη σο φξηζκα ηε ζπκβνινζεηξά "*.x" θαη απιά ζα ηελ εθηππψζεη. Γελ ζα
εκθαληζηεί θαλέλα κήλπκα ζθάικαηνο. Αληηζέησο, ζηελ ηειεπηαία εληνιή πνπ ρξεζηκνπνηείηαη πάιη ην "*.x",
ε εληνιή ζα εκθαλίζεη κήλπκα ζθάικαηνο. Απηφ ζπκβαίλεη δηφηη ε εληνιή cp ζα ιάβεη σο πξψην φξηζκα ην
"*.x" θαη ζα ςάμεη λα βξεη ην αξρείν κε απηφ ην φλνκα γηα λα ην αληηγξάςεη. Γελ ζα βξεη αξρείν κε φλνκα
"*.x" θαη άξα, ζα καο ελεκεξψζεη γηα ην ζθάικα.

asidirop@aetos:~/tmp/os_wild$ echo *.x


*.x
asidirop@aetos:~/tmp/os_wild$ echo *.c
file1.c file2.c file3.c file4.c file5.c file8.c test.c
asidirop@aetos:~/tmp/os_wild$ cp *.c /tmp
asidirop@aetos:~/tmp/os_wild$ cp *.x /tmp
cp: cannot stat `*.x': No such file or directory

90
Αθφκε έλα παξάδεηγκα ζην νπνίν κνηάδνπλ νη εληνιέο λα κελ έρνπλ ληεηεξκηληζηηθή ζπκπεξηθνξά
είλαη ην παξαθάησ: Έζησ φηη ζε έλαλ θάθειν πεξηέρνληαη ηα αξρεία "a" θαη "b" ηα νπνία ζέινπκε λα ηα
αληηγξάςνπκε θάπνπ αιινχ. Ζ εληνιή γηα λα αληηγξάςνπκε φια ηα αξρεία ζηνλ θάθειν /tmp είλαη ε "cp *
/tmp". Έζησ, φκσο, φηη θαηά ηελ πιεθηξνιφγεζή ηεο παηήζακε "Enter" πξηλ απφ ην /tmp. Άξα, γξάςακε
ηελ εληνιή "cp *". Παξαδφμσο νχηε ην θέιπθνο εκθαλίδεη θάπνην κήλπκα ζθάικαηνο, αιιά νχηε θαη ε
εληνιή cp παξφιν πνπ παξαιείςακε ηνλ θάθειν πξννξηζκνχ. Ση ζπλέβε;

asidirop@aetos:~/tmp/os_wild2$ ls -l
total 8
-rw------- 1 asidirop conit 12 2008-10-01 10:34 a
-rw------- 1 asidirop conit 24 2008-10-01 10:34 b
asidirop@aetos:~/tmp/os_wild2$ cp * /tmp
asidirop@aetos:~/tmp/os_wild2$ cp *
asidirop@aetos:~/tmp/os_wild2$

Γίλνληαο ηελ εληνιή "cp *", ην "*" κεηαθξάδεηαη ζηα νλφκαηα αξρείσλ ηνπ ηξέρνληνο θαηαιφγνπ,
δειαδή ζε "a b". ΢πλεπψο, ε εληνιή πνπ εθηειέζηεθε ήηαλ ε:

cp a b

Ζ παξαπάλσ εληνιή δελ αληηζηνηρεί ζηελ αληηγξαθή ηνπ "a" θαη "b" ζε έλαλ θάθειν πξννξηζκνχ,
αιιά ζηελ αληηγξαθή ηνπ "a" επάλσ ζην "b". Έηζη, ην αξρείν "b" αληηθαζίζηαηαη απφ ην "a".
Δάλ ζηνλ ίδην θαηάινγν είρακε ηξία αξρεία (αληί δπν), έζησ ηα "a", "b" θαη "c", ηφηε ην απνηέιεζκα
ηεο ίδηαο εληνιήο ζα ήηαλ δηαθνξεηηθφ

asidirop@aetos:~/tmp/os_wild2$ ls -l
total 12
-rw------- 2 asidirop conit 12 2008-10-01 10:34 a
-rw------- 2 asidirop conit 12 2008-10-01 10:35 b
-rw------- 1 asidirop conit 38 2008-10-01 10:40 c
asidirop@aetos:~/tmp/os_wild2$ cp *
cp: target `c' is not a directory

Γηαηί, ζε απηήλ ηελ πεξίπησζε, εκθαλίδεηαη κήλπκα ζθάικαηνο θαη δελ γίλεηαη αληηγξαθή φπσο πξηλ;
Ο ρεηξηζκφο απφ ην θέιπθνο παξακέλεη ν ίδηνο. Αληηθαζηζηά ην "*" κε ηα νλφκαηα αξρείσλ πνπ ηαηξηάδνπλ.
΢ε απηήλ ηελ πεξίπησζε, ηα "a", "b" θαη "c". ΢πλεπψο, ε εληνιή κεηαθξάδεηαη ζε:

cp a b c

Όηαλ δίλνληαη ζηελ εληνιή cp πάλσ απφ δπν νξίζκαηα, ηφηε ηα πξψηα λ-1 είλαη αξρεία πεγήο θαη ην
ηειεπηαίν πξέπεη λα είλαη θαηάινγνο πξννξηζκνχ, ψζηε λα αληηγξάςεη φια ηα αξρεία πεγή κέζα ζηνλ
θαηάινγν. Όκσο, ην "c" είλαη αξρείν θαη φρη θαηάινγνο. Ζ εληνιή cp δελ κπνξεί λα αληηγξάςεη δπν αξρεία ζε
έλα ηξίην θαη εκθαλίδεη κήλπκα ζθάικαηνο φηη ν πξννξηζκφο "c" δελ είλαη θαηάινγνο.
Δάλ θαηά ηχρε, ζηνλ ηξέρνληα θαηάινγν ππήξρε θαη ππνθαηάινγνο, ηνπ νπνίνπ ην φλνκα έπνληαλ
αιθαβεηηθά ησλ νλνκάησλ φισλ ησλ αξρείσλ, παξάδεηγκα αξρεία κε νλφκαηα "a", "b", "c" θαη έλαο
θαηάινγνο κε φλνκα "z", ηφηε ε ζπκπεξηθνξά ηεο ίδηαο εληνιήο ζα ήηαλ πάιη δηαθνξεηηθή:

91
asidirop@aetos:~/tmp/os_wild2$ ls -l
total 12
-rw------- 2 asidirop conit 12 2008-10-01 10:34 a
-rw------- 2 asidirop conit 12 2008-10-01 10:35 b
-rw------- 1 asidirop conit 38 2008-10-01 10:40 c
drwx------ 2 asidirop conit 6 2008-10-01 10:43 z
asidirop@aetos:~/tmp/os_wild2$ cp *
asidirop@aetos:~/tmp/os_wild2$ ls -l
total 12
-rw------- 2 asidirop conit 12 2008-10-01 10:34 a
-rw------- 2 asidirop conit 12 2008-10-01 10:35 b
-rw------- 1 asidirop conit 38 2008-10-01 10:40 c
drwx------ 2 asidirop conit 30 2008-10-01 10:44 z
asidirop@aetos:~/tmp/os_wild2$ ls -l z/
total 12
-rw------- 1 asidirop conit 12 2008-10-01 10:44 a
-rw------- 1 asidirop conit 12 2008-10-01 10:44 b
-rw------- 1 asidirop conit 38 2008-10-01 10:44 c

Γίλνληαο cp *, νπζηαζηηθά ε εληνιή κεηαθξάζηεθε ζε

cp a b c z

ην νπνίν ζεκαίλεη: «αληίγξαςε ηα αξρεία "a", "b" θαη "c" ζηνλ θαηάινγν "z"».

΢πλήζε ΢θάικαηα
Έζησ φηη ζε έλαλ θαηάινγν ππάξρνπλ ηα αξρεία: file1.txt, file2.txt, file9.txt, file10.txt, file15.txt, file20.txt,
file30.txt θαη ζέινπκε λα αληηγξάςνπκε ηα αξρεία κε ηνπο αξηζκνχο απφ 10 έσο θαη 30, αιιά φρη ηα file1.txt ,
file2.txt, file9.txt. Έλα ζπλεζηζκέλν ζθάικα είλαη λα ρξεζηκνπνηήζνπκε ηελ έθθξαζε: file[10-30].txt, γηα
παξάδεηγκα cp file[10-30].txt /tmp.

 Μέζα ζηηο αγθύιεο νξίδνληαη ραξαθηήξεο θαη όρη αξηζκνί.

΢πλεπψο, ην [10-30] ζα εξκελεπηεί απφ ην θέιπθνο σο νη ραξαθηήξεο: "1","0"-"3","0",


δειαδή νη ραξαθηήξεο ("1", "0", "1", "2", "3", "0"). ΢πλεπψο, ε πξνεγνχκελε εληνιή ζα
αληηγξάςεη ηα αξρεία file1.txt θαη file2.txt πνπ είλαη απηά ηα νπνία δελ ζέιακε λα αληηγξάςνπκε.
Έλαο ζσζηφο ηξφπνο γηα λα αλαθεξζνχκε ζηα αξρεία file10.txt, file15.txt, file20.txt, file30.txt είλαη:

cp file[12][0-9].txt file30.txt /tmp

Σν [12][0-9] ζεκαίλεη λα ππάξρεη είηε ην "1", είηε ην "2" θαη κεηά αθφκε έλαο αξηζκφο απφ "0"
έσο "9". Με απηφλ ηνλ ηξφπν θαιχπηνληαη νη ζπλδπαζκνί 10, 11, 12, ..., 19, 20, 21,...,29. Απηφ πνπ δελ
θαιχπηεηαη είλαη ην "30", ην νπνίν θαη πξέπεη λα ην αλαθέξνπκε μερσξηζηά.

92
Αλ ρξεζηκνπνηνχζακε ην file[123][0-9].txt, ηφηε ζα θαιχπηακε ηνπο ζπλδπαζκνχο 10-39 πνπ είλαη
έμσ απφ ηα φξηα πνπ ζα ζέιακε.

4.3.1 Μπαιαληέξ θαη Δηζαγσγηθά


Σν θέιπθνο δελ εξκελεχεη ηνπο ραξαθηήξεο κπαιαληέξ, φηαλ απηνί βξίζθνληαη κέζα ζε εηζαγσγηθά, είηε
κνλά (') είηε δηπιά ("). Πεξηζζφηεξα γηα ηελ ρξήζε ησλ εηζαγσγηθψλ θαη ηελ ζεκαζία ηνπο ζα πνχκε
ζην Τπνθεθάιαην 8.3. ΢ην παξαθάησ παξάδεηγκα, ζηελ πξψηε εληνιή, ην *.h εξκελεχεηαη απφ ην θέιπθνο
θαη αληηθαζίζηαηαη κε ηα νλφκαηα αξρείσλ πνπ ηαηξηάδεη. ΢ηηο δπν επφκελεο, φκσο, επεηδή βξίζθεηαη κέζα ζε
εηζαγσγηθά, δελ εξκελεχεηαη θαη παξακέλεη σο έρεη.

asidirop@aetos:~/tmp/os_wild$ echo The .h files in cwd are: *.h


The .h files in cwd are: file3.h file4.h
asidirop@aetos:~/tmp/os_wild$ echo "The .h files in cwd are: *.h"
The .h files in cwd are: *.h
asidirop@aetos:~/tmp/os_wild$ echo 'The .h files in cwd are: *.h'
The .h files in cwd are: *.h
asidirop@aetos:~/tmp/os_wild$ ls –l "*.c"
ls: cannot access *.c: No such file or directory

Με ηε ρξήζε ηεο echo, ε κε εξκελεία ηνπ κπαιαληέξ δελ νδεγεί ζε θάπνην πξφβιεκα. Απιά
εθηππψλεηαη ζηελ νζφλε. Με ηελ ρξήζε ηεοls, φκσο, (ηέηαξηε εληνιή) ε κε εξκελεία ηνπ, νδεγεί ηελ ls λα
εκθαλίζεη κήλπκα ζθάικαηνο. Απηφ δηφηη ζηελ ls δελ πεξλνχλ σο νξίζκαηα ηα νλφκαηα αξρείσλ, αιιά
πεξλάεη σο φξηζκα ε ζπκβνινζεηξά "*.c". H ls ςάρλεη λα βξεη έλα αξρείν κε απηφ ην φλνκα. Γελ βξίζθεη
θάπνην θαη ζπλεπψο εκθαλίδεη κήλπκα ζθάικαηνο. Δάλ ζηνλ ηξέρνληα θαηάινγν ππήξρε αξρείν κε ην φλνκα
"*.c", ηφηε ε ls ζα εκθάληδε πιεξνθνξίεο γηα απηφ ην αξρείν.

4.3.2 Μπαιαληέξ θαη Γηαδξνκέο


Οη ραξαθηήξεο κπαιαληέξ κπνξνχλ λα απνηειέζνπλ θαη ηκήκα κηαο δηαδξνκήο. Έηζη κπνξνχκε λα
αλαθεξζνχκε ζε αξρεία πνπ βξίζθνληαη ζε δηαθνξεηηθνχο θαθέινπο:

asidirop@aetos:~/tmp/os_wild$ echo ~/t*


/home/staff/ektaktoi/asidirop/tcp3.txt
/home/staff/ektaktoi/asidirop/test
/home/staff/ektaktoi/asidirop/tests
/home/staff/ektaktoi/asidirop/tmp
/home/staff/ektaktoi/asidirop/ttt

Γηα ηελ παξαπάλσ εληνιή ην θέιπθνο, πξψηα ζα εξκελεχζεη ηνλ εηδηθφ


ραξαθηήξα "~" (βιέπε Παξάγξαθν 3.4.1) θαη κεηά ζα ηνλ αληηθαηαζηήζεη κε
ην /home/staff/ektaktoi/asidirop. Έπεηηα, ζα δεκηνπξγεζεί ε έθθξαζε
/home/staff/ektaktoi/asidirop/t* ζχκθσλα κε ηελ νπνία ζα αλαδεηήζεη γηα αξρεία ησλ νπνίσλ
ην φλνκα μεθηλά απφ "t" κέζα ζηνλ ζπγθεθξηκέλν θάθειν. Δθφζνλ βξεη ηα αξρεία "tcp3.txt",
"test", "tests", "tmp", "ttt" ζα αληηθαηαζηήζεη ην "t*" κε ηα νλφκαηα αξρείσλ, βάδνληαο,
φκσο, πξηλ απφ ην θαζέλα θαη ηε Γηαδξνκή πνπ είρε ρξεζηκνπνηεζεί. Έηζη ε δηαδξνκή επαλαιακβάλεηαη γηα
θάζε αξρείν.

93
Με ηνλ ίδην ηξφπν ζπκπεξηθέξεηαη ην θέιπθνο θαη φηαλ ρξεζηκνπνηνχληαη ζρεηηθέο δηαδξνκέο. Όπσο
θαίλεηαη ζην παξαθάησ παξάδεηγκα, ε δηαδξνκή "../../" ζα επαλαιεθζεί γηα θάζε αξρείν. Μάιηζηα, ζα
επαλαιεθζεί σο ζρεηηθή δηαδξνκή, φπσο αθξηβψο δηαηππψζεθε ζηελ εληνιή.

asidirop@aetos:~/tmp/os_wild$ echo ../../t*


../../tcp3.txt ../../test ../../tests ../../tmp ../../ttt
asidirop@aetos:~/tmp/os_wild$ echo ../../t* ../ο*
../../tcp3.txt ../../test ../../tests ../../tmp ../../ttt
../os_wild

Πξνθαλψο, κέζα ζηελ ίδηα εληνιή, κπνξεί λα γίλεη ρξήζε πνιιψλ εθθξάζεσλ κε κπαιαληέξ φπσο
ζηε δεχηεξε εληνιή ηνπ πξνεγνχκελνπ παξαδείγκαηνο.
Ζ ρξήζε ησλ ραξαθηήξσλ κπαιαληέξ απνθηά αθφκε κεγαιχηεξν ελδηαθέξνλ, φηαλ ρξεζηκνπνηνχληαη
γηα λα δεκηνπξγήζνπλ δηαδξνκέο.

asidirop@aetos:~/tmp/os_wild$ echo /*/*/*cnf


/etc/mysql/debian.cnf /etc/mysql/my.cnf /etc/ssl/openssl.cnf
asidirop@aetos:~/tmp/os_wild$ echo /*/m*/*cnf
/etc/mysql/debian.cnf /etc/mysql/my.cnf

΢ηελ πξψηε εληνιή ηνπ παξαδείγκαηνο, ρξεζηκνπνηνχκε ην "*" σο ηκήκα Γηαδξνκήο πνπ ζεκαίλεη
νπνηνδήπνηε ηκήκα κνλνπαηηνχ. Ζ ζπγθεθξηκέλε εληνιή πξαθηηθά ζα καο δψζεη φια ηα νλφκαηα αξρείσλ
πνπ ηειεηψλνπλ ζε "cnf" θαη βξίζθνληαη δπν επίπεδα καθξηά απφ ηε ξίδα ηνπ ζπζηήκαηνο αξρείσλ (root
directory). Έηζη, εκθαλίδνληαη ηα "debian.cnf", "my.cnf" θαη "openssl.cnf" ηα νπνία, φκσο, βξίζθνληαη ζε
δηαθνξεηηθνχο θαηαιφγνπο. Όινη νη θαηάινγνη, φκσο, βξίζθνληαη ζε απφζηαζε δπν επηπέδσλ απφ ηε ξίδα.
Πξνθαλψο, ην θέιπθνο εκθαλίδεη ηηο δηαδξνκέο νη νπνίεο παξήρζεζαλ.
΢ηε δεχηεξε εληνιή ηνπ παξαδείγκαηνο, δεκηνπξγνχκε παξφκνηεο δηαδξνκέο, κφλν πνπ επηπιένλ
ππάξρεη ν πεξηνξηζκφο φηη ην δεχηεξν ηκήκα κνλνπαηηνχ μεθηλά απφ 'm". Έηζη, δελ ζα παξαρζεί ε δηαδξνκή
"/etc/ssl/openssl.cnf", ηεο νπνίαο ην δεχηεξν ηκήκα ζην κνλνπάηη δελ μεθηλά απφ "m", αιιά κφλν νη
δηαδξνκέο "/etc/mysql/debian.cnf" θαη "/etc/mysql/my.cnf".

4.4 Αζθήζεηο γηα εμάζθεζε

΢ηόρνο
Δμνηθείσζε κε ηνλ ρεηξηζκφ αξρείσλ θαη θαηαιφγσλ κε ραξαθηήξεο κπαιαληέξ.

Άζθεζε 1
Γεκηνπξγήζηε ζηνλ ηξέρνληα θαηάινγν ηα παξαθάησ αξρεία:

hello.dat hello.doc hello.exe hello1.exe


hello2.exe Hello.dat Hello.exe hello12.c
helloA.exe helloAexe hello10.exe

Μπνξείηε λα ηα δεκηνπξγήζεηε φια καδί ρξεζηκνπνηψληαο ηελ εληνιή:

94
touch hello.dat hello.doc hello.exe hello1.exe hello2.exe
Hello.dat Hello.exe helloA.exe helloAexe hello10.exe hello12.c

Να βξείηε θαη λα εμεγήζεηε ηα απνηειέζκαηα ησλ εληνιψλ :

1. ls –l hello.dat hello[0-9].exe
2. ls –l *.exe
3. ls –l *exe
4. ls –l h*
5. ls –l H*
6. ls –l H*exe
7. ls –l hello[2-15].*

 Ση δηαθνξά έρνπλ νη εληνιέο (2) θαη (3);


 Ζ εληνιή (7) εκθαλίδεη ηα αξρεία πνπ ζα πεξηκέλαηε;

Άζθεζε 2
Γεκηνπξγήζηε έλα sub-directory θάησ απφ ην home directory ζαο κε φλνκα ηεο επηινγήο ζαο. ΢ηε ζπλέρεηα
κέζα ζε απηφ ην sub-directory δεκηνπξγήζηε κε ηελ εληνιή touch ηα παξαθάησ αξρεία:

Feb96 jan12.02 jan19.02 jan26.02 jan5.02


Jan95 jan96 jan97 jan98 mar98
memo1 memo10 memo2 memo2.sv memo4

Να βξείηε ην απνηέιεζκα ησλ παξαθάησ εληνιψλ :

1. ls *
2. ls *[!0-9]
3. ls m[a-df-z]*
4. ls [A-Z]*
5. ls jan*
6. ls *.*
7. ls ?????
8. ls *02
9. ls jan?? feb?? mar??
10. ls [fjm][ae][bnr]*
11. echo jan*
12. ls –l jan*
13. echo january*
14. ls –l january*

Υξεζηκνπνηψληαο κπαιαληέξ εκθαλίζηε ηα αξρεία (κε ηελ ls) πνπ ην φλνκά ηνπο μεθηλάεη κε "memo"
θαη ζηε ζπλέρεηα έρνπλ έλαλ αξηζκφ απφ ην 3 έσο ην 20 (άξα, ζέινπκε λα εκθαληζηνχλ ηα νλφκαηα memo4,
memo10).
 Ση παξαηεξείηε γηα ηηο εληνιέο (11)-(14);
 Ση παξαηεξείηε θαηά ηελ εθηέιεζε ηεο (4);

95
Άζθεζε 3
Θεσξήζηε ηα αξρεία πνπ ππάξρνπλ ζηε 3ε ζηήιε ηνπ παξαθάησ πίλαθα. Πνηα απφ ηα νλφκαηα απηά
αληηζηνηρνχλ ζηελ αληίζηνηρε έθθξαζε πνπ ππάξρεη ζηελ 2ε ζηήιε;

Πίλαθαο 4.5: Οδεγίεο Άζθεζεο

A/A Έθθξαζε κε κπαιαληέξ Αξρεία πνπ ππάξρνπλ ζηνλ ηξέρνληα θαηάινγν


1 gn*.1 gnu.1, gn.1, gneiss.1, gn/x.1
2 [A-Z]*[!0-9] A2q, Maria, George, baggelis, Bag10
3 *.[acAC] File.a, file.C, .a, .file.
4 */doit* one/doit, three/doit.h, two/doit.c, doit

Γεκηνπξγήζηε ηα παξαπάλσ αξρεία ζε θαηαιφγνπο ηεο επηινγήο ζαο θαη ειέγμηε πνηα απφ απηά ζα
αληηζηνηρεζνχλ ζε θάζε έθθξαζε ρξεζηκνπνηψληαο ηελ εληνιή echo. ΢ηελ πεξίπησζε (4) γηα ην one/doit
ελλνείηαη φηη ην αξρείν doit βξίζθεηαη ζε έλαλ θαηάινγν κε ην φλνκα "one" (O θαηάινγνο "one" βξίζθεηαη
ζηνλ ηξέρνληα). Αληίζηνηρα θαη νη ππφινηπνη:

. .
├── gn ├── doit
│ └── x.1 ├── one
├── gn.1 │ └── doit
├── gneiss.1 ├── three
└── gnu.1 │ └── doit.h
└── two
└── doit.c

Ση παξαηεξείηε ζηηο πεξηπηψζεηο (3) θαη (4) ; Δίλαη ηα απνηειέζκαηα αλακελφκελα;

Άζθεζε 4
΢ε απηήλ ηελ άζθεζε πξέπεη λα εξγαζηείηε ζηνλ aetos.it.teithe.gr κε απνκαθξπζκέλε πξφζβαζε. ΢ε
πεξίπησζε πνπ δελ δηαζέηεηε ινγαξηαζκφ ζηνλ ζπγθεθξηκέλν ππνινγηζηή, θαηεβάζηε ην
αξρείν: http://aetos.it.teithe.gr/~asidirop/OSIntroBook/OSIntro.zip θαη απνζεθεχζηε ην ζε έλαλ θαηάινγν ηεο
επηινγήο ζαο (πρ: /tmp). Μεηά, δψζηε ηηο εληνιέο

asidirop@antonis-PC:~$ cd /tmp
asidirop@antonis-PC:/tmp$ unzip OSIntro.zip

΢ηελ απίζαλε πεξίπησζε πνπ δελ είλαη εγθαηεζηεκέλε ε εληνιή unzip, κπνξείηε λα ηελ
εγθαηαζηήζεηε ρξεζηκνπνηψληαο ηελ εθαξκνγή Γηαρείξηζεο Πξνγξακκάησλ ηεο δηαλνκήο πνπ
ρξεζηκνπνηείηε. Δάλ ρξεζηκνπνηείηε debian ή θάπνηα παξαιιαγή ηνπ (ubuntu, kali, θ.ά.), κπνξείηε λα θάλεηε
εγθαηάζηαζε ζηελ εληνιή unzip κε ηελ εληνιή:

sudo apt-get install unzip

96
Δλαιιαθηηθά, κπνξείηε λα θαηεβάζεηε ην
αξρείν: http://aetos.it.teithe.gr/~asidirop/OSIntroBook/OSIntro.tar.gz θαη λα ην απνζπκπηέζεηε κε ηελ εληνιή:

asidirop@antonis-PC:~$ cd /tmp
asidirop@antonis-PC:/tmp$ tar xvfz OSIntro.tar.gz

Σν tar θαη gunzip (πνπ είλαη ηα πξνγξάκκαηα ρεηξηζκνχ ησλ αξρείσλ tar θαη gz) πάληα εγθαζηζηψληαη
ζε έλα ζχζηεκα Unix/Linux, δηφηη απνηεινχλ ηελ παξαδνζηαθή κέζνδν γηα ζπκπίεζε θαη αληαιιαγή αξρείσλ
θαη θαθέισλ.
1. Γεκηνπξγήζηε κέζα ζην home directory ζαο έλαλ θαηάινγν κε φλνκα lab33. Γηα θάζε βήκα ηεο
παξνχζαο άζθεζεο λα δεκηνπξγείηε θαη έλαλ λέν ππνθαηάινγν ζηνλ lab33 (πρ: step3, step4, ...)

2. Με ηελ εληνιή tree, δείηε ηα πεξηερφκελα ηνπ θαηαιφγνπ ~asidirop/public/OSIntro/Lab3_files

3. Απφ ηνλ παξαπάλσ θαηάινγν (Lab3_files), αληηγξάςηε ζηνλ step3, φια ηα αξρεία κε ηελ θαηάιεμε .txt
πνπ ην φλνκά ηνπο δελ μεθηλάεη απφ θεθαιαίν γξάκκα (KAI ηα αξρεία 3.txt θαη 8f.txt δελ μεθηλνχλ κε
θεθαιαίν γξάκκα).

4. Απφ ην παξαπάλσ δέληξν (Lab3_files) αληηγξάςηε ζηνλ step4 φια ηα αξρεία κε ηελ θαηάιεμε .txt πνπ
βξίζθνληαη ζε έλαλ ππνθαηάινγν πνπ ην φλνκά ηνπ μεθηλάεη απφ "d".

5. Απφ ηνλ παξαπάλσ θαηάινγν (Lab3_files) αληηγξάςηε ζηνλ step5 φια ηα αξρεία πνπ ην φλνκά ηνπο
μεθηλάεη κε "file", κεηά ππάξρεη θάπνηνο αξηζκφο (1 ή πεξηζζφηεξα αξηζκεηηθά ςεθία) θαη ηέινο ε
θαηάιεμε .txt

6. Απφ ηνλ παξαπάλσ θαηάινγν αληηγξάςηε ζηνλ step6 φια ηα αξρεία πνπ ην φλνκά ηνπο απνηειείηαη απφ
αθξηβψο 5 ραξαθηήξεο (file1, file2, ..)

7. Απφ ηνλ παξαπάλσ θαηάινγν αληηγξάςηε ζηνλ step7 ηα αξρεία file1 θαη file2. Κάληε cd ζηνλ step7.
Διέγμηε ηα πεξηερφκελα ηνπ θαη δείηε ηα πεξηερφκελα ηνπ θάζε αξρείνπ.
α) Γψζηε ηελ εληνιή:
cp *
Ση ζπλέβε; Γελ ζα έπξεπε ε εληνιή λα καο εκθαλίζεη κήλπκα ζθάικαηνο εθφζνλ δελ έρνπκε νξίζεη
θαηάινγν πξννξηζκνχ γηα ηελ αληηγξαθή;
β) Γψζηε ηελ εληνιή:
mv *
Ση ζπλέβε; Διέγμηε ηα πεξηερφκελα ηνπ θαηαιφγνπ θαη ησλ αξρείσλ.
γ) Γεκηνπξγήζηε έλαλ θαηάινγν (κέζα ζηνλ step7) κε ην φλνκα zip. Υσξίο λα αιιάμεηε θαηάινγν,
δψζηε ηελ εληνιή:
cp *
Ση ζπλέβε; Διέγμηε ηα πεξηερφκελα ηνπ θαηαιφγνπ θαη ησλ αξρείσλ.

4.5 Αλαθνξέο
[1] Brian Fox, Chet Ramey. GNU Bash, General Commands Manual.
[2] ISO/IEC 8859-1:1998 - 8-bit single-byte coded graphic character sets, Part 1: Latin alphabet No. 1
(draft dated February 12, 1998, published April 15, 1998)
[3] ISO/IEC 8859-7:1999 - 8-bit single-byte coded graphic character sets, Part 7: Latin/Greek alphabet
(draft dated June 10, 1999; superseded by ISO/IEC 8859-7:2003, published October 10, 2003)
[4] Joel Klecker, Alastair McKinstry. Debian GNU/Linux system, Reference Manual, locale command.

97
Κεθάιαην 5

5 Άδεηεο πξόζβαζεο θαη αζθάιεηα αξρείσλ

5.1 Άδεηεο πξόζβαζεο


Σα ζπζηήκαηα αξρείσλ πνπ βαζίδνληαη ζην UNIX, απφ ηελ αξρή δεκηνπξγίαο ηνπ UNIX είραλ απμεκέλεο
δπλαηφηεηεο ζε ζρέζε κε ηελ αζθάιεηα ησλ δεδνκέλσλ, εθφζνλ επξφθεηην γηα έλα ιεηηνπξγηθφ ζχζηεκα
πνιιαπιψλ ρξεζηψλ (multi user). Δίλαη πξνθαλέο φηη ζα έπξεπε λα δίλεηαη ε δπλαηφηεηα ζηνπο ρξήζηεο λα
κπνξνχλ λα πξνζηαηεχνπλ ηα πξνζσπηθά ηνπο αξρεία θαζψο θαη ζηνλ δηαρεηξηζηή ηνπ ζπζηήκαηνο λα κπνξεί
λα πξνζηαηεχζεη ηα αξρεία ηνπ ζπζηήκαηνο απφ ηνπο ρξήζηεο. Γηα απηφλ ηνλ ζθνπφ ππάξρεη ε έλλνηα ησλ
αδεηψλ ρξήζεο ησλ αξρείσλ. Οη άδεηεο πξφζβαζεο νξίδνληαη γηα φινπο ηνπο ηχπνπο ησλ αξρείσλ πνπ
αλαθέξζεθαλ ζην Τπνθεθάιαην 3.5. Απηφ πνπ καο ελδηαθέξεη βέβαηα ζε πξψηε θάζε είλαη νη άδεηεο
πξφζβαζεο γηα θαλνληθά αξρεία (regular files) θαη θαηαιφγνπο (directories).

 Οη άδεηεο πξόζβαζεο γηα έλα αξρείν «νξίδνπλ» ηη κπνξεί λα γίλεη κε ηα πεξηερόκελα ηνπ
αξρείνπ.

 Οη άδεηεο πξόζβαζεο γηα έλαλ θαηάινγν «νξίδνπλ» ηη κπνξεί λα γίλεη κε ηα πεξηερόκελα ηνπ
θαηαιόγνπ, παξαδείγκαηνο ράξηλ αλ κπνξεί ν ρξήζηεο λα πξνζζέζεη ή λα δηαγξάςεη αξρεία.

Όπσο θαίλεηαη ζην ΢ρήκα 5.1, κηα απφ ηηο πιεξνθνξίεο πνπ καο εκθαλίδεη ε εληνιή "ls -l" είλαη
νη άδεηεο πξφζβαζεο. ΢ηελ πξψηε ζηήιε, εθηφο απφ ηνλ ηχπν ηνπ αξρείνπ, ππάξρνπλ αθφκε ελλέα
ραξαθηήξεο νη νπνίνη εθθξάδνπλ ηηο άδεηεο πξφζβαζεο ηνπ θάζε αξρείνπ. Οη άδεηεο πξφζβαζεο, βέβαηα, φπσο
ζα δνχκε παξαθάησ, έρνπλ λφεκα καδί κε ηελ πιεξνθνξία ηδηνθηεζίαο ηνπ θάζε αξρείνπ (ρξήζηεο θαη
νκάδα).

asidirop@asidirop:/tmp$ ls -l
total 84
-rw-r--r-- 1 asidirop asidirop 45539 Feb 28 19:32 a.xml
-rw------- 1 asidirop asidirop 0 Mar 5 10:06 bib2html513cd3
-rw-r--r-- 1 asidirop asidirop 148 Mar 5 10:06 bib2html513cd3.aux
-rw-r--r-- 1 asidirop asidirop 1118 Mar 5 10:06 bib2html513cd3.bbl
drwx------ 2 asidirop asidirop 4096 Jan 1 1970 orbit-asidirop

Τύπνο Σύλδεζκνη Ιδηνθηήηξηα Ώξα


Αξρείνπ Οκάδα Τξνπνπνίεζεο
Αξρείνπ
Άδεηεο Ιδηνθηήηεο Μέγεζνο Όλνκα
πξόζβαζεο Αξρείνπ Αξρείνπ αξρείνπ

΢ρήκα 5.1: Οη ζηήιεο ηεο ls -l.

99
Ο ζπκβνιηζκφο ν νπνίνο αθνινπζείηαη γηα ηελ αλαπαξάζηαζε ησλ αδεηψλ ρξήζεο (κε ηνλ νπνίν
ζπκκνξθψλεηαη θαη ε εληνιή "ls -l") απνηειείηαη απφ ελλέα ραξαθηήξεο. Οπζηαζηηθά απηνί νη ελλέα
ραξαθηήξεο ρσξίδνληαη ζε ηξεηο ηξηάδεο ραξαθηήξσλ. Κάζε ηξηάδα αθνξά θαη δηαθνξεηηθφ “target” ζην νπνίν
αλαθέξεηαη. Έηζη (΢ρήκα 5.2):

1. Ζ πξψηε ηξηάδα αθνξά ηηο άδεηεο ρξήζεο πνπ έρνπλ νξηζηεί γηα ηνλ ηδηνθηήηε ηνπ αξρείνπ
(ζπκβνιίδεηαη σο “user”).
2. Ζ δεχηεξε ηξηάδα αθνξά ηηο άδεηεο ρξήζεο πνπ έρνπλ νξηζηεί γηα ηελ νκάδα ηδηνθηεζίαο ηνπ αξρείνπ
(ζπκβνιίδεηαη σο “group”).
3. Ζ ηξίηε ηξηάδα αθνξά φιεο ηηο ππφινηπεο πεξηπηψζεηο (ζπκβνιίδεηαη σο “others”).

– Τνπ ηδηνθηήηε (user – owner)


– Τεο νκάδαο ηδηνθηεζίαο (group)
– Όιωλ ηωλ ππνινίπωλ (others)

rwx r-x r--

΢ρήκα 5.2: Οη νκάδεο αδεηώλ ρξήζεο.


24
Ζ θάζε ηξηάδα απνηειείηαη απφ ηξεηο ραξαθηήξεο, φπσο ζην ΢ρήκα 5.3. Γηα θάζε νκάδα δηθαησκάησλ
(ηξηάδα) νξίδνληαη ηξία δηθαηψκαηα:
 Γηθαίσκα αλάγλσζεο (read) πνπ ζπκβνιίδεηαη κε ην “r”.
 Γηθαίσκα εγγξαθήο (write) πνπ ζπκβνιίδεηαη κε ην “w”.
 Γηθαίσκα εθηέιεζεο (execute) πνπ ζπκβνιίδεηαη κε ην “x”.

– Δηθαίωκα αλάγλωζεο (read “r”)


– Δηθαίωκα εγγξαθήο (write “w”)
– Δηθαίωκα εγγξαθήο εθηέιεζεο (execute “x”)

rwx

΢ρήκα 5.3: Οη ηύπνη αδεηώλ ρξήζεο.

Όηαλ πξφθεηηαη γηα αξρεία:

 Γηθαίσκα αλάγλσζεο (read) ζεκαίλεη φηη ν ρξήζηεο πνπ αλήθεη ζηε ζπγθεθξηκέλε νκάδα
δηθαησκάησλ έρεη ην δηθαίσκα λα δηαβάζεη ηα πεξηερφκελα ηνπ αξρείνπ.
 Γηθαίσκα εγγξαθήο (write) ζεκαίλεη φηη ν ρξήζηεο πνπ αλήθεη ζηε ζπγθεθξηκέλε νκάδα
δηθαησκάησλ έρεη ην δηθαίσκα λα κεηαβάιεη ηα πεξηερφκελα ηνπ αξρείνπ.
 Γηθαίσκα εθηέιεζεο (execute) ζεκαίλεη φηη ν ρξήζηεο πνπ αλήθεη ζηε ζπγθεθξηκέλε νκάδα
δηθαησκάησλ έρεη ην δηθαίσκα λα εθηειέζεη ην αξρείν, εθφζνλ βέβαηα ην αξρείν είλαη θαηάιιεινπ
ηχπνπ γηα εθηέιεζε (εθηειέζηκν δπαδηθφ ή ζελάξην - script).

Οη ζέζεηο ησλ γξακκάησλ είλαη ζπγθεθξηκέλεο. Όηαλ έρεη αθαηξεζεί ην αληίζηνηρν δηθαίσκα, ζηε
ζέζε ηνπ αληίζηνηρνπ γξάκκαηνο εκθαλίδεηαη κηα παχια “-”. Μεξηθά παξαδείγκαηα είλαη:

100
 rwx: ν αληίζηνηρνο ρξήζηεο έρεη ηα δηθαηψκαηα read-write-execute.
 r-x: ν αληίζηνηρνο ρξήζηεο έρεη ηα δηθαηψκαηα read-execute, αιιά φρη ην write.
 r--: ν αληίζηνηρνο ρξήζηεο έρεη ην δηθαίσκα read, αιιά φρη ηα write θαη execute.
 -w-: ν αληίζηνηρνο ρξήζηεο έρεη ην δηθαίσκα write, αιιά φρη ηα read θαη execute !!!

rwx r-x r--

΢ρήκα 5.4: Παξάδεηγκα Αδεηώλ Υξήζεο.

΢ην ΢ρήκα 5.4 παξνπζηάδεηαη έλα παξάδεηγκα. Οη παξαθάησ ζπκβνιηζκνί ζεκαίλνπλ πσο:

 Ο ηδηνθηήηεο ηνπ αξρείνπ έρεη φια ηα δηθαηψκαηα γηα ην αξρείν (rwx).


 Οη ρξήζηεο πνπ αλήθνπλ ζηελ ίδηα νκάδα κε ην αξρείν έρνπλ ηα δηθαηψκαηα “r” θαη “x”, αιιά φρη ην
“w”.
 Όινη νη ππφινηπνη ρξήζηεο έρνπλ ην δηθαίσκα “r”, αιιά φρη “w” θαη “x”.

5.1.1 Δπηπιένλ δηθαηώκαηα


Τπάξρεη αθφκε κηα ηξηάδα δηθαησκάησλ. Απηή ε ηξηάδα δελ έρεη δηθή ηεο ζέζε εκθάληζεο, αιιά, εάλ
εκθαλίδνληαλ, ζα ππήξρε ε εηθφλα ηνπ ΢ρήκαηνο 5.5. Απηή ε ηξηάδα απνηειείηαη απφ ηα:

 s: δπλαηφηεηα αιιαγήο ηαπηφηεηαο ρξήζηε (set user id ή setuid).


 S: δπλαηφηεηα αιιαγήο ηαπηφηεηαο νκάδαο (set group id ή setgid).
 t: δπαδηθφ ςεθίν κνληκφηεηαο (sticky bit).

sSt rwx r-x r--

΢ρήκα 5.5: Παξάδεηγκα Αδεηώλ Υξήζεο.

Σα δηθαηψκαηα απηά ζπλήζσο δελ παξέρνληαη θαη θπξίσο ρξεζηκνπνηνχληαη γηα ζπγθεθξηκέλεο
πεξηπηψζεηο:

 sticky bit ζε θαηάινγν: Δάλ ζηνλ θαηάινγν έρνπλ δηθαίσκα εγγξαθήο-αλάγλσζεο πνιινί ρξήζηεο,
ηφηε έλαο ρξήζηεο κπνξεί λα δηαγξάςεη ηα αξρεία άιινπ. Δάλ ζηνλ θαηάινγν ππάξρεη ην sticky bit,
ηφηε ε πξφζβαζε ηνπ ρξήζηε πεξηνξίδεηαη κφλν ζηα αξρεία ησλ νπνίσλ είλαη ηδηνθηήηεο. Κιαζζηθφ
παξάδεηγκα είλαη ν θάθεινο /tmp. Όπσο θαίλεηαη παξαθάησ ζηελ πεξίπησζε ηνπ /tmp, ν ραξαθηήξαο
"t" εκθαλίδεηαη «επάλσ» απφ ην ηειεπηαίν "x" θαη ελλνείηαη φηη θαη ην "x" γηα ηνπο ππφινηπνπο
ρξήζηεο (others) είλαη ελεξγνπνηεκέλν.

asidirop@aetos:~$ ls -l /
total 101
drwxr-xr-x 2 root root 4096 Dec 16 04:01 bin
drwxr-xr-x 4 root root 1024 Feb 19 04:29 boot
drwxr-xr-x 12 root root 3000 Mar 11 11:30 dev
drwxr-xr-x 122 root root 12288 Mar 18 15:42 etc
drwxr-xr-x 5 root root 4096 Feb 3 2014 home
lrwxrwxrwx 1 root root 30 Jan 31 2014 initrd.img ->
boot/initrd.img-2.6.32-5-amd64
drwxr-xr-x 12 root root 12288 Mar 7 04:30 lib

101
drwxr-xr-x 4 root root 12288 Mar 7 04:30 lib32
lrwxrwxrwx 1 root root 4 Jan 31 2014 lib64 -> /lib
drwx------ 2 root root 16384 Jan 31 2014 lost+found
drwxr-xr-x 3 root root 4096 Jan 31 2014 media
drwxr-xr-x 8 root root 4096 Feb 3 2014 mnt
drwxr-xr-x 2 root root 4096 Jan 31 2014 opt
dr-xr-xr-x 482 root root 0 Feb 20 01:09 proc
drwxr-x--- 14 root root 4096 Mar 18 13:30 root
drwxr-xr-x 2 root root 4096 Mar 7 04:30 sbin
drwxr-xr-x 2 root root 4096 Jul 21 2010 selinux
drwxr-xr-x 3 root root 4096 Jan 31 2014 srv
drwxr-xr-x 13 root root 0 Feb 20 01:09 sys
drwxrwxrwt 22 root root 4096 Mar 19 17:11 tmp
drwxr-xr-x 12 root root 4096 Feb 3 2014 usr
drwxr-xr-x 18 root root 4096 Feb 5 2014 var
lrwxrwxrwx 1 root root 27 Jan 31 2014 vmlinuz ->
boot/vmlinuz-2.6.32-5-amd64

 ΢ε πξνγξάκκαηα ηνπ ζπζηήκαηνο, φηαλ ππάξρεη ην setuid, ηφηε ε δηεξγαζία πνπ πξνέξρεηαη απφ ην
πξφγξακκα έρεη ην δηθαίσκα λα αιιάμεη ηδηνθηήηε. Όηαλ έλαο ρξήζηεο εθηειεί έλα πξφγξακκα, ηφηε
ε δηεξγαζία πνπ πξνθχπηεη έρεη σο ηδηνθηήηε ηνλ ζπγθεθξηκέλν ρξήζηε, άξα θαη ηα δηθαηψκαηα θαη
ηηο άδεηεο ηνπ ρξήζηε. Αλ φκσο ην πξφγξακκα πνπ εθηειέζηεθε έρεη ην setuid, ηφηε ε δηεξγαζία έρεη
ην δηθαίσκα λα αιιάμεη ηδηνθηήηε, π.ρ. λα γίλεη root, άξα θαη ε δηεξγαζία απνθηά φιεο ηηο άδεηεο θαη
ηα δηθαηψκαηα ηνπ ρξήζηε root. Γηα λα ζπκβεί απηφ, βέβαηα, πξέπεη λα ζπλδπάδνληαη αξθεηέο
ζπλζήθεο. Παξφια απηά, ε δπλαηφηεηα απηή είλαη έλα ιεπηφ ζεκείν ζηνλ ηνκέα αζθάιεηαο ηνπ
UNIX, γηα απηφ θαη ππάξρνπλ πνιιέο δηθιείδεο πξνζηαζίαο, παξάδεηγκα νη εμσηεξηθνί ή δηθηπαθνί
δίζθνη νξίδνληαη σο “nosuid”. Απηφ ζεκαίλεη φηη αθφκε θαη αλ έλα πξφγξακκα είλαη καξθαξηζκέλν
σο “setuid”, απηή ε ζήκαλζε ζα αγλνεζεί απφ ην ιεηηνπξγηθφ.
 Αληίζηνηρα, ζε πξνγξάκκαηα πνπ έρνπλ ηελ άδεηα “setgid”, πνπ ζπκβνιίδεηαη κε “S”, ε δηεξγαζία
πνπ πξνθχπηεη κε ηελ εθηέιεζε απηψλ ησλ πξνγξακκάησλ έρεη ην δηθαίσκα λα αιιάμεη ηελ νκάδα
ηδηνθηεζίαο ηεο (παξάδεηγκα λα ζέζεη σο νκάδα ην “mail” θαη λα έρεη ην δηθαίσκα λα δηαβάζεη
δεδνκέλα απφ ηα αξρεία ηεο ππεξεζίαο ειεθηξνληθνχ ηαρπδξνκείνπ).

5.1.2 Απνζήθεπζε δηθαησκάησλ


Δζσηεξηθά ζην ζχζηεκα αξρείσλ ηα δηθαηψκαηα απνζεθεχνληαη (φπσο θαη φια ζηνλ θφζκν ησλ
ππνινγηζηψλ) ζε κηα αθνινπζία απφ bits. Σα bits απηά ζπκπεξηιακβάλνληαη ζε κηα δνκή ε νπνία νλνκάδεηαη
inode. Πεξηζζφηεξα γηα ηε δνκή inode κπνξείηε λα βξείηε ζηηο δηαθάλεηεο ηεο ζεσξίαο ηνπ καζήκαηνο θαζψο
θαη ζηα [4, 3, 5]. Γηα ηελ απνζήθεπζε, ινηπφλ, ησλ δηθαησκάησλ ελφο αξρείνπ, απαηηνχληαη ζπλνιηθά 12 bits
φπσο ζην ΢ρήκα 5.6.

sSt rwx r-x r--

111 111 101 100

΢ρήκα 5.6: Παξάδεηγκα απνζήθεπζεο Αδεηώλ Υξήζεο.

Κάζε bit αληηζηνηρεί θαη ζε έλα δηθαίσκα. Όηαλ ππάξρεη ην δηθαίσκα, ηφηε ην αληίζηνηρν bit είλαη "1".
Όηαλ έρεη αθαηξεζεί ην δηθαίσκα, ηφηε ην αληίζηνηρν bit είλαη "0". Δπεηδή ε ρξήζε ηνπ δπαδηθνχ ζπζηήκαηνο
απφ ηνπο ρξήζηεο είλαη δχζθνιε, θαη επίζεο ε κεηαηξνπή ησλ ηεζζάξσλ ηξηάδσλ απφ bits ζε δεθαδηθφ

102
ζχζηεκα είλαη επίζεο δχζθνιε, γηα ηελ αλαπαξάζηαζε απηψλ ησλ 12 bits ρξεζηκνπνηείηαη πάληα ην νθηαδηθφ
ζχζηεκα. Έηζη, θάζε νκάδα δηθαησκάησλ (3 bits) αληηζηνηρεί ζε έλα νθηαδηθφ ςεθίν. Ζ πξνθαλήο
αληηζηνηρία δπαδηθνχ κε νθηαδηθφ αξηζκφ θαίλεηαη ζηνλ Πίλαθα 5.1. Σν κνλφ νθηαδηθφ ςεθίν ζπκπίπηεη κε
ην δεθαδηθφ, δειαδή ην "5" ζε νθηαδηθφ είλαη ίζν κε ην "5" ζε δεθαδηθφ. Όκσο ην "15" ζε νθηαδηθφ δελ είλαη
ίζν κε "15" ζε δεθαδηθφ, αιιά ίζν κε "13".

Πίλαθαο 5.1: Αληηζηνηρία Οθηαδηθνύ - Γπαδηθνύ ΢πζηήκαηνο

8αδηθό 2αδηθό
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111

Γεδνκέλνπ φηη θάζε ηξηάδα απφ bits αληηζηνηρίδεηαη ζε έλα νθηαδηθφ ςεθίν, γηα ηελ αλαπαξάζηαζε
ησλ 12 bits, απαηηνχληαη ηέζζεξα νθηαδηθά ςεθία. ΢πλεπψο, ην ζχλνιν ησλ αδεηψλ πξφζβαζεο
αλαπαξηζηάηαη κε έλαλ ηεηξαςήθην νθηαδηθφ αξηζκφ. ΢ηνλ Πίλαθα 5.2 παξνπζηάδνληαη κεξηθά παξαδείγκαηα.
Γηα ηα δηθαηψκαηα sSt ζεσξείηαη φηη απνπζηάδνπλ θαη παξαιείπνληαη, φκσο ζπκπεξηιακβάλνπκε ηα
αληίζηνηρα bits ζηε δεχηεξε ζηήιε ηνπ πίλαθα.

Πίλαθαο 5.2: Παξαδείγκαηα αλαπαξάζηαζεο ζε Οθηαδηθό θαη Γπαδηθό ΢ύζηεκα

΢ύκβνια 2αδηθό 8αδηθό


rwx rwx r-- 000 111 111 100 0774
rw- --x --- 000 110 001 000 0610
--- --- --- 000 000 000 000 0000
-wx --- r-- 000 011 000 100 0604
r-x --x -w- 000 101 001 010 0512

5.2 ΢εκαζία δηθαησκάησλ


Πνηα είλαη, φκσο, αθξηβψο ε ζεκαζία ησλ δηθαησκάησλ; Γηα ηελ πεξίπησζε ησλ αξρείσλ είλαη ζρεδφλ
πξνθαλέο θαη φπσο αλαθέξζεθε παξαπάλσ:

 Γηθαίσκα αλάγλσζεο (read) ζεκαίλεη φηη ν ρξήζηεο πνπ αλήθεη ζηελ ζπγθεθξηκέλε νκάδα
δηθαησκάησλ έρεη ην δηθαίσκα λα δηαβάζεη ηα πεξηερφκελα ηνπ αξρείνπ.
 Γηθαίσκα εγγξαθήο (write) ζεκαίλεη φηη ν ρξήζηεο πνπ αλήθεη ζηελ ζπγθεθξηκέλε νκάδα
δηθαησκάησλ έρεη ην δηθαίσκα λα κεηαβάιεη ηα πεξηερφκελα ηνπ αξρείνπ.
 Γηθαίσκα εθηέιεζεο (execute) ζεκαίλεη φηη ν ρξήζηεο πνπ αλήθεη ζηελ ζπγθεθξηκέλε νκάδα
δηθαησκάησλ έρεη ην δηθαίσκα λα εθηειέζεη ην αξρείν - εθφζνλ βέβαηα ην αξρείν είλαη θαηάιιεινπ
ηχπνπ γηα εθηέιεζε (εθηειέζηκν δπαδηθφ ή ζελάξην - script).

103
Όκσο γηα ηελ πεξίπησζε ησλ θαηαιφγσλ δελ είλαη πξνθαλέο. Γηα λα θαηαλνήζνπκε θαιχηεξα ηελ
ρξήζε ησλ δηθαησκάησλ ζε θαηαιφγνπο ζα πξέπεη λα κειεηήζνπκε ιίγν ηελ εζσηεξηθή δνκή ελφο θαηαιφγνπ.

5.2.1 Δζσηεξηθή δνκή ΢πζηήκαηνο Αξρείσλ


Όπσο αλαθέξζεθε λσξίηεξα (Παξάγξαθν 5.1.2), ζην ζχζηεκα αξρείσλ ππάξρεη κηα βαζηθή δνκή ε νπνία
νλνκάδεηαη i-node. Γηα θάζε αξρείν δεκηνπξγείηαη έλα i-node, κέζα ζην νπνίν απνζεθεχνληαη φιεο νη
πιεξνθνξίεο ζρεηηθέο κε ην αξρείν, φπσο εκεξνκελία ηξνπνπνίεζεο, κέγεζνο, ηδηνθηήηεο, νη θπζηθέο
δηεπζχλζεηο ησλ κπινθ ηνπ δίζθνπ ζηηο νπνίεο είλαη απνζεθεπκέλα ηα δεδνκέλα ηνπ αξρείνπ, νη άδεηεο
ρξήζεο θ.ά. Καηά ηε κνξθνπνίεζε ελφο δίζθνπ (format) δεκηνπξγείηαη έλαο πίλαθαο πνπ απνηειείηαη απφ
κεξηθά εθαηνκκχξηα ή ηξηζεθαηνκκχξηα i-nodes. Γηα θάζε αξρείν πνπ δεκηνπξγείηαη, δεζκεχεηαη θαη κηα ζέζε
ζηνλ πίλαθα απηφλ, ζηελ νπνία ζέζε απνζεθεχνληαη νη πιεξνθνξίεο γηα ην αξρείν.
Έλαο θαηάινγνο ζηελ νπζία είλαη έλα αξρείν ην νπνίν πεξηέρεη ηε ιίζηα κε ηα νλφκαηα αξρείσλ πνπ
πεξηέρνληαη ζηνλ θαηάινγν. Γηα θάζε αξρείν πξέπεη λα ππάξρεη επίζεο θαη ε πιεξνθνξία ζε πνην i-node
αληηζηνηρεί. Οπζηαζηηθά ινηπφλ, έλαο θαηάινγνο είλαη έλα αξρείν πνπ πεξηέρεη ηελ πιεξνθνξία φπσο
παξνπζηάδεηαη ζηνλ Πίλαθα 5.3. Βέβαηα, αλάινγα κε ηνλ Σχπν ΢πζηήκαηνο Αξρείσλ ε δνκή πνπ
παξνπζηάδεηαη κπνξεί λα δηαθέξεη, ψζηε λα επηηξέπεη γξήγνξε αλαδήηεζε. Ζ νπζία, φκσο, είλαη φηη
απνζεθεχνληαη νη πιεξνθνξίεο «φλνκα αξρείνπ» θαη «αξηζκφο i-node».

Πίλαθαο 5.3: Παξαδείγκαηα απνζήθεπζεο θαηαιόγνπ

Όλνκα Αξρείνπ i-node


. 134289164
.. 100734149
file1 134289167
file2 134289171
dir7_test 134289172
file8.txt 134289173
lala.c 302018510

Όηαλ ινηπφλ ν ρξήζηεο δίλεη ηελ εληνιή: cat file1, ηφηε ν ππξήλαο, γηα λα βξεη ηα πεξηερφκελα
ηνπ file1, πξψηα απ' φια ςάρλεη ζηνλ θαηάινγν λα βξεη αλ ππάξρεη φλησο αξρείν κε ην φλνκα file1. Αλ
λαη, ηφηε δηαβάδεη απφ πνην i-node ζα βξεη πιεξνθνξίεο γηα ην αξρείν. Αθνχ «δεη» φηη ην file1 αληηζηνηρεί
ζην i-node "134289167", ηφηε αλνίγεη ηνλ πίλαθα ησλ i-nodes θαη δηαβάδεη ην i-node ζηε ζέζε 134289167 ηνπ
πίλαθα. Με απηφλ ηνλ ηξφπν, έρεη δηαβάζεη ηηο πιεξνθνξίεο πνπ αθνξνχλ ην αξρείν. Μέζα ζ’ απηέο ηηο
πιεξνθνξίεο είλαη θαη ε πιεξνθνξία ζε πνηα blocks ηνπ δίζθνπ βξίζθνληαη ηα δεδνκέλα ηνπ αξρείνπ.
Γηαβάδεη ηα ζπγθεθξηκέλα κπινθ θαη «δίλεη» ηα δεδνκέλα ζηε δηεξγαζία ηεο εληνιήο cat. Έηζη,
ε cat θαηάθεξε λα δηαβάζεη ηα δεδνκέλα ηνπ file1 θαη έπεηηα λα ηα εθηππψζεη ζην ηεξκαηηθφ.
Όηαλ, ινηπφλ, δεκηνπξγείηαη έλα αξρείν, πξέπεη λα γξαθηεί ζην αξρείν ηνπ θαηαιφγνπ κηα λέα
γξακκή πνπ ζα αθνξά ην λέν αξρείν. Όηαλ δηαγξάθεηαη απφ έλαλ θαηάινγν έλα αξρείν, ηφηε ζηελ
πξαγκαηηθφηεηα δηαγξάθεηαη ε γξακκή πνπ αθνξά ην αξρείν απφ ηνλ πίλαθα πνπ δηαηεξείηαη ζηνλ θαηάινγν.
Αο ζεσξήζνπκε φηη ν θάζε θαηάινγνο πεξηέρεη απηφλ ηνλ δίζηειν πίλαθα φπσο θαίλεηαη
ζηνλ Πίλαθα 5.3.

 Σν δηθαίσκα “read” δίλεη ηε δπλαηφηεηα λα «δηαβάζνπκε» ηα νλφκαηα αξρείσλ ηνπ θαηαιφγνπ απφ
ηελ πξψηε ζηήιε ηνπ πίλαθα.
 Σν δηθαίσκα “write” δίλεη ηε δπλαηφηεηα λα «κεηαβάινπκε» ηα πεξηερφκελα ηνπ θαηαιφγνπ, δειαδή
λα πξνζζέζνπκε ή λα αθαηξέζνπκε γξακκέο ζηνλ πίλαθα.

104
 Σν δηθαίσκα “execute” δίλεη ηε δπλαηφηεηα λα «δηαβάζνπκε» ηα i-node numbers ησλ αξρείσλ,
δειαδή, φπσο θαίλεηαη ζρεκαηηθά, λα δηαβαζηεί ε δεχηεξε ζηήιε ηνπ πίλαθα. Δπίζεο, γηα λα κπνξεί
έλαο ρξήζηεο λα θάλεη "cd" ζε έλαλ θαηάινγν, πξέπεη λα έρεη θαη δηθαίσκα “execute” ζηνλ
θαηάινγν.

΢πλνςίδνληαο κε βάζε ηηο ελέξγεηεο:

 Γηαγξαθή αξρείνπ ή θαηαιόγνπ: Πξέπεη λα έρσ “w” θαη “x” ζηνλ θαηάινγν κέζα ζηνλ νπνίν
βξίζθεηαη ην αξρείν πξνο δηαγξαθή, δηφηη:
o Πξέπεη λα δηαβάζεη ν ππξήλαο ην i-node ηνπ αξρείνπ, ψζηε λα ην καξθάξεη σο ειεχζεξν.
΢πλεπψο, απαηηείηαη ην “x” ζηνλ θαηάινγν.
o Πξέπεη λα κεηαβιεζνχλ ηα πεξηερφκελα ηνπ θαηαιφγνπ. ΢πλεπψο, απαηηείηαη ην “w” ζηνλ
θαηάινγν.
o Γελ επεξεάδνπλ ηα δηθαηψκαηα ηνπ αξρείνπ πνπ ζα ζβήζσ, δηφηη δελ ζα
δηαβαζηνχλ/κεηαβιεζνχλ ηα πεξηερφκελα ηνπ αξρείνπ. ΢πλεπψο, δελ ρξεηάδεηαη λα έρσ “w” ή
“r” γηα ην αξρείν.
 Γεκηνπξγία αξρείνπ ή θαηαιόγνπ: Πξέπεη λα έρσ “w” θαη “x” ζηνλ θαηάινγν.
 Δκθάληζε νλνκάησλ αξρείσλ: Πξέπεη λα έρσ “r” ζηνλ θαηάινγν, γηα λα δσ ηα νλφκαηα αξρείσλ.
 Δκθάληζε πιεξνθνξηώλ αξρείσλ (πρ. κε ηελ ls –l): Πξέπεη λα έρσ “r” θαη “x” ζηνλ θαηάινγν.
 cd ζηνλ θαηάινγν: Πξέπεη λα έρσ “x” ζηνλ θαηάινγν.

5.3 Οξηζκόο θαη κεηαβνιή δηθαησκάησλ


Ο νξηζκφο ή κεηαβνιή ησλ δηθαησκάησλ ελφο αξρείνπ ή θαηαιφγνπ κπνξεί λα γίλεη είηε απφ ηνλ ηδηνθηήηε
ηνπ αξρείνπ, είηε απφ ηνλ ρξήζηε root. Αθφκε θαη αλ απφ ηνλ ηδηνθηήηε ηνπ αξρείνπ έρνπλ δνζεί φιεο νη
άδεηεο πξνο ηνπο ππφινηπνπο ρξήζηεο, αθφκε θαη αλ έρνπλ δνζεί φιεο νη άδεηεο θαη ζηνλ θαηάινγν κέζα ζηνλ
νπνίν βξίζθεηαη ην αξρείν, θαλέλαο ρξήζηεο δελ κπνξεί λα αιιάμεη ηα δηθαηψκαηα παξά κφλν νη δπν πνπ
πξναλαθέξζεθαλ.
Ζ κεηαβνιή ησλ δηθαησκάησλ ελφο αξρείνπ κπνξεί λα γίλεη ρξεζηκνπνηψληαο ηελ εληνιή: "chmod"
(change mode) [2].

chmod [OPTIONS] δηθαηώκαηα αξρεία

Μπνξνχκε ζηελ εληνιή λα δψζνπκε σο φξηζκα έλα ή πεξηζζφηεξα νλφκαηα αξρείσλ. Σα νλφκαηα
αξρείσλ πξέπεη λα είλαη ηα ηειεπηαία νξίζκαηα ζηελ εληνιή. Πξνθαλψο κπνξνχλ λα ρξεζηκνπνηεζνχλ θαη
ραξαθηήξεο κπαιαληέξ. Ζ εληνιή αλαγλσξίδεη ηα δηθαηψκαηα κε δπν ηξφπνπο. Δίηε κπνξεί λα ρξεζηκνπνηεζεί
ν ηεηξαςήθηνο νθηαδηθφο αξηζκφο, είηε θάπνηα ζχκβνια πνπ ζα εμεγήζνπκε παξαθάησ. Όηαλ ζηνλ νθηαδηθφ
αξηζκφ παξαιείπνληαη θάπνηα ςεθία, ηφηε ελλνείηαη φηη αληηζηνηρνχλ ζην κεδέλ. ΢ην παξαθάησ παξάδεηγκα,
νη εληνιέο αλά δπν είλαη ηζνδχλακεο.

chmod 500 file1


chmod 0500 file1
chmod 4 file1
chmod 0004 file1

Γηα ηνπο ρξήζηεο πνπ δελ ηα πάλε θαιά κε ηνπο αξηζκνχο, ε chmod κπνξεί λα θαηαιάβεη κηα ζεηξά
απφ ζχκβνια πνπ παξνπζηάδνληαη ζηνλ Πίλαθα 5.4:

105
Πίλαθαο 5.4: ΢ύκβνια πνπ ρξεζηκνπνηνύληαη ζηελ εληνιή chmod

΢ύκβνιν ΢εκαζία
+ πξφζζεζε ηα δηθαηψκαηα πνπ αθνινπζνχλ
- αθαίξεζε ηα δηθαηψκαηα πνπ αθνινπζνχλ
= ζέζε αθξηβψο ηα δηθαηψκαηα πνπ αθνινπζνχλ
r δηθαίσκα read
w δηθαίσκα write
x δηθαίσκα execute
u user - ηδηνθηήηεο ηνπ αξρείνπ
g group - νκάδα ηνπ αξρείνπ
ν others - ππφινηπνη ρξήζηεο
a all - φιεο νη νκάδεο ρξεζηψλ
, δηαρσξηζηήο

Αθνινπζνχλ θάπνηα παξαδείγκαηα:

chmod ug=rx,o=r file1

ζα ζέζεη ζην αξρείν ηα δηθαηψκαηα "r-xr-xr--".

chmod u=rwx,g=r,o= file1

ζα ζέζεη ζην αξρείν ηα δηθαηψκαηα "rwxr-----".

chmod a=r,u+wx file1

ζα ζέζεη ζην αξρείν αξρηθά ηα δηθαηψκαηα "r--r--r--" θαη κεηά ζα πξνζζέζεη "wx" ζηνλ
ηδηνθηήηε. ΢πλεπψο, ην ηειηθφ απνηέιεζκα ζα είλαη: "rwxr--r--".
Όηαλ ρξεζηκνπνηνχληαη νη ελέξγεηεο +/-, ηφηε ηα δηθαηψκαηα πνπ πξνθχπηνπλ ηειηθά εμαξηψληαη θαη
απφ ηα δηθαηψκαηα πνπ ππήξραλ πξηλ.

 Σν + πξνζζέηεη ζηα ήδε ππάξρνληα δηθαηψκαηα. Πξνθαλψο, αλ ππάξρεη ήδε ην δηθαίσκα, δελ
πξνζζέηεη θάηη.
 Σν - αθαηξεί απφ ηα ππάξρνληα. Πξνθαλψο, αλ δελ ππάξρεη ην δηθαίσκα, δελ κπνξεί λα ην αθαηξέζεη.

chmod ug+w file1

106
Έζησ ην file1 έρεη αξρηθά ηα δηθαηψκαηα: "r-xr-xr--". Ζ παξαπάλσ εληνιή ζα πξνζζέζεη ζηνλ
ηδηνθηήηε θαη ζηελ νκάδα ην "w". ΢πλεπψο, ηα ηειηθά δηθαηψκαηα πνπ ζα απνθηήζεη ην αξρείν ζα
είλαη: "rwxrwxr--".
Άλ ην file1 είρε αξρηθά ηα δηθαηψκαηα: "rw-r-----", ε ίδηα εληνιή ζα πξνζζέζεη κφλν ζηελ
νκάδα ην "w", δηφηη ν ηδηνθηήηεο ην έρεη ήδε. ΢πλεπψο, ηα ηειηθά δηθαηψκαηα πνπ ζα απνθηήζεη ην αξρείν ζα
είλαη: "rw-rw----".
Υξήζηκν φξηζκα-ζεκαία ζηελ εληνιή chmod είλαη ην "-R" (recursively). Απηή ε ζεκαία νδεγεί ηελ
εληνιή λα εθαξκφζεη ηηο αιιαγέο ζηα δηθαηψκαηα αλαδξνκηθά ζε νιφθιεξε ηελ ηεξαξρία θαηαιφγσλ.
Πξνθαλψο, έρεη λφεκα, φηαλ έλα απφ ηα νξίζκαηά ηεο είλαη θαηάινγνο. Δδψ λα θάλνπκε ηελ παξαηήξεζε φηη
νη πεξηζζφηεξεο εληνιέο (πρ νη cp, rm θ.ά.) δέρνληαη ηε ζεκαία «αλαδξνκηθά» κε κηθξφ "-r". Γηα
ηελ chmod, φκσο, ην "-r" ζεκαίλεη αθαίξεζε ηνπ δηθαηψκαηνο “read”. ΢πλεπψο, γηα λα κελ ππάξρεη
ζχγρπζε, ε chmod δέρεηαη ηε ζεκαία «αλαδξνκηθά» σο"-R".

5.3.1 Πξνθαζνξηζκέλα δηθαηώκαηα θαη ε umask


Όηαλ δεκηνπξγείηαη έλαο θαηάινγνο, ηφηε απηφο απνθηά φια ηα δηθαηψκαηα, δειαδή:

rwxrwxrwx (0777)

.
Όηαλ δεκηνπξγείηαη έλα αξρείν, ηφηε θαη απηφ απνθηά φια ηα δηθαηψκαηα εθηφο απφ ην δηθαίσκα
εθηέιεζεο:

rw-rw-rw- (0666)

.
Σν δηθαίσκα εθηέιεζεο απνπζηάδεη απφ ηα αξρεία γηα ιφγνπο αζθάιεηαο. Δπίζεο, ην κεγαιχηεξν
πνζνζηφ αξρείσλ πνπ ππάξρνπλ ζε έλαλ ππνινγηζηή δελ είλαη πξνγξάκκαηα ψζηε λα εθηειεζηνχλ, αιιά
δεδνκέλα (εηθφλεο, βίληεν, θείκελν, θηι.). Μηα εγθαηάζηαζε ελφο παθέηνπ-πξνγξάκκαηνο, ζπλήζσο
πεξηιακβάλεη ηε δεκηνπξγία δπν-ηξηψλ εθηειέζηκσλ αξρείσλ θαη κεξηθψλ δεθάδσλ (ή θαη ρηιηάδσλ)
βνεζεηηθψλ αξρείσλ.
Όκσο ην παξαπάλσ είλαη απηναλαηξνχκελν. Απφ ηε κηα απνπζηάδεη ην δηθαίσκα εθηέιεζεο απφ ηα
αξρεία γηα ιφγνπο αζθαιείαο - ην νπνίν ζεκαίλεη φηη δίλεηαη ηδηαίηεξε βαξχηεηα ζηελ αζθάιεηα - θαη απφ ηελ
άιιε κε ηε δεκηνπξγία ελφο αξρείνπ κπνξνχλ λα ην κεηαβάιινπλ φινη νη ρξήζηεο, δηφηη φινη νη ρξήζηεο ζα
έρνπλ ην δηθαίσκα εγγξαθήο ("w").
Πξνθαλψο, θάηη ηέηνην δελ είλαη πξαθηηθφ, δηφηη θάζε θνξά πνπ έλαο ρξήζηεο δεκηνπξγεί έλα αξρείν
ζα πξέπεη λα ην θιεηδψλεη ακέζσο κεηά. Απφ ηελ άιιε, ζην ρξνληθφ δηάζηεκα πνπ ζα κεζνιαβήζεη απφ ηε
ζηηγκή δεκηνπξγίαο ηνπ αξρείνπ κέρξη ηε ζηηγκή «θιεηδψκαηνο» ηνπ αξρείνπ, κπνξεί θάπνηνο άιινο ρξήζηεο
λα πξνιάβεη λα κεηαβάιεη ή λα δηαβάζεη ηα δεδνκέλα ηνπ. ΢πλεπψο, εδψ ην ζχζηεκα κνηάδεη λα πάζρεη ζην
ζέκα ηεο αζθάιεηαο.
Τπάξρεη κηα κεηαβιεηή ηνπ ζπζηήκαηνο (ε νπνία νξίδεηαη αλά δηεξγαζία) θαη πεξηέρεη ηελ
πιεξνθνξία πνηα δηθαηψκαηα ζα αθαηξνχληαη απηφκαηα απφ ηα αξρεία θαη ηνπο θαηαιφγνπο πνπ ζα
δεκηνπξγήζεη έλαο ρξήζηεο. Απηή ε κεηαβιεηή νλνκάδεηαη umask θαη ν ρεηξηζκφο ηεο γίλεηαη κε ηελ
νκψλπκε εληνιή [1, 4]. Γηα ηελ αλαπαξάζηαζε ηνπ αξηζκνχ umask ρξεζηκνπνηνχληαη 4 νθηαδηθά ςεθία (12
bits). Σν πξψην νθηαδηθφ ςεθίν δελ έρεη λφεκα λα έρεη ηηκή δηαθνξεηηθή απφ ην κεδέλ, δηφηη έηζη θη αιιηψο
ηα δηθαηψκαηα sSt δελ δίλνληαη ζε θακία πεξίπησζε εμαξρήο. Γηα ιφγνπο, φκσο, νκνηνκνξθίαο
ρξεζηκνπνηνχληαη ζπλήζσο ηέζζεξα ςεθία αληί ησλ ηξηψλ πνπ απαηηνχληαη.
Ζ εληνιή umask ρσξίο νξίζκαηα εκθαλίδεη ηελ ηηκή ηεο κάζθαο δηθαησκάησλ (umask). Ζ εληνιή
umask κε φξηζκα έλαλ νθηαδηθφ αξηζκφ ζέηεη λέα ηηκή ζηε κάζθα δηθαησκάησλ.

107
asidirop@antonis-PC:~/tmp/test$ umask
0022
asidirop@antonis-PC:~/tmp/test$ umask 777
asidirop@antonis-PC:~/tmp/test$ umask
0777
asidirop@antonis-PC:~/tmp/test$ touch file1
asidirop@antonis-PC:~/tmp/test$ ls -l
total 0
---------- 1 asidirop asidirop 0 Mar 21 20:15 file1
asidirop@antonis-PC:~/tmp/test$ umask 055
asidirop@antonis-PC:~/tmp/test$ touch file2
asidirop@antonis-PC:~/tmp/test$ ls -l
total 0
---------- 1 asidirop asidirop 0 Mar 21 20:15 file1
-rw--w--w- 1 asidirop asidirop 0 Mar 21 20:15 file2
asidirop@antonis-PC:~/tmp/test$ umask 044
asidirop@antonis-PC:~/tmp/test$ touch file3
asidirop@antonis-PC:~/tmp/test$ ls -l
total 0
---------- 1 asidirop asidirop 0 Mar 21 20:15 file1
-rw--w--w- 1 asidirop asidirop 0 Mar 21 20:15 file2
-rw--w--w- 1 asidirop asidirop 0 Mar 21 20:55 file3
asidirop@antonis-PC:~/tmp/test$ umask 022
asidirop@antonis-PC:~/tmp/test$ touch file4
asidirop@antonis-PC:~/tmp/test$ ls -l
total 0
---------- 1 asidirop asidirop 0 Mar 21 20:15 file1
-rw--w--w- 1 asidirop asidirop 0 Mar 21 20:15 file2
-rw--w--w- 1 asidirop asidirop 0 Mar 21 20:55 file3
-rw-r--r-- 1 asidirop asidirop 0 Mar 21 20:55 file4
asidirop@antonis-PC:~/tmp/test$

΢ην παξαπάλσ παξάδεηγκα αθνινπζίαο εληνιψλ, αξρηθά εκθαλίδνπκε ηελ ηηκή ηεο umask ε νπνία
είλαη 0022. Με ηελ επφκελε εληνιή, ζέηνπκε ηελ umask ζε 777 θαη επηβεβαηψλνπκε φηη ηέζεθε ε ζσζηή ηηκή.
Δδψ παξαηεξνχκε φηη παξφηη ρξεζηκνπνηήζακε ηξία ςεθία θαηά ηνλ νξηζκφ ηηκήο, θαηά ηελ εκθάληζε
ρξεζηκνπνηνχληαη ηέζζεξα. Θέηνληαο ηελ umask ζε 777 ζεκαίλεη φηη ζα αθαηξνχληαη φια ηα δηθαηψκαηα απφ
ηα αξρεία πνπ ζα δεκηνπξγήζνπκε απφ εδψ θαη ζην εμήο (΢ρήκα 5.7). Με ηελ επφκελε εληνιή δεκηνπξγνχκε
ην αξρείν "file1" θαη κε ηελ "ls -l" επηβεβαηψλνπκε φηη απφ απηφ ην αξρείν έρνπλ αθαηξεζεί θαηά ηε
δεκηνπξγία ηνπ φια ηα δηθαηψκαηα.
Έπεηηα, ζέηνπκε ηελ umask ζε 055. Απηφ ζεκαίλεη φηη απφ ηνλ ηδηνθηήηε δελ ζα αθαηξείηαη θαλέλα
δηθαίσκα. Απφ ηελ "νκάδα" φκσο θαη απφ ηνπο "ππφινηπνπο" ζα αθαηξνχληαη ηα δηθαηψκαηα "r" θαη "x"
(΢ρήκα 5.7).
Όκσο, αθνχ δεκηνπξγήζνπκε ην αξρείν file2 θαη αλακέλνπκε απφ ηνλ ηδηνθηήηε λα κελ έρεη
αθαηξεζεί θαλέλα δηθαίσκα, παξαηεξνχκε (κε ηελ ls -l) φηη ην file2 δελ έρεη ζηνλ ηδηνθηήηε ην “x”. Απηφ
ζπλέβε, δηφηη, φπσο αλαθέξακε λσξίηεξα, φηαλ δεκηνπξγνχληαη αξρεία, δελ κπαίλεη ην δηθαίσκα “x”. ΢ηελ
νπζία, ινηπφλ, αθφκε θαη αλ δελ είρακε νξίζεη λα αθαηξείηαη ην “x” απφ ηνπο «ππφινηπνπο» θαη ηελ νκάδα,
απηφ έηζη θη αιιηψο δελ ζα ππήξρε. Απηφ ην απνδεηθλχνπκε κε ηελ επφκελε εληνιή, θαηά ηελ νπνία ζέηνπκε
ην umask 044. Απηφ ζεκαίλεη φηη απφ ηελ «νκάδα» θαη ηνπο «ππνινίπνπο» ζα αθαηξείηαη ην δηθαίσκα “r”.
Γεκηνπξγψληαο ην αξρείν “file3” βιέπνπκε φηη ηειηθά θαη ην file3 (πνπ δεκηνπξγήζεθε κε umask 044) θαη ην
file2 (πνπ δεκηνπξγήζεθε κε umask 055) έρνπλ ηειηθά ηα ίδηα δηθαηψκαηα. Άξα, ηειηθά έρεη λφεκα ην
ηειεπηαίν bit (“x”) ζην umask; Θα δψζνπκε ηελ απάληεζε ζην επφκελν παξάδεηγκα. Σέινο, επαλαθέξνπκε ην
umask ζηελ ηηκή 022, ε νπνία είλαη κηα ζπλεζηζκέλε ηηκή γηα umask (φπσο θαη ε 077).

108
umask 777 umask 055

0 7 7 7 0 0 5 5

000 111 111 111 000 000 101 101

rwx rwx rwx --- r-x r-x

umask 044 umask 022

0 0 4 4 0 0 2 2

000 000 100 100 000 000 020 020

--- r-- r-- --- -w- -w-

΢ρήκα 5.7: Παξάδεηγκα umask.

Σν επφκελν πείξακά καο είλαη κε ηελ επίδξαζε ηεο umask θαηά ηε δεκηνπξγία θαηαιφγσλ.
Δπαλαιακβάλνπκε αθξηβψο ηηο ίδηεο ηηκέο κε ην πξνεγνχκελν παξάδεηγκα, αιιά απηή ηε θνξά δεκηνπξγνχκε
θαηαιφγνπο αληί αξρείσλ.

asidirop@antonis-PC:~/tmp/test$ umask 777


asidirop@antonis-PC:~/tmp/test$ mkdir dir1
asidirop@antonis-PC:~/tmp/test$ ls -l
total 4
d--------- 2 asidirop asidirop 4096 Mar 22 21:12 dir1
asidirop@antonis-PC:~/tmp/test$ umask 055
asidirop@antonis-PC:~/tmp/test$ mkdir dir2
asidirop@antonis-PC:~/tmp/test$ ls -l
total 8
d--------- 2 asidirop asidirop 4096 Mar 22 21:12 dir1
drwx-w--w- 2 asidirop asidirop 4096 Mar 22 21:12 dir2
asidirop@antonis-PC:~/tmp/test$ umask 044
asidirop@antonis-PC:~/tmp/test$ mkdir dir3
asidirop@antonis-PC:~/tmp/test$ ls -l
total 12
d--------- 2 asidirop asidirop 4096 Mar 22 21:12 dir1
drwx-w--w- 2 asidirop asidirop 4096 Mar 22 21:12 dir2
drwx-wx-wx 2 asidirop asidirop 4096 Mar 22 21:12 dir3
asidirop@antonis-PC:~/tmp/test$ umask 022
asidirop@antonis-PC:~/tmp/test$ mkdir dir4
asidirop@antonis-PC:~/tmp/test$ ls -l
total 16
d--------- 2 asidirop asidirop 4096 Mar 22 21:12 dir1
drwx-w--w- 2 asidirop asidirop 4096 Mar 22 21:12 dir2
drwx-wx-wx 2 asidirop asidirop 4096 Mar 22 21:12 dir3

109
drwxr-xr-x 2 asidirop asidirop 4096 Mar 22 21:13 dir4
asidirop@antonis-PC:~/tmp/test$

Ζ πξψηε ηηκή ζηελ umask (777), αθνχ δεκηνπξγήζνπκε ηνλ θαηάινγν dir1, έρεη ην ίδην απνηέιεζκα
κε ηελ πεξίπησζε δεκηνπξγίαο αξρείσλ. Γειαδή ην dir1 δελ ζα έρεη θαλέλα δηθαίσκα ελεξγνπνηεκέλν. Ζ
δεχηεξε ηηκή ηεο umask (055) έρεη θαη απηή ηελ ίδηα επίδξαζε ζηνλ θαηάινγνdir2 κε ην αξρείν file2.
Απφ ηνλ θαηάινγν αθαηξνχληαη ηα δηθαηψκαηα “r” θαη “x” απφ ηελ νκάδα θαη ηνπο ππνινίπνπο. Ζ ηξίηε φκσο
πεξίπησζε, δειαδή ε ηηκή (044) δελ έρεη ηελ ίδηα επίδξαζε ζηνλ θαηάινγν dir3 κε ην αξρείν file3.

umask 777 umask 055

Αξρηθά 0 7 7 7 Αξρηθά 0 7 7 7

- 0 7 7 7 - 0 0 5 5

= 0 0 0 0 = 0 7 2 2

000 000 000 000 000 111 010 010

--- --- --- rwx -w- -w-

umask 044 umask 022

Αξρηθά 0 7 7 7 Αξρηθά 0 7 7 7

- 0 0 4 4 - 0 0 2 2

= 0 7 3 3 = 0 7 5 5

000 111 011 011 000 111 101 101

rwx -wx -wx rwx r-x r-x

΢ρήκα 5.8: Παξάδεηγκα ππνινγηζκνύ επίδξαζεο ηεο umask ζηε δεκηνπξγία θαηαιόγσλ.

110
Ο θαηάινγνο dir3 παίξλεη ηα δηθαηψκαηα “w” θαη “x” ζηελ νκάδα θαη ζηνπο ππνινίπνπο, ελψ
ην file3 είρε κφλν ην δηθαίσκα “w”. ΢ε απηήλ ηελ πεξίπησζε βιέπνπκε ηε δηαθνξά ηεο επίδξαζεο ρξήζεο
ηεο ηηκήο (055) κε ηελ ηηκή (044), θάηη ην νπνίν δελ ίζρπε ζηελ πεξίπησζε ησλ θαηαιφγσλ. Σέινο, ε ηηκή
(022) δίλεη δηαθνξεηηθά δηθαηψκαηα ζηνλ θαηάινγν dir4 απ’ φηη ζην αξρείν file4.
Απαηηείηαη πξνζνρή ζηελ εθηίκεζε ηεο επίδξαζεο κηαο ηηκήο ηεο umask ζηηο πεξηπηψζεηο ησλ
αξρείσλ θαη θαηαιφγσλ. ΢ηελ πεξίπησζε ησλ θαηαιφγσλ, ηα δηθαηψκαηα πνπ πξνθχπηνπλ σο απνηέιεζκα
κπνξνχλ λα ππνινγηζηνχλ θάλνληαο κηα απιή αθαίξεζε ζην νθηαδηθφ ζχζηεκα ηεο ηηκήο ηεο umask απφ ηελ
ηηκή 777 (΢ρήκα 5.8).
Αληηζέησο φκσο, ζηελ πεξίπησζε ησλ αξρείσλ, ε αθαίξεζε απφ ην (666) δελ ζα δψζεη ζε φιεο ηηο
πεξηπηψζεηο ηα ζσζηά απνηειέζκαηα. Όπσο δείρλνπκε ζην ΢ρήκα 5.9, κφλν δπν ζηηο ηέζζεξηο πεξηπηψζεηο
καο δίλεη ζην ζσζηφ απνηέιεζκα.

umask 777 umask 055

Αξρηθά 0 6 6 6 Αξρηθά 0 6 6 6

- 0 7 7 7 - 0 0 5 5

= - 1 1 1 = 0 6 1 1

??? ??? ??? ??? 000 110 001 001

??? ??? ??? rw- --x --x

umask 044 umask 022

Αξρηθά 0 6 6 6 Αξρηθά 0 6 6 6

- 0 0 4 4 - 0 0 2 2

= 0 6 2 2 = 0 6 4 4

000 110 010 010 000 110 100 100

rw- -w- -w- rw- r-- r--

΢ρήκα 5.9: Παξάδεηγκα ιάζνπο ππνινγηζκώλ επίδξαζεο ηεο umask ζηε δεκηνπξγία αξρείσλ.

Ζ θαιχηεξε κέζνδνο είλαη λα ππνινγίδνπκε ηελ αθαίξεζε κε βάζε ηα δηθαηψκαηα. Απηφ ζα καο
δψζεη ην ζσζηφ απνηέιεζκα ζηελ πεξίπησζε ησλ θαηαιφγσλ αιιά θαη ζηελ πεξίπησζε ησλ αξρείσλ.

111
΢ην ΢ρήκα 5.10 παξνπζηάδνπκε ηνλ ηξφπν ππνινγηζκνχ πνπ πξέπεη λα έρνπκε ζην κπαιφ καο. Φπζηθά, κε
ηελ εθπαίδεπζε θαη ηελ εκπεηξία φινη νη παξαθάησ ππνινγηζκνί πξαγκαηνπνηνχληαη ζρεδφλ απηφκαηα θαη
αζπλαίζζεηα.

umask 777 (γηα θαηαιόγνπο) umask 777 (γηα αξρεία)

Αξρηθά --- rwx rwx rwx Αξρηθά --- rw- rw- rw-

- --- rwx rwx rwx - --- rwx rwx rwx

= --- --- --- --- = --- --- --- ---

000 000 000 000 000 000 000 000

0 0 0 0 0 0

umask 055 (γηα θαηαιόγνπο) umask 055 (γηα αξρεία)

Αξρηθά --- rwx rwx rwx Αξρηθά --- rw- rw- rw-

- --- --- r-x r-x - --- --- r-x r-x

= --- rwx -w- -w- = --- rw- -w- -w-

000 111 010 010 000 110 010 010

7 2 2 6 2 2

Σχήμα 5.10(α): Παράδειγμα ςωςτών υπολογιςμών επίδραςησ τησ umask ςτη δημιουργία αρχείων και
καταλόγων.

112
umask 044 (γηα θαηαιόγνπο) umask 044 (γηα αξρεία)
Αξρηθά --- rwx rwx rwx Αξρηθά --- rw- rw- rw-

- --- --- r-- r-- - --- --- r-- r--

= --- rwx -wx -wx = --- rw- -w- -w-

000 111 011 011 000 110 010 010

7 3 3 6 2 2

umask 022 (γηα θαηαιόγνπο) umask 022 (γηα αξρεία)

Αξρηθά --- rwx rwx rwx Αξρηθά --- rw- rw- rw-

- --- --- -w- -w- - --- --- -w- -w-

= --- rwx r-x r-x = --- rw- r-- r--

000 111 101 101 000 110 100 100

7 5 5 6 4 4

Σχήμα 5.10(β): Παράδειγμα ςωςτών υπολογιςμών επίδραςησ τησ umask ςτη δημιουργία αρχείων και
καταλόγων.

113
5.4 Αζθήζεηο γηα εμάζθεζε

΢ηόρνο
Άδεηεο ρξήζεο. Ο επεμεξγαζηήο θεηκέλνπ vi.

Άζθεζε 1
΢ε έλα ηεξκαηηθφ δνθηκάζηε ηα εμήο:
1. Γείηε ηελ ηηκή ηεο umask (κάζθα δηθαησκάησλ)

2. Γεκηνπξγήζηε έλαλ θαηάινγν κε φλνκα lab4. Πνηα είλαη ηα δηθαηψκαηα πνπ πεξηκέλεηε λα έρεη ν
θαηάινγνο κε βάζε ηελ ηηκή ηεο umask; Γείηε ηα δηθαηψκαηα ρξεζηκνπνηψληαο ηελ εληνιή stat.

3. ΢’ έλα λέν ηεξκαηηθφ, θάληε login ζηνλ aetos.it.teithe.gr.

4. Γείηε ηελ ηηκή ηεο umask (ζην απνκαθξπζκέλν ζχζηεκα)

5. Δπαλαιάβεηε ην βήκα δχν (2). Αιιάμηε ηα δηθαηψκαηα ηνπ lab4 ζε 755.

6. Κάληε cd ζην lab4 θαη εθηειέζηε ηελ εληνιή: whoami>myid

7. Ζ παξαπάλσ εληνιή ζα εκθαλίζεη ην φλνκα ηνπ ηξέρνληνο ρξήζηε. Γελ ζα ην εκθαλίζεη φκσο ζην
ηεξκαηηθφ, ζα απνζεθεχζεη ηα απνηειέζκαηα ηεο ζην αξρείν κε φλνκα myid. Πνηα δηθαηψκαηα ρξήζεο
έρεη ην αξρείν myid; Δίλαη αλακελφκελα κε βάζε ηελ ηηκή ηεο umask;

Εντολή > αρτείο


Δθηειεί ηελ εληνιή. Σα απνηειέζκαηα όκσο ηεο εληνιήο δελ εκθαλίδνληαη ζην ηεξκαηηθό αιιά
απνζεθεύνληαη ζην αξρείν. Αλ ην αξρείν ππάξρεη ήδε, ηόηε δηαγξάθεηαη απηόκαηα θαη
μαλαδεκηνπξγείηαη. Πεξηζζόηεξα γηα ηελ αλαθαηεύζπλζε ζα δνύκε ζην Κεθάιαην 7.

8. Αιιάμηε ην umask ζε 000 θαη δεκηνπξγείζηε έλα αξρείν κε φλνκα public. Πνηα είλαη ηα δηθαηψκαηά
ηνπ;

9. Υξεζηκνπνηψληαο ηελ chmod, αιιάμηε ηα δηθαηψκαηά ηνπ ζε “rwxrw-r--“.

10. Φηηάμηε ηα παξαθάησ αξρεία θαη ρξεζηκνπνηψληαο ηελ chmod δψζηε ηνπο ηα δηθαηψκαηα πνπ θαίλνληαη
ζηνλ πίλαθα:
file1 rwx---r--
file2 ---rwx--x
file3 -w-r--r-x
file4 rwx-w-rw-
dir1 rwx--x--x
11. Απφ ηνλ θαηάινγν /bin αληηγξάςηε ζηνλ ηξέρνληα (lab4) ην αξρείν ls θαη δψζηε ηνπ ην φλνκα myls
(αληηγξάςαηε ηελ εληνιή/εθηειέζηκν ηεο ls).

12. Δθηειέζηε ηελ εληνιή myls. Μπνξείηε λα ηελ εθηειέζεηε;

13. Δθηειέζηε ηελ εληνιή ./myls. Μπνξείηε λα ηελ εθηειέζεηε;

114
14. Αθαηξέζηε ην δηθαίσκα “x” απφ ην myls. Μπνξείηε λα ηελ εθηειέζεηε;

15. Πξνζζέζηε ην δηθαίσκα “x” θαη αθαηξέζηε ηα δηθαηψκαηα “w”,”r”. Μπνξείηε λα ηελ εθηειέζεηε;

Όηαλ πιεθηξνινγνύκε κηα εληνιή γηα εθηέιεζε ζην θέιπθνο, ην θέιπθνο δελ ςάρλεη λα ηε
βξεη ζηνλ ηξέρνληα θαηάινγν. Φάρλεη λα βξεη ηα εθηειέζηκα αξρεία εληνιώλ κέζα ζε έλα ζύλνιν
από θαηαιόγνπο. Απηό ην ζύλνιν θαηαιόγσλ νλνκάδεηαη $PATH. To $PATH είλαη κηα κεηαβιεηή
πεξηβάιινληνο, πεξηζζόηεξα γηα ηηο κεηαβιεηέο πεξηβάιινληνο ζα δνύκε ζην Κεθάιαην 8. Απηή ε
κεηαβιεηή είλαη κηα ζπκβνινζεηξά (string) ε νπνία πεξηέρεη δηαδξνκέο θαηαιόγσλ, κέζα ζηνπο
νπνίνπο ην θέιπθνο ζα ςάμεη λα βξεη ην εθηειέζηκν πνπ αληηζηνηρεί ζηελ εληνιή πνπ έδσζε ν
ρξήζηεο. Μπνξείηε λα δείηε ηελ ηηκή απηήο ηεο κεηαβιεηήο κε ηελ εληνιή:

echo $PATH

Μέζα ζε απηήλ ηελ ζπκβνινζεηξά , νη δηαδξνκέο ρσξίδνληαη κεηαμύ ηνπο κε ηνλ


ραξαθηήξα «:». Γηα λα εθηειέζνπκε έλα πξόγξακκα, ην νπνίν είλαη απνζεθεπκέλν ζε θάθειν ν
νπνίνο δελ πεξηιακβάλεηαη ζην PATH, ζα πξέπεη λα πιεθηξνινγήζνπκε ηελ απόιπηε ή ζρεηηθή
δηαδξνκή πξνο ην εθηειέζηκν, πρ: ην ./myls είλαη κηα ζρεηηθή δηαδξνκή πξνο ην
αξρείν myls ηνπ ηξέρνληνο θαηαιόγνπ. Βιέπνληαο ηνλ ραξαθηήξα «/», ην θέιπθνο θαηαιαβαίλεη
όηη δόζεθε δηαδξνκή πξνο εθηειέζηκν θαη όρη κόλν ην όλνκα ηνπ εθηειέζηκνπ, επνκέλσο, δελ
ςάρλεη ζην PATH, αιιά αθνινπζεί ηε δηαδξνκή.

16. Ζ εληνιή which κε φξηζκα ην φλνκα κηαο εληνιήο, εκθαλίδεη ηελ απφιπηε δηαδξνκή γηα ην εθηειέζηκν
ηεο εληνιήο. Βξείηε πνην είλαη ην εθηειέζηκν ηεο εληνιήο date θαη ηεο εληνιήο man.

Άζθεζε 2
΢ε έλα ηεξκαηηθφ δνθηκάζηε ηα εμήο:
1. Βξείηε ρξεζηκνπνηψληαο ηελ εληνιή who πνηνη ρξήζηεο είλαη ζπλδεδεκέλνη απηή ηε ζηηγκή ζηνλ
ππνινγηζηή aetos.it.teithe.gr.

2. Υξεζηκνπνηψληαο κπαιαληέξ (wildcards), βξείηε πνηνη θνηηεηέο έρνπλ ζην home directory ηνπο,
θαηάινγν κε ην φλνκα lab4 ν νπνίνο πεξηέρεη αξρείν κε ην φλνκα myid. Γείηε ηα πεξηερφκελα κεξηθψλ
αξρείσλ “myid” ησλ ζπκθνηηεηψλ ζαο.

3. Κιεηδψζηε ην δηθφ ζαο αξρείν myid κε ηέηνην ηξφπν, ψζηε νη ππφινηπνη ρξήζηεο λα κελ κπνξνχλ λα
δνπλ ηα πεξηερφκελά ηνπ. Υξεζηκνπνηήζηε ηελ εληνιή chmod.

4. Γψζηε, ζην αξρείν ζαο myid, ην δηθαίσκα κφλν ηνπ “write” ζε φινπο ηνπο ππφινηπνπο ρξήζηεο (θαη
group) θαη αθαηξέζηε γηα απηνχο ηνπο ρξήζηεο ηα δηθαηψκαηα read/execute. Δλλνείηαη φηη γηα ηνλ εαπηφ
ζαο δηαηεξείηε ηα δηθαηψκαηα read/write.

5. Γηα κεξηθά απφ ηα αξρεία κε ην φλνκα myid ησλ ππνινίπσλ ρξεζηψλ, δνθηκάζηε λα εθηειέζεηε ηελ
εληνιή ηνπ ηχπνπ:

(date;whoami) >> ~dimitris/lab4/myid

115
Όπνπ dimitris, ην φλνκα ηνπ ρξήζηε πνπ εληνπίζαηε φηη έρεη ην παξαπάλσ αξρείν. Ζ παξαπάλσ εληνιή
εθηειεί ηηο εληνιέο date (εκθαλίδεη ψξα) θαη whoami (εκθαλίδεη πνηνο ρξήζηεο είκαη). Σα απνηειέζκαηά ηνπο,
φκσο, δελ εκθαλίδνληαη ζηελ νζφλε, αιιά γίλνληαη “append” ζην αξρείν πνπ νξίδνπκε. Δάλ δελ ζαο εκθάληζε
ην κήλπκα “Permission denied” ηφηε ε εληνιή εθηειέζηεθε. Δάλ ζαο εκθάληζε ην παξαπάλσ κήλπκα ηφηε
πξνθαλψο δελ έρεηε ην δηθαίσκα λα γξάςεηε ζην παξαπάλσ αξρείν. Γνθηκάζηε ηελ παξαπάλσ εληνιή θαη ζε
αξρεία άιισλ ρξεζηψλ κέρξη λα θαηαθέξεηε λα γξάςεηε ζε αξρεία δπν ή ηξηψλ ηνπιάρηζηνλ ζπκθνηηεηψλ
ζαο.

Εντολή >> αρτείο

Δθηειεί ηελ εληνιή. Σα απνηειέζκαηα όκσο ηεο εληνιήο δελ εκθαλίδνληαη ζην ηεξκαηηθό αιιά
απνζεθεύνληαη ζην αξρείν. Αλ ην αξρείν ππάξρεη ήδε, ηόηε ηα απνηειέζκαηα ηεο εληνιήο γξάθνληαη
ζην ηέινο ηνπ αξρείνπ (append).

1. Κάζε θνξά πνπ δνθηκάδεηε ηελ παξαπάλσ εληνιή ζε έλα αξρείν, δνθηκάδεηε αλ κπνξείηε λα δείηε θαη ηα
πεξηερφκελα ηνπ αξρείνπ κε ηελ εληνιή cat. Διέγμηε ηηο άδεηεο ρξήζεο ηνπ θάζε αξρείνπ.

2. Γνθηκάζηε αλ κπνξείηε λα αιιάμεηε ηηο άδεηεο ρξήζεο ελφο αξρείνπ myid πνπ αλήθεη ζε άιινλ ρξήζηε.

3. Πφζνη (θαη πνηνη) ρξήζηεο θαηάθεξαλ λα «πεηξάμνπλ» ην δηθφ ζαο αξρείν; Γείηε ηα πεξηερφκελά ηνπ.

4. Μεηνλνκάζηε ην αξρείν ζαο ζε myid2.

Άζθεζε 3
Δμνηθείσζε κε ηνλ επεμεξγαζηή θεηκέλνπ vi. Γείηε ην Παξάξηεκα Α γηα νδεγίεο ρξήζεο ηνπ vi.

1. Δθηειέζηε ηελ εληνιή:

vi myid2

Μπνξείηε λα ηξνπνπνηήζεηε ηα πεξηερφκελα απηνχ ηνπ αξρείνπ.

2. Δθηειέζηε ηελ εληνιή:

vi

Δηζάγεηε θάπνην θείκελν θαη απνζεθεχζηε ην κε φλνκα ηεο αξεζθείαο ζαο ζην θάθειν /tmp. ΢εκείσζε: ε
εληνιή “:w filename” ζην filename κπνξεί λα δερζεί είηε ζρεηηθή είηε απφιπηε δηαδξνκή γηα έλα φλνκα
αξρείνπ.

5.5 Αλαθνξέο
[1] GNU Linux Programmer's Manual: umask structure.
[2] GNU coreutils Reference Manual: chmod command.
[3] Andrew S. Tanenbaum, Modern Operating Systems, 3rd edition, page 279.

116
[4] Brian Fox, Chet Ramey. GNU Bash, General Commands Manual.
[5] Maurice J. Bach. The Design of the Unix Operating System, 1986.
[6] WikiPedia. inode, February 2015. [ http://en.wikipedia.org/wiki/Inode ]

117
Κεθάιαην 6

6 Καλνληθέο Δθθξάζεηο
Μηα θαλνληθή έθθξαζε [1, 3] είλαη έλαο ζχληνκνο θαη ζαθήο ηξφπνο έθθξαζεο ελφο κνηίβνπ αλαδήηεζεο
ραξαθηήξσλ. Υξεζηκνπνηνχληαη δηάθνξεο ζπληνκνγξαθίεο γηα ηηο θαλνληθέο εθθξάζεηο φπσο: RegExp,
RegEx ή θαη RE. Οη θαλνληθέο εθθξάζεηο απνηεινχληαη απφ ζπλδπαζκφ θαλνληθψλ ραξαθηήξσλ κε έλαλ ή
πεξηζζφηεξνπο κεηαραξαθηήξεο. Οη κεηαραξαθηήξεο είλαη ραξαθηήξεο κε εηδηθή ζεκαζία. Οη θαλνληθέο
εθθξάζεηο ρξεζηκνπνηνχληαη θπξίσο γηα έιεγρν ζπκβνινζεηξψλ ή γηα εχξεζε ζπγθεθξηκέλσλ ζηνηρείσλ κέζα
ζε κηα ζπκβνινζεηξά (ή γεληθφηεξα ζε έλα αξρείν) ή θαη γηα εχξεζε θαη αληηθαηάζηαζε ελφο κνηίβνπ κε έλα
άιιν αλ γηα παξάδεηγκα ζε έλα αξρείν ζέινπκε λα αληηθαηαζηήζνπκε ηηο εκεξνκελίεο ηεο κνξθήο
ΖΖ/ΜΜ/ΔΔΔΔ (πρ. 10/03/2015) κε ηελ κνξθή EEEE-MM-HH (πρ. 2015-03-10).
Ζ ηδέα ησλ θαλνληθψλ εθθξάζεσλ εκθαλίζηεθε ηνλ 1950, φηαλ ν Ακεξηθαλφο καζεκαηηθφο Stephen
Kleene επηζεκνπνίεζε ηελ πεξηγξαθή κηαο «Καλνληθήο Γιψζζαο» (Regular Language). Οη Καλνληθέο
Δθθξάζεηο ρξεζηκνπνηήζεθαλ επξέσο ζην UNIX κε ηηο εληνιέο ed, sed, grep, vi, awk θα.
Οη Καλνληθέο Δθθξάζεηο δελ είλαη κφλν δπλαηφηεηα ηνπ Unix. ΢ην Unix ρξεζηκνπνηνχληαη ηδηαίηεξα
ιφγσ ησλ πξνγξακκάησλ πνπ αλαθέξζεθαλ, αιιά ε ρξήζε ηνπο είλαη ζέκα ππνζηήξημεο απφ ηηο εθαξκνγέο
πνπ ρξεζηκνπνηνχκε.
Όιεο ζρεδφλ νη γιψζζεο πξνγξακκαηηζκνχ ππνζηεξίδνπλ θαλνληθέο εθθξάζεηο. Δίηε κέζσ
βηβιηνζεθψλ, φπσο νη C, C++, είηε ελζσκαησκέλεο ζηε γιψζζα. Όιεο νη λέεο γιψζζεο πξνγξακκαηηζκνχ
έρνπλ ελζσκαησκέλε ηε δπλαηφηεηα ρεηξηζκνχ θαλνληθψλ εθθξάζεσλ, φπσο νη perl, php, JavaScript, θ.ά.
΢ην παξφλ θεθάιαην ζα κειεηήζνπκε ηηο θαλνληθέο εθθξάζεηο κέζα απφ ηε ρξήζε ηεο εληνιήο grep
(global regular expression print) [2]. ΢ε κεηαγελέζηεξν θεθάιαην ζα κειεηήζνπκε ηε ρξήζε ησλ θαλνληθψλ
εθθξάζεσλ κε ηελ εληνιή sed.

6.1 Γνκή θαλνληθώλ Δθθξάζεσλ


Μηα θαλνληθή έθθξαζε είλαη παξφκνηα κε κηα καζεκαηηθή έθθξαζε. Μηα καζεκαηηθή έθθξαζε απνηειείηαη
απφ ηειεζηένπο (operands) θαη ηειεζηέο (operators). Μηα θαλνληθή έθθξαζε απνηειείηαη απφ atoms θαη
operators. Σν atom πξνζδηνξίδεη απηφ πνπ αλαδεηνχκε ή ην ζεκείν ηνπ θεηκέλνπ, ελψ ν ηειεζηήο
πξνζδηνξίδεη ηηο πξάμεηο ή ζχλζεηνπο ζπλδπαζκνχο κεηαμχ ησλ atoms.

΢ρήκα 6.1: Καλνληθέο Δθθξάζεηο.

119
Έλα atom κπνξεί λα είλαη θάηη απφ ηα παξαθάησ:

 Έλαο απιφο ραξαθηήξαο: δειψλεη αλαδήηεζε ηνπ ζπγθεθξηκέλνπ ραξαθηήξα.


 Ο εηδηθφο ραξαθηήξαο ".": δειψλεη αλαδήηεζε ελφο νπνηνπδήπνηε ραξαθηήξα.
 Μηα θιάζε ραξαθηήξσλ νξηδφκελε κε ηηο αγθχιεο []: δειψλεη αλαδήηεζε ελφο ραξαθηήξα πνπ
νξίδεηαη ζηελ θιάζε.
 Έλαο εηδηθφο ραξαθηήξαο Άγθπξα (anchor): δειψλεη ζέζε.
 Αλαθνξά πξνο ηα πίζσ (back reference): δειψλεη αλαδήηεζε θάπνηνπ ζηνηρείνπ πνπ έρεη ήδε
μαλαβξεζεί.

΢ρήκα 6.2: Σν ζύλνιν ησλ atoms.

Απφ ηελ άιιε κεξηά, κηα πξάμε κπνξεί λα είλαη κηα απφ ηηο παξαθάησ:

 Πξάμε αθνινπζίαο (sequence): Γελ ζπκβνιίδεηαη κε θαλέλαλ ραξαθηήξα.


 Πξάμε Ή (OR): δειψλεη ελαιιαθηηθή θαλνληθή έθθξαζε. ΢πκβνιίδεηαη κε ηνλ ραξαθηήξα "|".
 Πξάμε Δπαλάιεςεο (repetition): Γειψλεη επαλάιεςε ηνπ πξνεγνχκελνπ atom. Τπάξρνπλ πνιιέο
πξάμεηο επαλάιεςεο θαη ηα ζχκβνια είλαη: "*", "+", "?", "{n,m}", "{n}", "{n,}".
 Πξάμε νκαδνπνίεζεο (group): ΢πκβνιίδεηαη κε ηηο παξελζέζεηο.
 Πξάμε απνζήθεπζεο (save): ΢πκβνιίδεηαη κε ηηο παξελζέζεηο επίζεο.

΢ρήκα 6.3: Σν ζύλνιν ησλ ηειεζηέσλ.

6.2 Σα atoms

6.2.1 Έλαο απιόο ραξαθηήξαο

Ζ πην απιή πεξίπησζε ελφο atom είλαη έλαο απιφο ραξαθηήξαο. ΢ην Γηαδξαζηηθφ ΢ρήκα 6.4 παξνπζηάδεηαη ε
πην απιή πεξίπησζε κηαο θαλνληθήο έθθξαζεο πνπ απνηειείηαη κφλν απφ έλα atom. Έζησ φηη απηφ ην atom
είλαη ν απιφο ραξαθηήξαο “L”. Μηα θαλνληθή έθθξαζε ειέγρεηαη ψζηε λα εμαθξηβσζεί αλ ηαηξηάδεη ζε
θάπνηα ζπκβνινζεηξά (string). Έζησ φηη ειέγρνπκε ηελ πξνεγνχκελε θαλνληθή έθθξαζε επάλσ ζηε
ζπκβνινζεηξά "HELLO". Δζσηεξηθά, ην φπνην ζχζηεκα ειέγρνπ, πξνζπαζεί λα ηαηξηάμεη ηελ θαλνληθή

120
έθθξαζε ζηε ζπκβνινζεηξά θάλνληαο φινπο ηνπο δπλαηνχο ειέγρνπο κέρξη λα ηαηξηάμεη ε έθθξαζε ζε θάπνην
ζεκείν ή κέρξη λα εμαληιεζνχλ φινη νη δπλαηνί ζπλδπαζκνί.

 Απηφ ην ΢ρήκα είλαη Γηαδξαζηηθφ.


Αλαηξέμηε ζηελ ειεθηξνληθή έθδνζε.

΢ρήκα 6.4: Παξάδεηγκα RegExp: "L", String: "HELLO".

΢ην Γηαδξαζηηθφ ΢ρήκα 6.5 θαίλεηαη φηη εμαληινχληαη νη δπλαηνί ζπλδπαζκνί θαη ε θαλνληθή
έθθξαζε "Κ" δελ ηαηξηάδεη ζηε ζπκβνινζεηξά "HELLO". Σφηε ην ηειηθφ απνηέιεζκα ηνπ ειέγρνπ είλαη
αξλεηηθφ.

 Απηφ ην ΢ρήκα είλαη Γηαδξαζηηθφ.


Αλαηξέμηε ζηελ ειεθηξνληθή έθδνζε.

΢ρήκα 6.5: Παξάδεηγκα RegExp: "K", String: "HELLO".

6.2.2 Η πξάμε ηεο Αθνινπζίαο


Δθφζνλ δελ ππάξρεη θάπνην ζχκβνιν πξάμεο, ελλνείηαη ε πξάμε ηεο αθνινπζίαο. ΢ην παξαθάησ παξάδεηγκα
(Γηαδξαζηηθφ ΢ρήκα 6.6), ε θαλνληθή έθθξαζε πνπ αλαδεηνχκε είλαη ε "ELL". Οπζηαζηηθά, αλαδεηνχκε ηνλ
ραξαθηήξα "E", ν νπνίνο πξέπεη λα αθνινπζείηαη απφ ηνλ ραξαθηήξα "L", ν νπνίνο πξέπεη λα αθνινπζείηαη
απφ ηνλ ραξαθηήξα "L". Ο κεραληζκφο ειέγρνπ θαλνληθψλ εθθξάζεσλ ζα πξαγκαηνπνηήζεη φινπο ηνπο
δπλαηνχο ζπλδπαζκνχο, κέρξη λα πεηχρεη ηαίξηαζκα, μεθηλψληαο ηηο ζπγθξίζεηο απφ ηνλ πξψην ραξαθηήξα.

 Απηφ ην ΢ρήκα είλαη Γηαδξαζηηθφ.


Αλαηξέμηε ζηελ ειεθηξνληθή έθδνζε.

΢ρήκα 6.6: Παξάδεηγκα RegExp: "K", String: "HELLO".

6.2.3 Σν atom "."


Σν επφκελν atom πνπ αλαθέξακε είλαη ν εηδηθφο ραξαθηήξαο ".". ΢εκαίλεη «νπνηνζδήπνηε ραξαθηήξαο»,
αθφκε θαη αλ απηφο ν ραξαθηήξαο δελ θαίλεηαη, δειαδή είλαη θάπνηνο ραξαθηήξαο ειέγρνπ. ΢ην παξάδεηγκα
(Γηαδξαζηηθφ ΢ρήκα 6.7), αλαδεηνχκε ηελ πην απιή πεξίπησζε, ηελ θαλνληθή έθθξαζε ".". Όπσο θαίλεηαη
θαη ζην ζρήκα, ε "." ζα ηαηξηάμεη ζηνλ πξψην δπλαηφ ραξαθηήξα.

121
 Απηφ ην ΢ρήκα είλαη Γηαδξαζηηθφ.
Αλαηξέμηε ζηελ ειεθηξνληθή έθδνζε.

΢ρήκα 6.7: Παξάδεηγκα RegExp: ".", String: "HELLO".

Σν επφκελν ζρήκα (Γηαδξαζηηθφ ΢ρήκα 6.8) δείρλεη αθφκε δπν απιέο πεξηπηψζεηο. Ζ πξψηε
πεξίπησζε είλαη αλαδήηεζε ηεο θαλνληθήο έθθξαζεο "Δ.", δειαδή αλαδήηεζε ηνπ "Δ" πνπ λα αθνινπζείηαη
απφ έλαλ νπνηνδήπνηε ραξαθηήξα. Απηή ε θαλνληθή έθθξαζε ζα ηαηξηάμεη ζην ηκήκα ηεο ζπκβνινζεηξάο
"EL", δειαδή ε "." ζα ηαηξηάμεη ζην γξάκκα "L". Πξνθαλψο, ζα κπνξνχζε λα ηαηξηάμεη ζε νπνηνδήπνηε
γξάκκα ή ζχκβνιν εθηφο απφ ην «ηίπνηα». ΢ην δεχηεξν παξάδεηγκα, γίλεηαη αλαδήηεζε ηεο θαλνληθήο
έθθξαζεο "Ο.". Σν κφλν ζεκείν πνπ ππάξρεη ν ραξαθηήξαο "Ο" είλαη ζην ηέινο ηεο ζπκβνινζεηξάο
"HELLO". Όκσο, κεηά ην "Ο" δελ αθνινπζεί άιινο ραξαθηήξαο, ζπλεπψο, ε "." δελ κπνξεί λα ηαηξηάμεη κε
θάηη. Άξα ε δεχηεξε θαλνληθή έθθξαζε "Ο." δελ ηαηξηάδεη ζην "HELLO".

 Απηφ ην ΢ρήκα είλαη


Γηαδξαζηηθφ. Αλαηξέμηε
ζηελ ειεθηξνληθή έθδνζε.

΢ρήκα 6.8: Παξάδεηγκα RegExp: "E." θαη "O.", String: "HELLO".

6.2.4 Σν atom θιάζεο ραξαθηήξσλ


Σν atom θιάζε ραξαθηήξσλ νξίδεη έλα ζχλνιν ραξαθηήξσλ ηνπ ζπλφινπ ραξαθηήξσλ πνπ ρξεζηκνπνηείηαη
(ASCII, ISO-8859, UTF-8 θηι.). Ζ θιάζε ραξαθηήξσλ νξίδεηαη φπσο ζηνπο ραξαθηήξεο κπαιαληέξ ηνπ
θειχθνπο (Βιέπε Κεθάιαην 4). Ζ κφλε δηαθνξά κε ηα ζχλνια ησλ ραξαθηήξσλ κπαιαληέξ είλαη φηη δελ
κπνξεί λα ρξεζηκνπνηεζεί ν ραξαθηήξαο "!" γηα άξλεζε, παξά κφλν ν "^".

Πίλαθαο 6.1: Οη θιάζεηο ραξαθηήξσλ

΢ύκβνιν Δμήγεζε
[xyz] ζεκαίλεη έλαο αθξηβψο ραξαθηήξαο απφ ην ζχλνιν ραξαθηήξσλ: ("x", "y", "z" ).
ζεκαίλεη έλαο αθξηβψο ραξαθηήξαο – νπνηνζδήπνηε ραξαθηήξαο εθηφο ησλ ("x", "y", "z" ).
[^xyz]
Σν ζχκβνιν "^" ακέζσο κεηά ηελ αγθχιε "[" δειψλεη άξλεζε.
[abcdxyz] Δάλ νη ραξαθηήξεο ηνπ ζπλφινπ πνπ δειψλνπκε είλαη ζπλερφκελνη ζηνλ πίλαθα
[a-dxyz] ραξαθηήξσλ, ηφηε κπνξεί λα ρξεζηκνπνηεζεί ε παχια "-" γηα λα δειψζεη "απφ - έσο". Όια
[a-dx-z] ηα πξνεγνχκελα είλαη ηζνδχλακα.
Μπνξεί λα γίλεη ζπλδπαζκφο ηνπ εχξνπο ("-") κε ηελ άξλεζε. Σν πξνεγνχκελν ζεκαίλεη
[^a-dxyz] έλαο νπνηνζδήπνηε ραξαθηήξαο, αιιά φρη θάπνηνο απφ ηνπο ("a", "b", "c", "d", "x", "y",
"z").

Δπίζεο, ππάξρνπλ θαη ηα πξνθαζνξηζκέλα ζχλνια ραξαθηήξσλ πνπ αλαθέξζεθαλ ζηνλ Πίλαθα 4.2.
Σα πξνθαζνξηζκέλα ζχλνια ραξαθηήξσλ κπνξνχλ λα ρξεζηκνπνηεζνχλ ζε κηα θιάζε φπσο νπνηνδήπνηε

122
εχξνο ραξαθηήξσλ. Έηζη, ζην παξαθάησ παξάδεηγκα, ζπλδπάδνπκε κέζα ζε κηα θιάζε έλα πξνθαζνξηζκέλν
ζχλνιν θαη ηνπο ραξαθηήξεο "," θαη "+". Ζ ρξήζε ησλ πξνθαζνξηζκέλσλ ζπλφισλ πξνηηκάηαη, φπνπ είλαη
βέβαηα εθηθηή, δηφηη αθνινπζεί ηνπο θαλφλεο ηνπ ζπλφινπ ραξαθηήξσλ (charset) πνπ ρξεζηκνπνηείηαη θάζε
θνξά. Παξάδεηγκα ην [[:upper:]] ζα δνπιέςεη ζσζηά ζε φιεο ηηο γιψζζεο θαη γηα φια ηα γξάκκαηα, είηε
Αγγιηθά, είηε Διιεληθά, είηε Κπξηιιηθά, είηε ... Κηλέδηθα. Αλ ν πξνγξακκαηηζηήο κηαο εθαξκνγήο δελ
επηζπκεί λα ρξεζηκνπνηήζεη ην [[:upper:]], αιιά ην [A-ZA-Χ], ηφηε θαιχπηεη κφλν δπν γιψζζεο (Αγγιηθά-
Διιεληθά) θαη βέβαηα ε θαλνληθή έθθξαζε (θαη ην πξφγξακκα πνπ ζα ηελ πεξηέρεη) ζα πξέπεη λα είλαη
γξακκέλε κε ηε ζσζηή θσδηθνπνίεζε ραξαθηήξσλ.

[[:digit:],+] ⇔ [0-9,+] ⇔ [0123456789,+]

 Η ρξήζε ησλ πξνθαζνξηζκέλσλ ζπλόισλ όπσο ην [:upper:] ζα πξέπεη λα πξνηηκάηαη έλαληη


ησλ ηζνδύλακσλ νξηζκώλ από ηνλ ρξήζηε-πξνγξακκαηηζηή.

6.2.5 Σν atom άγθπξα


Οη άγθπξεο δελ αληηζηνηρνχληαη κε ραξαθηήξεο ηεο ζπκβνινζεηξάο εηζφδνπ αιιά κε ζέζεηο κέζα ζηε
ζπκβνινζεηξά. Υξεζηκνπνηνχληαη γηα λα αληηζηνηρήζνπκε ηελ ππφινηπε θαλνληθή έθθξαζε ζε ζπγθεθξηκέλν
ηκήκα ηεο ζπκβνινζεηξάο εηζφδνπ.

Πίλαθαο 6.2: Οη πεξηζζόηεξν ζπρλέο άγθπξεο.

΢ύκβνιν Δμήγεζε
^ ΢εκαίλεη αξρή ζπκβνινζεηξάο.
$ ΢εκαίλεη ηέινο ζπκβνινζεηξάο.
\< ΢εκαίλεη αξρή ιέμεο. Οη ιέμεηο νξηνζεηνχληαη απφ ηα θελά θαη ηα ζεκεία ζηίμεο.
\> ΢εκαίλεη ηέινο ιέμεο.

΢ηνλ Πίλαθα 6.2 βιέπνπκε ηε ζεκαζία ηνπ θάζε ζπκβφινπ, ελψ ζην ΢ρήκα 6.9 κε ηα θφθθηλα βέιε
θαίλνληαη ηα ζεκεία πνπ κπνξεί λα ηαηξηάμεη ε θάζε άγθπξα κέζα ζηε ζπκβνινζεηξά "One line of text.". Ζ
αξρή ιέμεο ( \<) ζην ζπγθεθξηκέλν παξάδεηγκα ηαηξηάδεη θαη ζηελ αξρή ζπκβνινζεηξάο. Δάλ πξηλ απφ ηελ
πξψηε ιέμε ππήξρε θάπνην θελφ δηάζηεκα, ηφηε ε αξρή ιέμεο δελ ζα ηαπηηδφηαλ κε ηελ αξρή ζπκβνινζεηξάο.
Δπίζεο παξαηεξνχκε φηη ην ηέινο ιέμεο δελ ηαπηίδεηαη κε ην ηέινο ζπκβνινζεηξάο, επεηδή ππάξρεη ν
ραξαθηήξαο "." ακέζσο κεηά ηε ιέμε θαη πξηλ απφ ην ηέινο.

123
΢ρήκα 6.9: Παξάδεηγκα ζέζεσλ αγθπξώλ.

6.3 Σειεζηέο

6.3.1 Ο ηειεζηήο αθνινπζίαο


΢ηελ Παξάγξαθν 6.2.2 παξνπζηάζηεθε ν ηειεζηήο αθνινπζίαο. Θπκίδνπκε φηη ν ηειεζηήο αθνινπζίαο
ζπκβνιίδεηαη κε ηελ απνπζία θάπνηνπ ζπκβφινπ. Όηαλ, δειαδή, ζε κηα θαλνληθή έθθξαζε ππάξρνπλ δπν
atoms ζπλερφκελα, ηφηε ελλνείηαη ελδηάκεζα ν ηειεζηήο αθνινπζίαο. ΢ην Γηαδξαζηηθφ ΢ρήκα
6.10παξνπζηάδεηαη αθφκε έλα παξάδεηγκα, φπνπ ρξεζηκνπνηείηαη ν ηειεζηήο αθνινπζίαο ζε ζπλδπαζκφ κε ην
atom ".". Δδψ ζα πξέπεη λα παξαηεξήζνπκε φηη, φζν κεγαιψλνπλ νη θαλνληθέο εθθξάζεηο θαη φζν γίλνληαη
πην γεληθέο (ην atom "." δεκηνπξγεί κηα γεληθφηεηα), ηφηε θαη ηα βήκαηα θαη επνκέλσο ν ρξφλνο ειέγρνπ ηεο
θαλνληθήο έθθξαζεο απμάλεηαη.

 Απηφ ην ΢ρήκα είλαη Γηαδξαζηηθφ.


Αλαηξέμηε ζηελ ειεθηξνληθή έθδνζε.

΢ρήκα 6.10: Παξάδεηγκα RegExp: "Α.Σ", String: "CHARACTER".

Μεξηθά παξαδείγκαηα κε ηνλ ηειεζηή αθνινπζίαο παξνπζηάδνληαη ζηνλ Πίλαθα 6.3.

Πίλαθαο 6.3: Παξαδείγκαηα κε ηειεζηή αθνινπζίαο.

Καλνληθή Έθθξαζε Δμήγεζε


Αλαδήηεζε ηνπ "t", λα αθνινπζεί ην "e", λα αθνινπζεί ην "s", λα αθνινπζεί
test
ην "t" (νπζηαζηηθά ε ιέμε "test").
Αλαδήηεζε ηνπ "x", λα αθνινπζεί έλα ςεθίν απφ ηα (0, 1, 2, 3, 4, 5,6, 7, 8, 9,
A, B, C, D, E, F) θαη λα αθνινπζεί αθφκε έλα ςεθίν απφ ηα (0, 1, 2, 3, 4, 5,6,
7, 8, 9, A, B, C, D, E, F). Αο ζεκεησζεί φηη δελ ππάξρεη κε θαλέλαλ ηξφπν
x[0-9A-F][0-9A-F]
ζπζρέηηζε ησλ δπν ηειεπηαίσλ ςεθίσλ, δειαδή ηαηξηάδεη ε ζπκβνινζεηξά
"x66" αιιά θαη ε "x6E". Οη δπν θιάζεηο ραξαθηήξσλ πνπ νξίζακε, αλ θαη
ίδηεο, κπνξνχλ λα ηαηξηάδνπλ ζε δηαθνξεηηθά ςεθία.
^[0-9] Αλαδήηεζε ηεο αξρήο ζπκβνινζεηξάο θαη έπεηηα έλα αξηζκεηηθφ ςεθίν.

124
Αλαδήηεζε ηεο αξρήο ζπκβνινζεηξάο, έπεηηα έλα αξηζκεηηθφ ςεθίν θαη λα
^[0-9]$ αθνινπζεί ην ηέινο ζπκβνινζεηξάο. Οπζηαζηηθά, ζα ηαηξηάμεη ζε
ζπκβνινζεηξέο πνπ απνηεινχληαη απφ έλαλ κφλν αξηζκεηηθφ ραξαθηήξα.
Αλαδήηεζε ηεο αξρήο ζπκβνινζεηξάο θαη λα αθνινπζεί ην ηέινο
ζπκβνινζεηξάο. Οπζηαζηηθά ζα ηαηξηάμεη ζε ζπκβνινζεηξέο πνπ είλαη θελέο,
^$ δειαδή έρνπλ κήθνο 0 ςεθία. Πξνζνρή, ε θελή ζπκβνινζεηξά (empty string)
είλαη θάηη δηαθνξεηηθφ απφ κηα ηηκή NULL γηα κηα ζπκβνινζεηξά ζε κηα
γιψζζα πξνγξακκαηηζκνχ.
Αλαδήηεζε ηεο αξρήο ζπκβνινζεηξάο, έπεηηα έλαλ νπνηνλδήπνηε ραξαθηήξα
θαη λα αθνινπζεί ην ηέινο ζπκβνινζεηξάο. Οπζηαζηηθά ζα ηαηξηάμεη ζε
^.$
ζπκβνινζεηξέο πνπ απνηεινχληαη απφ έλαλ κφλν ραξαθηήξα, νπνηνλδήπνηε
ραξαθηήξα, αθφκε θαη ην θελφ δηάζηεκα (space).
Αλαδήηεζε ηνπ "0", έπεηηα έλα νπνηνδήπνηε αξηζκεηηθφ ςεθίν θαη λα
αθνινπζεί πάιη ην "0". Θα ηαηξηάμεη ζε 3ςήθηνπο αξηζκνχο πνπ μεθηλνχλ θαη
ηειεηψλνπλ ζε "0", αιιά φρη κφλν. Θα ηαηξηάμεη ζηε ζπκβνινζεηξά "050"
0[0-9]0
αιιά θαη ζηε ζπκβνινζεηξά "Your score is 805043", δηφηη ππάξρεη ε
δεηνχκελε αθνινπζία ζπλδπαζκψλ ραξαθηήξσλ κέζα ζηε ζπγθεθξηκέλε
ζπκβνινζεηξά.

6.3.2 Ο ηειεζηήο ελαιιαγήο (OR)


Ο ηειεζηήο OR δειψλεη ζηελ θαλνληθή έθθξαζε ελαιιαθηηθή πεξίπησζε. Σν θάζε ηκήκα δεμηά θαη αξηζηεξά
ηνπ OR (|) απνηειεί κηα πιήξε θαλνληθή έθθξαζε θαη κεηαμχ ηνπο είλαη αλεμάξηεηεο.

Πίλαθαο 6.4: Παξαδείγκαηα κε ηνλ ηειεζηή OR.

΢ύκβνιν Δμήγεζε
job|hobby Θα ηαηξηάμεη, είηε ηελ θαλνληθή έθθξαζε "job", είηε ηελ "hobby".
Θα ηαηξηάμεη κηα απφ ηηο ηξεηο θαλνληθέο εθθξάζεηο. Γελ ππάξρεη πεξηνξηζκφο
here|there|away
ζην πιήζνο ησλ ελαιιαθηηθψλ.
Θα ηαηξηάμεη κηα απφ ηηο ηξεηο θαλνληθέο εθθξάζεηο. Οη θαλνληθέο εθθξάζεηο
^Test|^This|\<Mr\> κπνξνχλ λα πεξηέρνπλ νηηδήπνηε, αθφκε θαη άγθπξεο, θαη είλαη αλεμάξηεηεο
κεηαμχ ηνπο.

6.3.3 Ο ηειεζηήο επαλάιεςεο


Ο ηειεζηήο επαλάιεςεο (repetition operator) θαζνξίδεη πφζεο θνξέο πξέπεη λα επαλαιεθζεί ην atom πνπ
ππάξρεη αθξηβψο πξηλ ηελ επαλάιεςε. Ζ γεληθή ζχληαμε ηνπ ηειεζηή επαλάιεςεο είλαη

{n,m}

θαη δειψλεη πσο ην πξνεγνχκελν atom ζα πξέπεη λα επαλαιεθζεί απφ n έσο m ην πνιχ θνξέο. Δάλ ην m
παξαιείπεηαη, ηφηε ελλνείηαη ην άπεηξν (∞). ΢ηελ πεξίπησζε πνπ ην n είλαη ίζν κε ην m, ηφηε ρξεζηκνπνηείηαη
ε ζχληαμε: {n}.
Οη πεξηζζφηεξν ζπρλνί (θαηά ηε ρξήζε) ζπλδπαζκνί είλαη νη (n=1, m=∞), (n=0, m=∞), (n=0, m=1).
Γη’ απηνχο ηνπο ζπλδπαζκνχο πνπ είλαη ζπρλνί, ππάξρνπλ νη ζπληνκνγξαθίεο "+", "*" θαη "?", φπσο
πεξηγξάθνληαη ζηνλ Πίλαθα 6.5.

125
Πίλαθαο 6.5: Οη ηειεζηέο επαλάιεςεο.

΢ύκβνιν Δμήγεζε
{n} Σν πξνεγνχκελν atom αθξηβψο n θνξέο.
{n,m} Σν πξνεγνχκελν atom απφ n έσο m θνξέο
{n,} Σν πξνεγνχκελν atom απφ n θνξέο ή πεξηζζφηεξεο.
* ή {0,} Σν πξνεγνχκελν atom 0 θνξέο ή πεξηζζφηεξεο.
+ ή {1,} Σν πξνεγνχκελν atom 1 θνξά ή πεξηζζφηεξεο.
? ή {0,1} Σν πξνεγνχκελν atom 1 θνξά ή θακία.

Όηαλ ν ηειεζηήο επαλάιεςεο είλαη έλαο κφλν αξηζκφο, παξάδεηγκα {5}, ζηελ πξαγκαηηθφηεηα
απνηειεί απιά ζπληνκνγξαθία ηεο θαλνληθήο έθθξαζεο. Αληί, ινηπφλ, λα γξάςνπκε "ΑΒΒΒΒΒC",
γξάθνπκε "ΑΒ{5}C". Κάηη ηέηνην δελ απμάλεη ηελ πνιππινθφηεηα ειέγρνπ ηεο θαλνληθήο έθθξαζεο.
΢ηελ άιιε πεξίπησζε, αλ ν ηειεζηήο επαλάιεςεο πεξηέρεη εχξνο, παξάδεηγκα {2,7}, ηφηε δεκηνπξγεί
πνιιέο ελαιιαθηηθέο θαλνληθέο εθθξάζεηο. Έηζη ην"ΑΒ{2,7}C", είλαη ηζνδχλακν
κε "ΑΒΒC|ABBBC|ABBBBC|ABBBBB|ABBBBBBC|ABBBBBBBC". Απηφ ζηελ νπζία απμάλεη πνιχ ηελ
πνιππινθφηεηα ειέγρνπ, αθνχ ζα πξέπεη λα ειεγρζνχλ 5 θαλνληθέο εθθξάζεηο αληί γηα κηα. Πξνθαλψο, νη
βηβιηνζήθεο θαλνληθψλ εθθξάζεσλ εκπεξηέρνπλ βειηηζηνπνηήζεηο, ψζηε λα απνθεχγνληαη πεξηηηνί έιεγρνη.
Παξφια απηά, ππάξρεη απμεκέλε πνιππινθφηεηα.
Δηδηθά, αλ πεξηιακβάλεηαη ζηελ θαλνληθή έθθξαζε ν ηειεζηήο "*", φπνπ δελ ππάξρεη άλσ φξην,
δεκηνπξγνχληαη ηδηαίηεξα πνιινί δπλαηνί ζπλδπαζκνί. Έλα κηθξφ παξάδεηγκα παξνπζηάδνπκε
ζην Γηαδξαζηηθφ ΢ρήκα 6.11, γηα λα δείμνπκε ηελ αχμεζε πνιππινθφηεηαο. ΢ην ζπγθεθξηκέλν παξάδεηγκα,
νη δπλαηνί ζπλδπαζκνί πνπ ειέγρνληαη είλαη ζρεηηθά ιίγνη, δηφηη ε θαλνληθή έθθξαζε είλαη απιή
(εθαξκφδεηαη ν ηειεζηήο επαλάιεςεο ζε ραξαθηήξα θαη φρη ζε θιάζε ή "."). Δπηπιένλ, ε ζπκβνινζεηξά
ειέγρνπ είλαη κηθξή. Παξφια απηά, φπσο θαίλεηαη ζην ΢ρήκα 6.12, απαηηνχληαη ηνπιάρηζηνλ 14 έιεγρνη.

 Απηφ ην ΢ρήκα είλαη Γηαδξαζηηθφ.


Αλαηξέμηε ζηελ ειεθηξνληθή έθδνζε.

΢ρήκα 6.11: Παξάδεηγκα RegExp: "BC*D", String: "ABBCCCDD"

126
΢ρήκα 6.12: Γελδξνεηδήο αλαπαξάζηαζε ησλ δπλαηώλ ζπλδπαζκώλ-ειέγρσλ ηνπ παξαδείγκαηνο από ην Γηαδξαζηηθό
΢ρήκα 6.11.

Η ρξήζε ησλ ηειεζηώλ επαλάιεςεο απμάλεη ηδηαίηεξα ηνλ ρξόλν ειέγρνπ. Γηα απηό, ζα πξέπεη λα
γίλεηαη πξνζεθηηθή «θαηαζθεπή» κηαο θαλνληθήο έθθξαζεο, ώζηε λα κελ δεκηνπξγεί άρξεζηνπο
ζπλδπαζκνύο, ηδίσο εάλ πξόθεηηαη λα ειεγρζεί ζε κεγάιν όγθν δεδνκέλσλ (πρ. log files).

Πίλαθαο 6.6: Παξαδείγκαηα κε ηειεζηέο επαλάιεςεο.

Καλνληθή
Δμήγεζε Ιζνδύλακν Σαηξηάδεη ζε
Έθθξαζε
Σν πξνεγνχκελν atom
ΑAA, BAAABBB,
Α{3} (ην Α) αθξηβψο 3 ΑAA
XYZAAAAAAATT
θνξέο.
Σν B απφ 2 έσο 4 BB, XYBBBBBZX,
B{2,4} BB|BBB|BBBB
θνξέο QWEBBBBBBBBBB
Σν B απφ 1 έσο 3
ΑΒ{1,3} θνξέο. Πξνζνρή, κφλν AB|ABB|ABBB ABB, ABBBBABB
ην "Β", φρη θαη ην Α.

127
To A απφ 1 έσο 3
ABBB,
A{1,3}B θνξέο θαη κεηά ην Β AB|AAB|AAAB
BAABBBBABBB
κηα θνξά.
To A απφ 1 έσο 3
AB|ABB|ABBB|AAB|AABB| ABBB,
A{1,3}B{1,3} θνξέο θαη κεηά ην B
AABBB|AAAB|AAABB|AAABBB CXZAABBBBBABZX
απφ 1 έσο 3 θνξέο.
ABBBBC,
To A κηα θνξά, κεηά
ΑΒBBBC|ABBBBBC|ABBBBBBC|... CXZAABBBBBBCCB
ην Β 4 θνξέο ή
ΑΒ{4,}C ... B,
πεξηζζφηεξεο θαη κεηά
ABBBBBBBBBBBBBBBBBBBBBBC|... CBABBBBBBCABBB
ην C. BBZX
Ζ θιάζε ραξαθηήξσλ ABB, ABA,
[ΑΒ]{2,3} [ΑΒ] απφ δπν έσο [AB][AB]|[AB][AB][AB] XYZABXYZ,
ηξεηο θνξέο. ZAXBBBXX
Αλαδήηεζε αξρήο
ζπκβνινζεηξάο, λα
αθνινπζνχλ απφ δπν
έσο ηξεηο νπνηνηδήπνηε
ραξαθηήξεο. QWE, 8A0,
^.{2,3}$ ^..$|^...$
Οπζηαζηηθά, ζα WE, $#A, -
ηαηξηάμεη ζε
ζπκβνινζεηξέο πνπ
έρνπλ κήθνο δπν ή
ηξία.
010, 98201122,
Αλαδήηεζε ηνπ 0 ή 1
[01]{3} [01][01][01] 230109901,
ηξεηο θνξέο.
23010990110

΢ηνλ Πίλαθα 6.6, παξνπζηάδνληαη κεξηθά παξαδείγκαηα κε ηνλ ηειεζηή επαλάιεςεο. Ηδηαίηεξε
πξνζνρή ζα πξέπεη λα δνζεί ζηα ηξία ηειεπηαία παξαδείγκαηα. ΢ην [AB]{2,3} ε επαλάιεςε αθνξά ηελ
θιάζε ραξαθηήξσλ, αιιά φρη ηνλ ραξαθηήξα πνπ ηαίξηαμε. Οκνίσο θαη ζηηο επφκελεο δπν πεξηπηψζεηο. ΢ηελ
ηειεπηαία πεξίπησζε, νη ζπλδπαζκνί πνπ ζα ηαηξηάμνπλ είλαη νη:

1. 000,
2. 001,
3. 010,
4. 011,
5. 100,
6. 101,
7. 110,
8. 111,

δειαδή φινη νη δπλαηνί ζπλδπαζκνί. Αλ ζα ζέιακε κηα θαλνληθή έθθξαζε ε νπνία λα ηαηξηάμεη κφλν ζηνπο
ζπλδπαζκνχο 000 ή 111 ή 555 ή 777, ηφηε ην [0157]{3} δελ είλαη ε ζσζηή ιύζε. Θα δνχκε
ζηελ Παξάγξαθν 6.3.5 πνηνο είλαη ν ζσζηφο θαη κνλαδηθφο ηξφπνο λα ην πεηχρνπκε απηφ.

128
Πίλαθαο 6.7: Παξαδείγκαηα κε ηειεζηέο επαλάιεςεο.

Καλνληθή Έθθξαζε Δμήγεζε Ιζνδύλακν Σαηξηάδεη ζε


Σν Α κεδέλ ή πεξηζζφηεξεο ΑAAΒ, BAAΒBBB,
Α*B B|AB|AAB|AAAB|...
θνξέο θαη κεηά ην Β. XYZΒAAΒATT, DBD
Σν Α κηα ή πεξηζζφηεξεο θνξέο ΑAAΒ, BAAΒBBB,
Α+Β AB|AAB|AAAB|...
θαη κεηά ην Β. XYZBAAΒATT
Σν B, λα αθνινπζεί ην Α κηα ή ΒΑΒ, ΑΒΒXCZ,
BΑ?Β ΒΒ|ΒAB
θακία θνξά θαη κεηά ην Β. XYAΒBABAAB
Σν B, λα αθνινπζεί ην Α κηα ή ΒΑΒ, ΑΒΒXCZ,
B.?Β ΒΒ|ΒAB
θακία θνξά θαη κεηά ην Β. XYAΒBABAAB
Σν B, λα αθνινπζεί ην Α κηα ή ΒΑΒ, ΑΒΒXCZ,
B.*Β ΒΒ|ΒAB
θακία θνξά θαη κεηά ην Β. XYAΒBABAAB
Σν B, λα αθνινπζεί ην Α κηα ή ΒΑΒ, ΑΒΒXCZ,
^B.*Β ΒΒ|ΒAB
θακία θνξά θαη κεηά ην Β. XYAΒBABAAB
Σν B, λα αθνινπζεί ην Α κηα ή ΒΑΒ, ΑΒΒXCZ,
^B.*Β$ ΒΒ|ΒAB
θακία θνξά θαη κεηά ην Β. XYAΒBABAAB
Σν B, λα αθνινπζεί ην Α κηα ή ΒΑΒ, ΑΒΒXCZ,
[0-9]+,?[0-9]* ΒΒ|ΒAB
θακία θνξά θαη κεηά ην Β. XYAΒBABAAB

6.3.4 Σειεζηήο Οκαδνπνίεζεο (Group Operator)


Με ηελ νκαδνπνίεζε ελνπνηνχκε έλα ζχλνιν απφ atoms, ψζηε λα εθαξκνζηεί ζην ζχλνιν έλαο ηειεζηήο
(επαλάιεςεο ή ελαιιαγήο). Οη παξελζέζεηο ρξεζηκνπνηνχληαη ζρεδφλ φπσο θαη ζηηο καζεκαηηθέο εθθξάζεηο.
Έηζη, ην (ΑΒ){2} ζεκαίλεη φηη πξέπεη λα εθαξκνζηεί ν ηειεζηήο επαλάιεςεο ζην ηκήκα "ΑΒ". Άξα,
νπζηαζηηθά ην πξνεγνχκελν είλαη ηζνδχλακν κε ΑΒΑΒ.
Αληίζηνηρα ηπ A(AB){1,3}XY είλαη ηζνδχλακν κε:

 AABXY
 AABABXY
 AABABABXY

δειαδή, ηειηθά κε: AABXY|AABABXY|AABABABXY


Μπνξεί λα ππάξρεη θαη θσιεπκέλε νκαδνπνίεζε, φπσο γηα παξάδεηγκα Α((ΥΕ){2}Ρ{3}){3}. Σν
πξνεγνχκελν είλαη ηζνδχλακν κε: A(XZXZPPP){3} θαη ηειηθά ηζνδχλακν κεAXZXZPPPXZXZPPXZXZPP.
Όηαλ ρξεζηκνπνηείηαη ε νκαδνπνίεζε γηα ηνλ ηειεζηή ελαιιαγήο, ρξεζηκνπνηείηαη, γηα λα
νκαδνπνηεζνχλ νη ελαιιαθηηθέο επηινγέο. Έηζη, ε θαλνληθή έθθξαζε (This|That) is
(a|an|the) ζα ηαηξηάμεη ζηνπο ζπλδπαζκνχο πνπ παξνπζηάδνληαη ζηνλ Πίλαθα 6.8.

129
Πίλαθαο 6.8: Γπλαηνί ζπλδπαζκνί γηα ηελ Καλνληθή
Έθθξαζε: (This|That) is (a|an|the).

A/A ΢πλδπαζκνί
1. This is a
2. This is an
3. This is the
4. That is a
5. That is an
6. That is the

6.3.5 Αλαθνξά Πίζσ (Back Reference)


Με ηε ρξήζε παξελζέζεσλ θαη ηελ νκαδνπνίεζε δίλεηαη ζπγρξφλσο θαη «εληνιή απνζήθεπζεο ζε
απνηακηεπηή» (buffer) ηεο ζπκβνινζεηξάο πνπ ηαίξηαμε ζην ηκήκα ηεο θαλνληθήο έθθξαζεο πνπ είλαη ζηηο
παξελζέζεηο. Τπάξρνπλ ελληά απνηακηεπηέο (buffers) πνπ κπνξνχλ λα ρξεζηκνπνηεζνχλ γηα απνζήθεπζε. Οη
απνηακηεπηέο απηνί ζπκβνιίδνληαη κε \1, \2, \3, ..., \9 θαη ρξεζηκνπνηνχληαη φπσο νη κεηαβιεηέο. Με ηηο
παξελζέζεηο γεκίδνπλ δεδνκέλα, κε ηελ αλαθνξά (πρ: \2) ρξεζηκνπνηνχληαη ηα δεδνκέλα. Όζεο παξελζέζεηο
ππάξρνπλ, ηφζνη απνηακηεπηέο γεκίδνπλ. Οη ραξαθηήξεο πνπ ζα ηαηξηάμνπλ ζηελ πξψηε παξέλζεζε ζα
απνζεθεπηνχλ ζην "\1", απηά πνπ ζα ηαηξηάμνπλ ζηε δεχηεξε παξέλζεζε ζην "\2" θ.ν.θ. ΢ηνλ Πίλαθα
6.9 παξνπζηάδνληαη κεξηθά παξαδείγκαηα ρξήζεο ηεο αλαθνξάο πίζσ.

Η αλαθνξά πίζσ (back reference) θαη νη απνηακηεπηέο \1, \2,...\9 είλαη ν κόλνο ηξόπνο, ώζηε ζε
κηα θαλνληθή έθθξαζε λα δηαηππώζνπκε ηελ έλλνηα ηεο επαλάιεςεο θάπνησλ ραξαθηήξσλ.

Πίλαθαο 6.9: Παξαδείγκαηα κε Αλαθνξά πίζσ.

Καλνληθή Έθθξαζε Δμήγεζε Παξαδείγκαηα


Αλαδήηεζε ελφο νπνηνπδήπνηε ραξαθηήξα θαη
AA, BAAAB,
(.)\1 απνζήθεπζή ηνπ ζηνλ 1ν απνηακηεπηή θαη λα
αθνινπζείηαη απφ ην ίδην. XYZ++AS))AT
Αλαδήηεζε ελφο νπνηνπδήπνηε αξηζκεηηθνχ
55, 3258765,
ραξαθηήξα θαη απνζήθεπζή ηνπ ζηνλ
1ναπνηακηεπηή, λα αθνινπζνχλ νπνηνηδήπνηε θαη XYZ++AS))AT,
([0-9])[0-9]*\1
νζνηδήπνηε αξηζκεηηθνί ραξαθηήξεο θαη λα 435231, asdd22tf,
αθνινπζεί απηφ πνπ απνζεθεχηεθε ζηνλ
απνηακηεπηή \1. sdf45drr5, a5as5235
Αλαδήηεζε ηξηψλ αξηζκεηηθψλ ραξαθηήξσλ θαη
346346, 123123,
([0-9]{3})\1 απνζήθεπζή ηνπο ζηνλ 1ν απνηακηεπηή θαη λα 51231237
αθνινπζνχληαη απφ ηνπο ίδηνπο.

130
Αλαδήηεζε ηξηψλ αξηζκεηηθψλ ραξαθηήξσλ θαη
απνζήθεπζή ηνπο ζηνλ 1ν απνηακηεπηή. Να 346346346,
([0-9]{3})\1[Α-
αθνινπζνχληαη απφ ηνπο ίδηνπο. Έπεηηα λα STAR987987TEST987,
Ε]*\1
ππάξρνπλ πξναηξεηηθά θεθαιαία γξάκκαηα θαη
ηέινο πάιη νη ίδηνη ηξεηο αξηζκεηηθνί ραξαθηήξεο. 123123ΣΡ123END

Αλαδήηεζε νπνηνπδήπνηε ραξαθηήξα θαη


απνζήθεπζή ηνπ ζηνλ "\1". Έπεηηα νπνηνζδήπνηε
(.)(.).{2}\2\1 ραξαθηήξαο θαη απνζήθεπζή ηνπ ζηνλ "\2". Έπεηηα ΑΒΥΤΒΑ, RΕΡ98ΡΔW
νπνηνηδήπνηε δπν ραξαθηήξεο. Έπεηηα ν "\2" θαη
ηέινο ν "\1".
Αλαδήηεζε νπνησλδήπνηε ηξηψλ ραξαθηήξσλ θαη
απνζήθεπζή ηνπο ζε ηξεηο απνηακηεπηέο "\1", "\2",
(.)(.)(.).*\3\2\1 "\3". Έπεηηα, νπνηνζδήπνηε ζπλδπαζκφο NΙΨΟΝ...ΟΦΗΝ
ραξαθηήξσλ θαη ηέινο νη ηξεηο κε αληίζηξνθε
ζεηξά.

6.3.6 Δηδηθνί ραξαθηήξεο θαη ν ραξαθηήξαο «\»


Ο ραξαθηήξαο «\» (backslash) ρξεζηκνπνηείηαη είηε γηα λα απνδψζεη εηδηθή ζεκαζία ζηνλ ραξαθηήξα πνπ
αθνινπζεί είηε γηα λα αλαηξέζεη ηελ εηδηθή ζεκαζία ηνπ (αλ είλαη εηδηθφο ραξαθηήξαο). Έηζη, ζε κηα θαλνληθή
έθθξαζε, αλ πξέπεη λα ζπκπεξηιεθζεί ν ραξαθηήξαο "*" θαη φρη ν ηειεζηήο "*", ζα πξέπεη λα αθπξσζεί ε
εηδηθή ηνπ ζεκαζία κε ην "\". Άξα, * ζεκαίλεη ηειεζηήο επαλάιεςεο, ελψ ην \* ζεκαίλεη ν ραξαθηήξαο "*".
Απφ ηελ άιιε κεξηά, ην "\" ρξεζηκνπνηείηαη θαη γηα λα πξνζδψζεη εηδηθή ζεκαζία ζηνλ ραξαθηήξα
πνπ αθνινπζεί φπσο νη πεξηπηψζεηο \<, \1, \2, ... θ.ά.
΢ε απηφ ην ζεκείν ζα πξέπεη λα παξαηεξεζεί πσο θάπνηνη ραξαθηήξεο απνθηνχλ ή ράλνπλ εηδηθή
ζεκαζία αλάινγα κε ην ζεκείν πνπ βξίζθνληαη κέζα ζηελ θαλνληθή έθθξαζε. Γηα παξάδεηγκα, αλαθέξακε
γηα ηνλ "^" φηη ζεκαίλεη αξρή ζπκβνινζεηξάο. Δπίζεο, ζεκαίλεη άξλεζε, φηαλ εκθαλίδεηαη κέζα ζε θιάζε
ραξαθηήξσλ. Απηέο νη δπν εηδηθέο ιεηηνπξγίεο ηζρχνπλ κφλν ζε ζπγθεθξηκέλεο ζέζεηο. Γηα παξάδεηγκα, ην "^"
ζεκαίλεη αξρή ζπκβνινζεηξάο κφλν φηαλ εκθαλίδεηαη ζηελ αξρή ηεο θαλνληθήο έθθξαζεο. Αλ εκθαλίδεηαη ζε
νπνηνδήπνηε άιιν ζεκείν, είλαη απιά ν ραξαθηήξαο "^". Αληίζηνηρα, κέζα ζε θιάζε ραξαθηήξσλ ζεκαίλεη
άξλεζε κφλν φηαλ βξίζθεηαη ακέζσο κεηά ην άγθηζηξν πνπ αλνίγεη. Παξάδεηγκα [^A] ζεκαίλεη έλαο
νπνηνζδήπνηε ραξαθηήξαο εθηφο απφ ηνλ "Α", ελψ [A^] ζεκαίλεη ν ραξαθηήξαο "Α" ή ν "^".

Πίλαθαο 6.10: Πίλαθαο εηδηθώλ ραξαθηήξσλ.

Χαξαθηήξαο Δμήγεζε
* Σειεζηήο επαλάιεςεο. Μεδέλ ή πεξηζζφηεξεο θνξέο.
+ Σειεζηήο επαλάιεςεο. Μηα ή πεξηζζφηεξεο θνξέο.
? Σειεζηήο επαλάιεςεο. Μεδέλ ή κηα θνξά.
[ Έλαξμε θιάζεο ραξαθηήξσλ.
Σέινο θιάζεο ραξαθηήξσλ κόλν όηαλ βξίζθεηαη κεηά από [. Γηαθνξεηηθά, ν απιφο
]
ραξαθηήξαο ]
{ Έλαξμε ηειεζηή επαλάιεςεο.
Σέινο ηειεζηή επαλάιεςεο κόλν όηαλ βξίζθεηαη κεηά από {. Γηαθνξεηηθά, ν απιφο
}
ραξαθηήξαο } .
() Οκαδνπνίεζε.
| Σειεζηήο ελαιιαγήο (OR).

131
 ΢εκαίλεη αξρή ζπκβνινζεηξάο φηαλ βξίζθεηαη ζηελ αξρή ηεο θαλνληθήο
έθθξαζεο.
^  ΢εκαίλεη άξλεζε φηαλ βξίζθεηαη ζηελ αξρή ηεο θιάζεο ραξαθηήξσλ, δειαδή
ακέζσο κεηά ην "[".
 Γελ έρεη εηδηθή ζεκαζία φηαλ βξίζθεηαη ζε νπνηαδήπνηε άιιε ζέζε.
 ΢εκαίλεη ηέινο ζπκβνινζεηξάο φηαλ βξίζθεηαη ζην ηέινο ηεο θαλνληθήο
$ έθθξαζεο.
 Γελ έρεη εηδηθή ζεκαζία φηαλ βξίζθεηαη ζε νπνηαδήπνηε άιιε ζέζε.
 ΢εκαίλεη εχξνο (απφ-έσο) φηαλ βξίζθεηαη κέζα ζε θιάζε ραξαθηήξσλ.
-
 Γελ έρεη εηδηθή ζεκαζία φηαλ βξίζθεηαη ζε νπνηαδήπνηε άιιε ζέζε. .
 ΢εκαίλεη ν απιφο ραξαθηήξαο "." φηαλ βξίζθεηαη κέζα ζε θιάζε ραξαθηήξσλ.
.  ΢εκαίλεη ην atom ".", δειαδή νπνηνζδήπνηε ραξαθηήξα, φηαλ βξίζθεηαη ζε
νπνηαδήπνηε άιιε ζέζε.
Μέζα ζε κηα θιάζε ραξαθηήξσλ, (ζρεδφλ) φινη νη εηδηθνί ραξαθηήξεο ράλνπλ ηελ
εηδηθή ζεκαζία ηνπο. πρ: [{}*()/+*?|.] ζεκαίλεη έλαο ραξαθηήξαο απφ
ηνπο {}*()/+*?|.

΢ε φιεο ηηο πξνεγνχκελεο πεξηπηψζεηο, εαλ ζέινπκε λα αλαηξέζνπκε ηελ εηδηθή ζεκαζία ελφο
ραξαθηήξα, ρξεζηκνπνηνχκε ηνλ ραξαθηήξα "\". Δπίζεο, ν ραξαθηήξαο "\" ζε πνιιέο πεξηπηψζεηο πξνζδίδεη
εηδηθή ζεκαζία ζηνλ ραξαθηήξα πνπ αθνινπζεί. Απηφ ζπλεζίδεηαη ζηηο πεξηζζφηεξεο γιψζζεο
πξνγξακκαηηζκνχ. Γηα παξάδεηγκα, ζηελ C θαη ζηελ Java είλαη ραξαθηεξηζηηθή ε ρξήζε ηνπ \n ην νπνίν
ζεκαίλεη αιιαγή γξακκήο (new line). Ο ίδηνο θαλφλαο επεθηείλεηαη θαη ζηηο θαλνληθέο εθθξάζεηο, κε
δηαθνξεηηθά βέβαηα ζχκβνια. ΢ηνλ Πίλαθα 6.11παξνπζηάδνληαη κεξηθέο πεξηπηψζεηο ρξήζεηο ηνπ "\" ζηηο
Καλνληθέο Δθθξάζεηο.

Πίλαθαο 6.11: Πίλαθαο εηδηθώλ ραξαθηήξσλ κε ην "\".

Χαξαθηήξαο Δμήγεζε
\1 .. \2 Αλαθνξά πίζσ (back reference).
\<, \> Άγθπξα (anchor).
΢πληφκεπζε γηα ην [a-zA-Z0-9_] (word). Υξεζηκνπνηείηαη ρσξίο ηα [],
\w
παξάδεηγκα: \<\w\w\> ζα ηαηξηάμεη ζηηο ιέμεηο κε δπν γξάκκαηα.
΢πληφκεπζε γηα ην [0-9] (digit). Υξεζηκνπνηείηαη ρσξίο ηα [],
\d
παξάδεηγκα: \<\d\d\> ζα ηαηξηάμεη ζηνπο αξηζκνχο κε δπν ςεθία.
\s ΢πληφκεπζε γηα ην θελφ δηάζηεκα (space).
\W, \D, \S Άξλεζε ησλ παξαπάλσ.

6.4 ΢ύλνια θαλνληθώλ εθθξάζεσλ


Τπάξρνπλ δηάθνξα ΢χλνια Καλνληθψλ Δθθξάζεσλ θαη φρη ζε φια ζπκβαηά κεηαμχ ηνπο. Σα δπν βαζηθφηεξα
΢χλνια Καλνληθψλ Δθθξάζεσλ είλαη απηά πνπ νξίδνληαη απφ ην πξφηππν ηεο IEEE POSIX θαη είλαη ηα:

 Βαζηθέο Καλνληθέο Δθθξάζεηο (Basic Regular Expressions) θαη ζπκβνιίδεηαη σο BRE.


 Δθηεηακέλεο Καλνληθέο Δθθξάζεηο (Extended Regular Expressions) θαη ζπκβνιίδεηαη σο ERE.

Σα δπν παξαπάλσ ζχλνια θαλνληθψλ εθθξάζεσλ κνηάδνπλ πάξα πνιχ κεηαμχ ηνπο, φκσο δηαθέξνπλ
ζηνπο ζπκβνιηζκνχο πνπ αλαθέξνληαη ζηνλ Πίλαθα 6.12. Οη ηειεζηέο επαλάιεςεο ?, + θαη { } θαζψο θαη ε

132
νκαδνπνίεζε θαη ε ελαιιαγή απαηηνχλ ηνλ ραξαθηήξα "\". ΢ηνλ Πίλαθα 6.12 επηπιένλ παξνπζηάδνληαη ηξία
παξαδείγκαηα δηαηχπσζεο κηαο θαλνληθήο έθθξαζεο ζε ERE θαη ε αθξηβψο αληίζηνηρε ζε BRE. Δίλαη
εκθαλέο φηη δελ ππάξρνπλ νπζηαζηηθέο δηαθνξέο.

Πίλαθαο 6.12: ΢ύγθξηζε ERE κε BRE".

ERE BRE
? \?
+ \+
{ } \{ \}
( ) \( \)
| \|
Παξαδείγκαηα
^[0-9]+ ^[0-9]\+
(test|runn)ing \(test\|runn\)ing
^.{4}a? ^.\{4\}a\?
Δπίζεο, νινθιεξσκέλν ζχλνιν θαλνληθψλ εθθξάζεσλ νξίδεηαη θαη ζηε γιψζζα perl, θαζφηη νη
θαλνληθέο εθθξάζεηο είλαη βαζηθφ ζπζηαηηθφ ηεο γιψζζαο perl. Οη θαλνληθέο εθθξάζεηο ηεο perl είλαη πάξα
πνιχ θνληά ζην ζχλνιν ERE.
Δθηφο απηψλ ε θάζε γιψζζα πξνγξακκαηηζκνχ νξίδεη θαη ρξεζηκνπνηεί ην δηθφ ηεο ζχλνιν
θαλνληθψλ εθθξάζεσλ θαη ηε δηθή ηεο βηβιηνζήθε. Όιεο νη λέεο γιψζζεο πξνγξακκαηηζκνχ (φπσο ε php θαη
ε javascript) ππνζηεξίδνπλ θαλνληθέο εθθξάζεηο. Μάιηζηα ε php είρε αλαπηχμεη δηθφ ηεο κεραληζκφ
θαλνληθψλ εθθξάζεσλ, αιιά πιένλ θαηαξγήζεθε θαη ρξεζηκνπνηείηαη ν κεραληζκφο ηεο perl απφ ηε
βηβιηνζήθε preg.

6.5 Η νηθνγέλεηα εληνιώλ grep


Σν φλνκα ησλ εληνιψλ πξνέξρεηαη απφ ηα αξρηθά Global Regular Expressions Print. Οη εληνιέο απηέο [2]
ρξεζηκνπνηνχληαη γηα ηελ αλαδήηεζε κηαο θαλνληθήο έθθξαζεο κέζα ζε αξρεία δεδνκέλσλ ή ζε ξνέο
δεδνκέλσλ (data streams). Ζ θαλνληθή ζπκπεξηθνξά ησλ εληνιψλ απηψλ είλαη λα εκθαλίδνπλ ηηο γξακκέο ηνπ
αξρείνπ πνπ ηαηξηάδνπλ ζηελ θαλνληθή έθθξαζε πνπ δφζεθε. Ζ γεληθή ζχληαμε ηεο εληνιήο grep αιιά θαη
ησλ ζπγγεληθψλ εληνιψλ είλαη:

grep [OPTIONS] regexp [files]

Οη βαζηθφηεξεο παξαιιαγεο ηεο grep είλαη νη:

 fgrep: Fast grep. Γελ ππνζηεξίδεη θαλνληθέο εθθξάζεηο, αιιά κφλν αλαδήηεζε ζηαζεξψλ
ζπκβνινζεηξψλ. Δίλαη ε πην γξήγνξε απφ φιεο ηεο νηθνγελείαο εμαηηίαο ησλ ιίγσλ δπλαηνηήησλ
ηεο** Έλα πξφγξακκα ή εληνιή, φζν πεξηζζφηεξεο δπλαηφηεηεο έρεη, ηφζν πην αξγφ γίλεηαη. Μπνξεί
λα εθηειεζηεί θαη σο grep -F.
 grep: Ζ βαζηθή εληνιή ηεο νηθνγέλεηαο. Τπνζηεξίδεη ην BRE.
 egrep: Extended grep. Τπνζηεξίδεη ην ERE. Μπνξεί λα εθηειεζηεί θαη σο grep -E.
 rgrep: Recursive grep. Κάλεη αλαδξνκηθή αλαδήηεζε ζε αξρεία θαη θαηαιφγνπο. Δίλαη ζπληφκεπζε
γηα ηε ζεκαία "-r" ηεο grep θαη κπνξεί λα εθηειεζηεί θαη σο: grep -r.

133
Γηα ηηο αλάγθεο ηνπ καζήκαηνο θαη γηα εθπαηδεπηηθνχο ιφγνπο πξνηείλεηαη λα ρξεζηκνπνηείηε ηελ
egrep, δηφηη ην ERE είλαη πην απιφ ζηε δηαηχπσζε, θαζψο απαηηεί ιηγφηεξν ηε ρξήζε ηνπ ραξαθηήξα "\".
Απαηηείηαη φκσο πξνζνρή φηαλ ρξεζηκνπνηείηαη, ηδίσο φηαλ ε αλαδήηεζε γίλεηαη ζε πνιιά ή πνιχ κεγάια
αξρεία, δηφηη, φπσο έγηλε ζαθέο λσξίηεξα ζην παξφλ θεθάιαην, ν έιεγρνο κηαο πεξίπινθεο θαλνληθήο
έθθξαζεο είλαη κηα δηαδηθαζία απαηηεηηθή ζε ππνινγηζηηθή ηζρχ.
΢ηνλ Πίλαθα 6.13 αλαθέξνληαη νη πεξηζζφηεξν ζπρλέο ζεκαίεο ησλ εληνιψλ grep. Γηα πεξηζζφηεξεο
ιεηηνπξγίεο θαη ιεπηνκέξεηεο κπνξείηε λα αλαηξέμεηε ζην εγρεηξίδην ρξήζεο ηεο εληνιήο (man grep).

Πίλαθαο 6.13: Πίλαθαο ζπρλώλ ζεκαηώλ ηεο grep.

΢εκαία Λεηηνπξγία
-n Δκθάληζε αξηζκνχ γξακκήο πξηλ απφ θάζε γξακκή.
Αληηζηξνθή ιεηηνπξγίαο. Αληί λα εκθαλίζεη ηηο γξακκέο πνπ ηαηξηάδνπλ ζηελ θαλνληθή
-v
έθθξαζε, εκθαλίδεη ηηο γξακκέο πνπ δελ ηαηξηάδνπλ.
Δκθαλίδεη κφλν ηα νλφκαηα αξρείσλ πνπ πεξηείραλ γξακκέο πνπ ηαίξηαμαλ ζηελ θαλνληθή
-l έθθξαζε θαη φρη ηηο γξακκέο ηηο ίδηεο. Έρεη λφεκα ε ρξήζε ηεο φηαλ γίλεηαη αλαδήηεζε ζε
πνιιά αξρεία.
Δκθαλίδεη κφλν ην πιήζνο ησλ γξακκψλ πνπ ηαίξηαμαλ ζηελ θαλνληθή έθθξαζε θαη φρη ηηο
-c
γξακκέο.
-i Αγλνεί ηε δηάθξηζε πεδψλ-θεθαιαίσλ.

Αθνινπζνχλ κεξηθά παξαδείγκαηα ρξήζεο. ΢ην παξαθάησ παξάδεηγκα γίλεηαη αλαδήηεζε ηεο ιέμεο "unix"
αγλνψληαο ηνλ δηαρσξηζκφ θεθαιαίσλ-πεδψλ ραξαθηήξσλ ζην αξρείν κε φλνκα file. ΢ε απηήλ ηελ πεξίπησζε
κπνξεί λα ρξεζηκνπνηεζεί νπνηαδήπνηε εληνιή ηεο νηθνγέλεηαο grep. Δθφζνλ, φκσο, δελ αλαδεηείηαη
θαλνληθή έθθξαζε, αιιά κηα ζηαζεξή αθνινπζία ραξαθηήξσλ, πξνηεηκάηαη ε εληνιή fgrep.

asidirop@dellpc:/tmp$ grep -i unix file


1 Δηζαγωγή ζηα Λεηηνπξγηθά ΢πζηήκαηα θαη ην Unix
ελδηαθέξεηαη λα κάζεη γηα ηα βαζηθά ζηνηρεία ηνπ Λεηηνπξγηθνύ
΢πζηήκαηνο UNIX ή
πξνγξακκαηηζκνύ ζην UNIX. ΢ηόρνο ηνπ καζήκαηνο είλαη νη θνηηεηέο
λα κειεηήζνπλ
asidirop@dellpc:/tmp$ fgrep -i unix file
1 Δηζαγωγή ζηα Λεηηνπξγηθά ΢πζηήκαηα θαη ην Unix
ελδηαθέξεηαη λα κάζεη γηα ηα βαζηθά ζηνηρεία ηνπ Λεηηνπξγηθνύ
΢πζηήκαηνο UNIX ή
πξνγξακκαηηζκνύ ζην UNIX. ΢ηόρνο ηνπ καζήκαηνο είλαη νη θνηηεηέο
λα κειεηήζνπλ

΢ην επφκελν παξάδεηγκα, αλαδεηνχκε ηε ιέμε 'apa' κέζα ζην αξρείν /etc/passwd. ΢ην απνηέιεζκα
πνπ παξνπζηάδνπκε έρνπκε παξαιείςεη κεξηθά ζηνηρεία θαζψο θαη αξθεηέο γξακκέο απνηειέζκαηνο. Ζ
επφκελε εληνιή, ζηελ νπνία αλαδεηείηαη θαη ε αξρή ζπκβνινζεηξάο, ζα εκθαλίζεη κφλν ηηο γξακκέο πνπ
μεθηλνχλ απφ 'apa'. Γηα ηελ πεξηγξαθή ηεο κνξθήο ηνπ αξρείνπ /etc/passwd, δείηε ην Παξάξηεκα Β.

134
asidirop@aetos:~$ grep 'apa' /etc/passwd
anpapad:x:x:x:Papadopoulos Anastasios:/home/student/x/anpapad:/bin/bash
anpap:x:x:x:Papagiannakis Anastasios:/home/student/x/anpap:/bin/bash
antpapad:x:x:x:Papadopoulos Antonios:/home/student/e/antpapad:/bin/bash
apamp:x:x:x:Ampatzoglou Apostolos:/home/staff/ektaktoi/apamp:/bin/bash
apapadop:x:x:x:Papadopoulos
Anastasios:/home/student/x/apapadop:/bin/bash
apapado:x:x:x:Papadopoulos Alexandros:/home/student/x/apapado:/bin/bash
apapad:x:x:x:Papadopoulos Aristeidis:/home/student/x/apapad:/bin/bash
asidirop@aetos:~$ grep '^apa' /etc/passwd
apamp:x:x:x:Ampatzoglou Apostolos:/home/staff/ektaktoi/apamp:/bin/bash
apapadop:x:x:x:Papadopoulos
Anastasios:/home/student/x/apapadop:/bin/bash
apa:x:x:x:Papadopoulos Alexandros:/home/student/x/apapado:/bin/bash

Oη παξαθάησ εληνιέο αλαδεηνχλ ζην αξρείν /etc/passwd ηνλ ρξήζηε πνπ ην φλνκα ρξήζηε
(username) μεθηλά κε 'asidiro'. Δληνπίδνληαη δπν γξακκέο ζην αξρείν. Αλ ζέιακε λα βξνχκε ηνλ ρξήζηε κε
αθξηβψο username 'asidiro', ηφηε ζα έπξεπε κε θάπνηνλ ηξφπν λα εμαηξεζεί απφ ηα απνηειέζκαηα ε γξακκή
πνπ μεθηλά κε 'asidirop', δειαδή ε γξακκή πνπ κεηά απφ ηε ζπκβνινζεηξά αλαδήηεζεο πεξηέρεη αθφκε έλα
γξάκκα. Απηφ ζα κπνξνχζακε λα ην πεηχρνπκε κε ηελ επφκελε εληνιή, δειαδή κεηά απφ ην 'asidiro' λα
αθνινπζεί θάηη πνπ δελ είλαη [a-z]. Αλ ππήξρε, φκσο, γξακκή πνπ μεθηλνχζε κε 'asidiro5' ζα ηελ εκθάληδε.
Δθφζνλ γλσξίδνπκε φηη ν ηεξκαηηζκφο ηνπ νλφκαηνο ρξήζηε θαζνξίδεηαη κε ηνλ ραξαθηήξα ":", ν πιένλ
αζθαιήο ηξφπνο είλαη λα ρξεζηκνπνηεζεί ε ηειεπηαία εληνιή.

asidirop@aetos:~$ grep '^asidiro' /etc/passwd


asidirop:x:x:x:Sidiropoulos Antonis,,,:/home/staff/it/asidirop:/bin/bash
asidiro:x:x:x:Sidiropoulos Alexios:/home/student/xx/asidiro:/bin/bash
asidirop@aetos:~$ grep '^asidiro[^a-z]' /etc/passwd
asidiro:x:x:x:Sidiropoulos Alexios:/home/student/xx/asidiro:/bin/bash
asidirop@aetos:~$ grep '^asidiro:' /etc/passwd
asidiro:x:x:x:Sidiropoulos Alexios:/home/student/xx/asidiro:/bin/bash

6.6 Καλνληθέο Δθθξάζεηο κε grep θαη νη ραξαθηήξεο κπαιαληέξ ηνπ θειύθνπο


Οη θαλνληθέο εθθξάζεηο κνηάδνπλ κε ηα κπαιαληέξ πνπ ρξεζηκνπνηεί ην θέιπθνο γηα ην ηαίξηαζκα ησλ
νλνκάησλ αξρείσλ. Όκσο δηαθέξνπλ θαη ζηε ρξήζε θαη ζηε ζχληαμε. Σα κπαιαληέξ εξκελεχνληαη απφ ην
θέιπθνο θαη ηαηξηάδνπλ ζε νλφκαηα αξρείσλ, ελψ νη θαλνληθέο εθθξάζεηο ζπλήζσο πξέπεη λα εξκελεπηνχλ
απφ εληνιέο (πρ: grep).
Αξθεηνί απφ ηνπο ραξαθηήξεο πνπ ρξεζηκνπνηνχληαη ζε κηα θαλνληθή έθθξαζε είλαη εηδηθνί
ραξαθηήξεο θαη γηα ην θέιπθνο, φπσο νη "*", "[]", "?". Όκσο, ππάξρεη δηαθνξεηηθή ζεκαζία θαη
ρξήζε ησλ ραξαθηήξσλ απηψλ. Αλ ην θέιπθνο αλαγλσξίζεη ζε κηα γξακκή εληνιήο θάπνηνλ εηδηθφ
ραξαθηήξα, ζα πξνζπαζήζεη λα ηνλ εξκελεχζεη. Απηή ε ελέξγεηα, φκσο, δελ είλαη επηζπκεηή ζηελ πεξίπησζε
πνπ ε γξακκή εληνιήο πεξηέρεη κηα Καλνληθή Έθθξαζε, ε νπνία ζέινπκε λα εξκελεπηεί απφ ηελ εληνιή (πρ.
grep). Γη’ απηφλ ηνλ ιφγν, ζα πξέπεη λα ρξεζηκνπνηνχληαη ηα εηζαγσγηθά, ψζηε λα απνηξαπεί ην θέιπθνο απφ
ην λα εξκελεχζεη ηνπο εηδηθνχο ραξαθηήξεο.
΢ην παξαθάησ παξάδεηγκα εκθαλίδνληαη αξρηθά ηα πεξηερφκελα ηνπ αξρείνπ file3. Ζ εληνιή grep
'fi*t' file3 ζα δψζεη δπν γξακκέο απνηειέζκαηνο, δειαδή ηηο γξακκέο πνπ πεξηέρνπλ ηνλ ραξαθηήξα
"f", κεηά ην "i" κεδέλ ή πεξηζζφηεξεο θνξέο θαη έπεηηα ην "t". ΢ηελ επφκελε εληνιή, φπνπ δελ
ρξεζηκνπνηνχληαη εηζαγσγηθά, ε εληνιή grep δελ εκθαλίδεη θαλέλα απνηέιεζκα. Γηαηί;

135
asidirop@dellpc:~/tmp/unix$ ls -l
total 40
-rw-r--r-- 1 asidirop asidirop 28 Μάξ 19 2012 f*
-rw-r--r-- 1 asidirop asidirop 17 Μάξ 19 2012 file
-rw-r--r-- 1 asidirop asidirop 32 Μάξ 19 2012 -file
-rw-r--r-- 1 asidirop asidirop 77 Μάξ 12 2012 file1.txt
-rw-r--r-- 1 asidirop asidirop 101 Μάξ 12 2012 file2.txt
-rw-r--r-- 1 asidirop asidirop 274 Απξ 4 2012 file3
-rw-r--r-- 1 asidirop asidirop 3080 Μάξ 12 2012 image1.jpg
-rw-r--r-- 1 asidirop asidirop 17 Μάξ 19 2012 test
-rw-r--r-- 1 asidirop asidirop 35 Μάξ 19 2012 test file
asidirop@dellpc:~/tmp/unix$ cat file3
All characters except the
listed special characters
match a single instance
of themselves. { and } are literal
characters, unless they're part
of a valid regular expression
token (e.g. the {n} quantifier).
this line must match fiiiitttt
this line must match also fttt
asidirop@dellpc:~/tmp/unix$ grep 'fi*t' file3
this line must match fiiiitttt
this line must match also fttt
asidirop@dellpc:~/tmp/unix$ grep fi*t file3
asidirop@dellpc:~/tmp/unix$

Aλ δνθηκάζνπκε λα δψζνπκε φιε ηελ ηειεπηαία εληνιή σο φξηζκα ζηελ εληνιή echo, ε echo απιά
ζα καο εκθαλίζεη ηε ζπκβνινζεηξά πνπ ηεο δφζεθε σο φξηζκα.

asidirop@dellpc:~/tmp/unix$ echo grep fi*t file3


grep file1.txt file2.txt file3
asidirop@dellpc:~/tmp/unix$

Βιέπνπκε, ινηπφλ, παξαθάησ φηη ε echo ζα καο εκθαλίζεη: grep file1.txt file2.txt
file, ην νπνίν ζεκαίλεη φηη ην θέιπθνο εξκήλεπζε ην fi*t θαη ην κεηέθξαζε ζηα νλφκαηα αξρείσλ file1.txt
θαη file2.txt. Έηζη ηειηθά, ζηελ εληνιή grep δίλνληαη ηξία νξίζκαηα. Σν πξψην φξηζκα (εθφζνλ δελ είλαη
ζεκαία) ζεσξεί ε grep φηη είλαη ε θαλνληθή έθθξαζε πξνο αλαδήηεζε. Γειαδή, ζηελ grep δφζεθε σο
θαλνληθή έθθξαζε ην "file1.txt". Όια ηα ππφινηπα νξίζκαηα ζα εθθξάδνπλ νλφκαηα αξρείσλ. ΢πλεπψο, ε
grep απηφ πνπ ζα θάλεη είλαη λα αλαδεηήζεη ηελ θαλνληθή έθθξαζε "file1.txt" κέζα ζηα αξρεία file2.txt θαη
file. Απηή ε ελέξγεηα απέρεη θαηά πνιχ απφ ηελ ελέξγεηα πνπ ζα εθηειεζηεί ρξεζηκνπνηψληαο ηα εηζαγσγηθά.

136
6.7 Αζθήζεηο γηα εμάζθεζε

΢ηόρνο
Δμάζθεζε κε ηηο θαλνληθέο εθθξάζεηο θαη ηελ εληνιή grep (egrep).

Άζθεζε 1
΢ην Γηαδξαζηηθφ ΢ρήκα 6.13 δνθηκάζηε δηάθνξεο θαλνληθέο εθθξάζεηο. Δπίζεο, δνθηκάζηε ηηο θαλνληθέο
εθθξάζεηο "to", "t.n" θαη "a[o-t].".

 Απηφ ην ΢ρήκα
είλαη Γηαδξαζηηθφ.
Αλαηξέμηε ζηελ
ειεθηξνληθή
έθδνζε.

΢ρήκα 6.13: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο.

Δμάζθεζε ζην Σεξκαηηθό


Γεκηνπξγήζηε κέζα απφ έλα ηεξκαηηθφ ηα ηξία παξαπάλσ αξρεία ρξεζηκνπνηψληαο ηνλ vi. Γνθηκάζηε κε ηελ
εληνιή grep, αλαδήηεζε ηνπ "to" ζην file1, ηνπ "t.n" ζην file2 θαη ηνπιάρηζηνλ"a[o-t]." ζην file3.
Αλ ρξεζηκνπνηήζεηε ζηελ grep ηε ζεκαία "--color", ηφηε ζα ρξσκαηίδεη ηα ζεκεία θάζε γξακκήο πνπ
ηαίξηαμαλ ζηελ θαλνληθή έθθξαζε (φπσο ζην δηαδξαζηηθφ ζρήκα). Παξάδεηγκα:

grep --color 'to' file1

137
Άζθεζε 2

 Απηφ ην ΢ρήκα
είλαη Γηαδξαζηηθφ.
Αλαηξέμηε ζηελ
ειεθηξνληθή
έθδνζε.

΢ρήκα 6.14: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο.

Δμάζθεζε ζην ηεξκαηηθό


Γεκηνπξγήζηε κέζα απφ έλα ηεξκαηηθφ ην αξρείν “telephones” ρξεζηκνπνηψληαο ηνλ vi. Υξεζηκνπνηήζηε
ηελ εληνιή egrep, γηα λα βξείηε ηηο γξακκέο πνπ αληηζηνηρνχλ ζηηο παξαπάλσ εξσηήζεηο. Γηα ηηο εξσηήζεηο 5
θαη 7 ρξεζηκνπνηήζηε ηε ζεκαία -v ηεο grep, ψζηε λα απινπνηήζεηε ηελ θαλνληθή έθθξαζε.

Άζθεζε 3

 Απηφ ην ΢ρήκα
είλαη Γηαδξαζηηθφ.
Αλαηξέμηε ζηελ
ειεθηξνληθή
έθδνζε.

΢ρήκα 6.15: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο.

138
Πεηξακαηηζηείηε θαη δνθηκάζηε ηηο παξαθάησ θαλνληθέο εθθξάζεηο. Βξείηε ζε ηη αληηζηνηρεί ε θάζε
κηα:

1. 'a?'
2. '(a|b)+'
3. '.{2}'
4. '.{2,}'
5. '(.)\1'
6. '(.).*\1'
7. '(..).*\1'
8. '(.{3}).*\1'

Δμάζθεζε ζην ηεξκαηηθό


Γεκηνπξγήζηε κέζα απφ έλα ηεξκαηηθφ ην αξρείν “file_test” ρξεζηκνπνηψληαο ηνλ vi κε ηα παξαπάλσ
πεξηερφκελα. Υξεζηκνπνηήζηε ηηο παξαπάλσ θαλνληθέο εθθξάζεηο κε ηελ εληνιή egrep, γηα λα βξείηε ηηο
γξακκέο πνπ αληηζηνηρνχλ ζηηο παξαπάλσ εξσηήζεηο.

Άζθεζε 4
File: file4
The Unix operating system was pioneered by Ken
45
AQ
Feb 9, 1999
November 25, 2003
******* position_9 34567 pos_11
bio-informatics course **** position_01
Thompson! and Dennis Ritchie at Bell && Laboratories
*in the late 1960s. One of the primary goals in
99 77 88 123
11:45
9:30
00:27
2396-044-777
the design of the UNIX? System* was to create an
environment that promoted **** efficient program
development.
2394-222-789
3:00
08:23
12:00
271.27 tty
2310-555-999
2392-022-111
-56.44
123.679
May 29, 1453 phone 2391-333-888
info-question 77.59
-.987

139
 Απηφ ην ΢ρήκα
είλαη Γηαδξαζηηθφ.
Αλαηξέμηε ζηελ
ειεθηξνληθή
έθδνζε.

΢ρήκα 6.16: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο.

Δμάζθεζε ζην Σεξκαηηθό


Γεκηνπξγήζηε κέζα απφ έλα ηεξκαηηθφ ην αξρείν “file4” ρξεζηκνπνηψληαο ηνλ vi κε ηα παξαπάλσ
πεξηερφκελα. Υξεζηκνπνηήζηε ηηο θαλνληθέο εθθξάζεηο πνπ βξήθαηε κε ηελ εληνιή egrep γηα λα βξείηε ηηο
γξακκέο πνπ αληηζηνηρνχλ ζηηο παξαπάλσ εξσηήζεηο.

Άζθεζε 5

Μπνξνύκε λα βάινπκε δπν ή πεξηζζόηεξεο εληνιέο λα ζπλεξγαζηνύλ κεηαμύ ηνπο ρξεζηκνπνηώληαο


ηε δηαζσιήλσζε (pipelining). Παξάδεηγκα ε εληνιή:

ls -l | grep '^d'

ζα εθηειέζεη ηελ εληνιή ls -l, αιιά δελ ζα εκθαληζηεί ε έμνδόο ηεο ζην ηεξκαηηθό. Θα δνζεί ε
έμνδνο ηεο 1εο εληνιήο σο είζνδνο ζηελ επόκελε εληνιή. Η επόκελε εληνιή αλαδεηά ηηο γξακκέο
πνπ μεθηλνύλ κε ηνλ ραξαθηήξα "d". Άξα, πξαθηηθά ζα εκθαληζηνύλ κόλν νη θαηάινγνη.

asidirop@aetos:~$ cd /tmp
asidirop@aetos:/tmp$ ls -l
total 116
-rw------- 1 kvisnia x1415 57 Μάξ 23 21:11 adminer.invalid
-rw-r--r-- 1 gpseirak x1415 158 Μάξ 20 22:08 ankanogradiel
-rw-r--r-- 1 antomi x1415 1737 Μάξ 20 18:40 Domi
-rw-r--r-- 1 asidirop it 17 Μάξ 30 17:09 file1
-rw-r--r-- 1 asidirop it 25 Μάξ 30 17:09 file2
-rw-r--r-- 1 asidirop it 22 Μάξ 30 17:09 file3
-rw-r--r-- 1 aspyros x1415 28 Μάξ 21 00:07 first
-rw-r--r-- 1 asidirop it 17686 Μάξ 30 17:34 index.html

140
-rw-r--r-- 1 kxouvero x1415 93 Μάξ 25 12:01 JustATest
-rw-r--r-- 1 gkintzon x1415 41 Μάξ 20 21:13 kintzovi
drwxr-xr-x 2 asidirop it 4096 Μάξ 27 15:39 lab5
drwxr-xr-x 2 malexiou e1314 4096 Μάξ 27 12:34 lab5m
drwxr-xr-x 2 ekastia e1314 4096 Μάξ 27 12:44 lab5x
drwx------ 2 root root 16384 Ηαλ 31 2014 lost+found
-rw-r--r-- 1 arika x1314 58 Μάξ 25 21:59 TEST
asidirop@aetos:/tmp$ ls -l | grep '^d'
drwxr-xr-x 2 asidirop it 4096 Μάξ 27 15:39 lab5
drwxr-xr-x 2 malexiou e1314 4096 Μάξ 27 12:34 lab5m
drwxr-xr-x 2 ekastia e1314 4096 Μάξ 27 12:44 lab5x
drwx------ 2 root root 16384 Ηαλ 31 2014 lost+found
asidirop@aetos:/tmp$

Πεξηζζόηεξα γηα ηε δηαζσιήλσζε ζα κειεηήζνπκε ζην Κεθάιαην 7.

Γεκηνπξγήζηε ζε έλαλ θαηάινγν ηεο επηινγήο ζαο ηα αξρεία f1, f2, f3, f4, f5, f6 ,f7 κε ηα εμήο
δηθαηψκαηα:

 f1, 757
 f2, 313
 f3, 010
 f4, 642
 f5, 551
 f6, 133
 f7, 111

Με ρξήζε ηεο εληνιήο ls -l θαη δηαζσιήλσζε κε egrep λα βξείηε ηα αξρεία φπνπ:

1. Ο ηδηνθηήηεο (user) θαη νη ππφινηπνη (others) έρνπλ αθξηβψο ηα ίδηα δηθαηψκαηα.


2. Ο ηδηνθηήηεο (user), ε νκάδα (group) θαη νη ππφινηπνη (others) έρνπλ αθξηβψο ηα ίδηα (κεηαμχ ηνπο)
δηθαηψκαηα.
3. Ο ηδηνθηήηεο (user), ε νκάδα (group) θαη νη ππφινηπνη (others) έρνπλ ηα ίδηα δηθαηψκαηα (κεηαμχ
ηνπο) γηα write θαη execute.
4. Ο ηδηνθηήηεο (user), ε νκάδα (group) θαη νη ππφινηπνη (others) έρνπλ ηα ίδηα δηθαηψκαηα (κεηαμχ
ηνπο) γηα write.
5. Ο ηδηνθηήηεο (user), ε νκάδα (group) θαη νη ππφινηπνη (others) έρνπλ ηα ίδηα δηθαηψκαηα (κεηαμχ
ηνπο) γηα read θαη execute.
6. Ο ηδηνθηήηεο (user) θαη νη ππφινηπνη (νthers) έρνπλ ηα ίδηα δηθαηψκαηα (κεηαμχ ηνπο) γηα read θαη
execute.

Δλαιιαθηηθά, δνθηκάζηε ηηο θαλνληθέο εθθξάζεηο ζην παξαθάησ πεξηβάιινλ (Γηαδξαζηηθφ ΢ρήκα
6.17).

141
 Απηφ ην ΢ρήκα
είλαη Γηαδξαζηηθφ.
Αλαηξέμηε ζηελ
ειεθηξνληθή
έθδνζε.

΢ρήκα 6.17: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο.

Άζθεζε 6
΢πλδεζείηε ζηνλ ππνινγηζηή aetos (ή ζε φπνην ζχζηεκα κε πνιινχο ρξήζηεο έρεηε πξφζβαζε). Θεσξήζηε φηη
ζην 5ν πεδίν ηνπ αξρείνπ /etc/passwd βξίζθεηαη ην νλνκαηεπψλπκν ρξήζηε κε πξψην ην «Δπώλπκν»«θελό
δηάζηεκα»«Όλνκα». Σν πξψην πεδίν πεξηέρεη ην φλνκα ρξήζηε (username). Σα πεδία κεηαμχ ηνπο
δηαρσξίδνληαη κε ":". Διέγρνληαο απηφ ην αξρείν θαη θάλνληαο ρξήζε ηεο εληνιήο egrep (ρξεζηκνπνηήζηε ηελ
επηινγή -i, γηα λα κε γίλεηαη δηάθξηζε κεηαμχ θεθαιαίσλ θαη πεδψλ), λα βξείηε φινπο ηνπο ρξήζηεο ηνπ
ζπζηήκαηνο πνπ:

1. Σνπιάρηζηνλ ηα 7 πξψηα γξάκκαηα ηνπ επηζέηνπ ηνπο απνηεινχλ κέξνο θαη ηνπ νλφκαηνο ρξήζηε
(username) ηνπο.
2. Σνπιάρηζηνλ ηα 4 πξψηα γξάκκαηα ηνπ επηζέηνπ ηνπο θαη ηα 4 πξψηα γξάκκαηα ηνπ νλφκαηφο ηνπο
απνηεινχλ κέξνο θαη ηνπ νλφκαηνο ρξήζηε (username) ηνπο
3. Σνπιάρηζηνλ ηα 5 πξψηα γξάκκαηα ηνπ επηζέηνπ ηνπο θαη ηα 5 πξψηα γξάκκαηα ηνπ νλφκαηφο ηνπο
απνηεινχλ κέξνο θαη ηνπ νλφκαηνο ρξήζηε (username) ηνπο

΢εκείσζε: Γηα ηηο πεξηπηψζεηο 2 θαη 3 ζα πξέπεη λα ζπλδπάζεηε δπν εληνιέο egrep, παξάδεηγκα:

egrep '^a' file1 | egrep 'b$'

ε πξψηε εληνιή ζα βξεη ηηο γξακκέο πνπ μεθηλνχλ κε ην γξάκκα “a”. Απηά ηα απνηειέζκαηα ζα δνζνχλ σο
είζνδνο ζηελ επφκελε εληνιή, ε νπνία ζα εληνπίζεη ηηο γξακκέο πνπ ηειεηψλνπλ ζε “b”. Πξνζνρή, ζηε
δεχηεξε εληνιή δελ μαλανξίδεηαη φλνκα αξρείνπ.

142
6.8 Αλαθνξέο
[1] http://www.regular-expressions.info/
[2] GNU User Commands Reference Manual: grep, egrep, fgrep, rgrep commands.
[3] WikiPedia. Regular expression, February 2015. [ http://en.wikipedia.org/wiki/Regular_expression ]

143
Κεθάιαην 7

7 Γηεξγαζίεο, αλαθαηεύζπλζε, δηαζσιήλσζε, θίιηξα

7.1 Γηεξγαζίεο
Μηα δηεξγαζία (process) είλαη έλα ζηηγκηφηππν ελφο πξνγξάκκαηνο πνπ βξίζθεηαη ζε εθηέιεζε. Κάζε
δηεξγαζία έρεη ηνλ δηθφ ηεο «ρψξν» κλήκεο (memory space). Με απιά ιφγηα, φηαλ κηα δηεξγαζία πξνζπαζεί
λα δηαβάζεη ην πεξηερφκελν ηεο ζέζεο κλήκεο 10, ελλνείηαη φηη ζα δηαβάζεη ηε ζέζε κλήκεο 10 απφ ηε κλήκε
πνπ έρεη εθρσξεζεί ζηε ζπγθεθξηκέλε δηεξγαζία θαη φρη ηελ απφιπηε δηεχζπλζε κλήκεο 10 ηνπ ππνινγηζηή.
Πνιιέο θνξέο αληί ηνπ φξνπ δηεξγαζία ρξεζηκνπνηείηαη θαη ν φξνο εξγαζία (task). Γηα παξάδεηγκα, ν
“Task Manager” («Γηαρεηξηζηήο Δξγαζηψλ») ηνπ ιεηηνπξγηθνχ ζπζηήκαηνο ησλ Microsoft Windows καο
δείρλεη ηηο ελεξγέο δηεξγαζίεο. Δπίζεο, ππάξρεη ν φξνο “multi-tasking” Λεηηνπξγηθφ ΢χζηεκα. Όκσο, ν φξνο
εξγαζία (task) θαίλεηαη πσο ηείλεη πιένλ λα εγθαηαιεηθζεί θαη ρξεζηκνπνηείηαη ν φξνο δηεξγαζία (process).
Μηα απφ ηηο θχξηεο αξκνδηφηεηεο ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο είλαη ε δηαρείξηζε ησλ δηεξγαζηψλ
[ 4, 3, 5 ]. Σν Λεηηνπξγηθφ ΢χζηεκα δεκηνπξγεί, «θαηαζηξέθεη», θαη ζπγρξνλίδεη ηηο δηεξγαζίεο. Γηα
παξάδεηγκα, φηαλ ν ρξήζηεο πιεθηξνινγεί κηα εληνιή (πρ ηελ ls) ζην θέιπθνο, ηφηε ην θέιπθνο δίλεη ηελ
νδεγία ζηνλ ππξήλα λα δεκηνπξγήζεη κηα λέα δηεξγαζία απφ ην εθηειέζηκν αξρείν "ls". Ο ππξήλαο ζα θάλεη
ηηο απαξαίηεηεο ελέξγεηεο, ψζηε λα δεκηνπξγεζεί ε λέα δηεξγαζία.
Μηα δηεξγαζία, αθνχ έρεη δεκηνπξγεζεί, κπνξεί λα βξίζθεηαη ζε δηάθνξεο θαηαζηάζεηο. Ζ πξνθαλήο
θαηάζηαζε είλαη απηή θαηά ηελ νπνία βξίζθεηαη ζε εθηέιεζε. Χζηφζν, δελ είλαη ε κνλαδηθή. Μηα δηεξγαζία
κπνξεί λα βξίζθεηαη ζε θαηάζηαζε αλακνλήο, γηα λα δηαβάζεη θάηη απφ ην δίθηπν. Καηά ηε δηάξθεηα ηνπ
ρξφλνπ αλακνλήο ζα ήηαλ ζπαηάιε πφξσλ απηή ε δηεξγαζία λα απαζρνιεί ηελ Κεληξηθή Μνλάδα
Δπεμεξγαζίαο (ΚΜΔ). Έηζη κπαίλεη ζε θαηάζηαζε “blocked”, ψζηε λα κελ απαζρνιήζεη ηελ ΚΜΔ, κέρξη λα
ιάβεη ηελ απάληεζε πνπ πεξηκέλεη απφ ην δίθηπν, άξα ζα κπνξεί λα ζπλερίζεη ηελ εθηέιεζή ηεο.
΢ηα πεξηζζφηεξα ιεηηνπξγηθά ζπζηήκαηα έρνπκε ηηο εμήο θαηαζηάζεηο φπσο θαίλνληαη ζην ΢ρήκα
7.1:

 Created: κφιηο δεκηνπξγήζεθε.


 Waiting: ε δηεξγαζία είλαη ζε αλακνλή γηα ηελ ΚΜΔ.
 Running: ε δηεξγαζία θαηαιακβάλεη ηελ ΚΜΔ θαη εθηειείηαη.
 Blocked: ε δηεξγαζία δήηεζε έλαλ πφξν θαη πεξηκέλεη απάληεζε (πρ: λα δηαβάζεη έλα ηκήκα ελφο
αξρείνπ).
 Swapped out: ε κλήκε πνπ αληηζηνηρεί ζηε δηεξγαζία έρεη απνζεθεπηεί ζηε κλήκε swap (δειαδή
ζηνλ δίζθν).

145
Created Terminated

Main Memory
Running

Waiting Blocked

Swapped Swapped
out and out and
Waiting Blocked

Swap Memory

΢ρήκα 7.1: Σππηθέο Καηαζηάζεηο Γηεξγαζηώλ

Ο ππξήλαο δηαηεξεί ζηε κλήκε ηνπ κηα ιίζηα κε φιεο ηηο δηεξγαζίεο, ηηο νπνίεο θαη ρεηξίδεηαη. Γηα
θάζε δηεξγαζία ν ππξήλαο δηαηεξεί έλα ζχλνιν πιεξνθνξηψλ:

 Ηδηνθηήηεο: Πνηνο ρξήζηεο είλαη ν ηδηνθηήηεο ηεο δηεξγαζίαο,


 Ηδηνθηήηξηα νκάδα: Πνηα νκάδα ρξεζηψλ είλαη ηδηνθηήηξηα ηεο δηεξγαζίαο,
 PID (Process ID): Δίλαη έλαο κνλαδηθφο αξηζκφο ν νπνίνο απνηειεί ηελ ηαπηφηεηα ηεο δηεξγαζίαο,
 PPID (Parent PID): H ηαπηφηεηα ηεο γνληθήο δηεξγαζίαο,
 STIME (Start Time): Ζ ψξα εθθίλεζεο ηεο δηεξγαζίαο,
 ΣΗΜΔ: Γηα πφζν ρξφλν έρεη θαηαιάβεη ε δηεξγαζία ηελ KME,
 TTY: ΢ε πνην ηεξκαηηθφ ηξέρεη ε δηεξγαζία,
 CMD: Πνηα ήηαλ ε εληνιή πνπ δεκηνχξγεζε ηε δηεξγαζία,
 CWD: Πνηνο είλαη ν ηξέρσλ θαηάινγνο εξγαζίαο ηεο δηεξγαζίαο,
 ENV: Ο πίλαθαο κε ηηο κεηαβιεηέο πεξηβάιινληνο ηεο δηεξγαζίαο. Δδψ πξέπεη λα παξαηεξεζεί πσο
δελ πξέπεη λα ζπγρένληαη νη κεηαβιεηέο πεξηβάιινληνο κε ηηο κεηαβιεηέο ηνπ πξνγξάκκαηνο πνπ
αληηζηνηρεί ζηε δηεξγαζία,
 STATUS: Ζ θαηάζηαζε ηεο δηεξγαζίαο, γηα παξάδεηγκα αλ είλαη "running" ή "blocked",
 Priority: Ζ πξνηεξαηφηεηα ηεο δηεξγαζίαο ηελ νπνία κπνξεί λα ηελ νξίζεη θαη ν ρξήζηεο, εθφζνλ έρεη
ην αληίζηνηρν δηθαίσκα,
 θ.ά.

7.1.1 Η εληνιή ps
H εληνιή ps [2] ρξεζηκνπνηείηαη γηα λα δεη ν ρξήζηεο ηηο δηεξγαζίεο πνπ εθηεινχληαη ή γηα λα δεη
πιεξνθνξίεο γη’ απηέο.

146
Ζ ζχληαμε ηεο εληνιήο ps είλαη σο εμήο:

ps [options]

Καηά ηε ρξήζε ηεο εληνιήο ρξεηάδεηαη ηδηαίηεξε πξνζνρή ζηε ζχληαμε ησλ νξηζκάησλ, δηφηη θάπνηεο
ζεκαίεο απαηηνχλ ηελ χπαξμε ηεο παχιαο (-), ελψ θάπνηεο άιιεο φρη. Αθνινπζνχλ νξηζκέλα παξαδείγκαηα
ρξήζεο ηεο εληνιήο κε ζπλήζε νξίζκαηα, αιιά γηα ηηο πιήξεο δπλαηφηεηεο ηεο εληνιήο ζα πξέπεη λα
αλαηξέμεηε ζην εγρεηξίδην ρξήζεο ηεο εληνιήο. Δπίζεο, πξέπεη λα αλαθεξζεί φηη ππάξρνπλ πνιιέο
παξαιιαγέο ηεο εληνιήο (ζε δηάθνξεο παξαιιαγέο ηνπ UNIX) νη νπνίεο δελ είλαη ζπκβαηέο κεηαμχ ηνπο.
Αθφκε κπνξεί λα ππάξρνπλ δηαθνξέο ζε δηαθνξεηηθέο εθδφζεηο γηα ην ίδην ιεηηνπξγηθφ. ΢πλεπψο ζα πξέπεη
λα γίλεηαη πξνζεθηηθά ε ρξήζε ηεο θαη ζπκβνπιεπφκελνη πάληα ην εγρεηξίδην ρξήζεο.

asidirop@aetos:~$ ps uxww
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
asidirop 4041 0.0 0.0 11116 1172 ? SNs 20:15 0:00 /bin/sh -c (cd
/home/staff/ektaktoi/asidirop/public_html/rss_notifier/bin;./r2e run)
asidirop 4046 0.0 0.0 11116 632 ? SN 20:15 0:00 /bin/sh -c (cd
/home/staff/ektaktoi/asidirop/public_html/rss_notifier/bin;./r2e run)
asidirop 4049 0.0 0.0 11124 1348 ? SN 20:15 0:00 /bin/sh ./r2e run
asidirop 4057 42.0 0.4 134488 22488 ? SNl 20:15 2:28 python rss2email.py
feeds.dat run
asidirop 7160 0.0 0.0 16872 1144 pts/0 RN+ 20:20 0:00 ps uxww
asidirop 31887 0.0 0.0 97344 1648 ? SN 18:44 0:00 sshd: asidirop@pts/0
asidirop 31892 0.0 0.0 19840 2120 pts/0 SNs 18:44 0:00 -bash

΢ην παξαπάλσ παξάδεηγκα ρξεζηκνπνηνχληαη νη ζεκαίεο u, x θαη δπν θνξέο ην w. To ww ζα


εκθαλίζεη νιφθιεξε ηελ εληνιή θαη ηα νξίζκαηά ηεο. Αλ ρξεζηκνπνηνχληαλ έλα κφλν w, ηφηε ζα
εκθαλίδνληαλ απφ νιφθιεξε ηελ εληνιή κφλν φζα ρσξάλε ζην ηεξκαηηθφ ρσξίο λα ρξεζηκνπνηεζεί δεχηεξε
γξακκή. Σν x εκθαλίδεη φιεο ηηο δηεξγαζίεο ηνπ ηξέρνληνο ρξήζηε θαη ηέινο ην u δειψλεη ηε κνξθνπνίεζε
ηνπ απνηειέζκαηνο.

asidirop@aetos:~$ ps lxww
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 1143 4041 4034 25 5 11116 1172 - SNs ? 0:00 /bin/sh -c
(cd /home/staff/ektaktoi/asidirop/public_html/rss_notifier/bin;./r2e run)
1 1143 4046 4041 25 5 11116 632 - SN ? 0:00 /bin/sh -c
(cd /home/staff/ektaktoi/asidirop/public_html/rss_notifier/bin;./r2e run)
0 1143 4049 4046 25 5 11124 1348 - SN ? 0:00 /bin/sh
./r2e run
0 1143 4057 4049 25 5 134488 22488 - SNl ? 3:39 python
rss2email.py feeds.dat run
0 1143 8967 31892 25 5 8456 744 - RN+ pts/0 0:00 ps lxww
5 1143 31887 31832 25 5 97344 1648 ? SN ? 0:00 sshd:
asidirop@pts/0
0 1143 31892 31887 25 5 19840 2120 - SNs pts/0 0:00 -bash

΢ην παξαπάλσ παξάδεηγκα ρξεζηκνπνηνχληαη νη ίδηεο ζεκαίεο κε ηελ πξνεγνχκελε πεξίπησζε εθηφο
απφ ην l πνπ αληηθαζηζηά ην u. Σν απνηέιεζκα είλαη ην ίδην, αιιά δηαθέξεη σο πξνο ηηο ζηήιεο πνπ
ρξεζηκνπνηνχληαη ζηελ εθηχπσζε.

147
asidirop@aetos:~$ ps uw -e
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 8404 160 ? Ss Apr03 0:43 init [2]
root 2 0.0 0.0 0 0 ? S Apr03 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Apr03 0:26 [ksoftirqd/0]
root 6 0.0 0.0 0 0 ? S Apr03 0:05 [migration/0]
root 7 0.0 0.0 0 0 ? S Apr03 0:02 [watchdog/0]
root 8 0.0 0.0 0 0 ? S Apr03 0:05 [migration/1]
root 10 0.0 0.0 0 0 ? S Apr03 0:21 [ksoftirqd/1]
root 12 0.0 0.0 0 0 ? S Apr03 0:01 [watchdog/1]
root 13 0.0 0.0 0 0 ? S Apr03 0:04 [migration/2]
......................
root 31832 0.0 0.0 97344 3876 ? SNs 18:44 0:00 sshd: asidirop
asidirop 31887 0.0 0.0 97344 1648 ? SN 18:44 0:00 sshd: asidirop
asidirop 31892 0.0 0.0 19840 2120 pts/0 SNs 18:44 0:00 -bash
psarnik 31944 0.0 0.0 19600 1652 ? S 20:11 0:00 imap [psarnik]
www-data 32457 0.0 0.1 320604 7440 ? Sl 19:45 0:01 apache2
www-data 32488 0.0 0.1 320496 7308 ? Sl 19:45 0:01 apache2
www-data 32489 0.1 0.1 386072 7416 ? Sl 19:45 0:02 apache2
psarnik 32723 0.0 0.0 19680 1724 ? S 20:12 0:00 imap [psarnik]

To w ζα εκθαλίζεη ζρεδφλ νιφθιεξε ηελ εληνιή θαη ηα νξίζκαηά ηεο (φζα ρσξάλε ζην ηεξκαηηθφ).
Σν -e εκθαλίδεη φιεο ηηο δηεξγαζίεο φισλ ησλ ρξεζηψλ θαη ηέινο ην u δειψλεη ηε κνξθνπνίεζε ηνπ
απνηειέζκαηνο.

7.1.2 Η εληνιή pstree


Ζ pstree είλαη αληίζηνηρε εληνιή κε ηελ ps, κφλν πνπ εκθαλίδεη ηηο δηεξγαζίεο ζε κνξθή δέληξνπ κε βάζε
ηε ζρέζε γνλέα-ηέθλνπ. Όπσο είλαη εκθαλέο ζην παξαθάησ παξάδεηγκα, φιεο νη δηεξγαζίεο έρνπλ σο πξφγνλν
ηελ “init”. Ζ init είλαη ε βαζηθή δηεξγαζία πνπ πξνέξρεηαη απφ ηνλ ππξήλα θαη νπζηαζηηθά ελεξγνπνηεί
ην Λεηηνπξγηθφ ΢χζηεκα. Δπίζεο, δελ ππάξρεη θακηά δηεξγαζία ρσξίο γνληθή δηεξγαζία. φιεο νη δηεξγαζίεο
έρνπλ σο γνληθή ηε δηεξγαζία πνπ ηηο ελεξγνπνίεζε. Γηα πεξηζζφηεξεο πιεξνθνξίεο γηα ηελ
εληνιή pstree αλαηξέμηε ζην εγρεηξίδην ρξήζεο.

asidirop@antonis-PC:~$ pstree
init-T-NetworkManager-T-dhclient
¦ L-2*[{NetworkManager}]
+-VBoxSVC-T-VirtualBox---24*[{VirtualBox}]
¦ L-11*[{VBoxSVC}]
+-VBoxXPCOMIPCD
+-VirtualBox---5*[{VirtualBox}]
+-acpid
+-apache2---6*[apache2]
+-atd
+-avahi-daemon---avahi-daemon
+-avgd-T-avgavid---3*[{avgavid}]
¦ +-avgoad-T-avgscand---6*[{avgscand}]
¦ ¦ L-6*[{avgoad}]
¦ +-avgsched---3*[{avgsched}]
¦ +-avgtcpd-T-avgscand---6*[{avgscand}]
¦ ¦ L-8*[{avgtcpd}]
¦ L-5*[{avgd}]
+-bamfdaemon
+-3*[bonobo-activati---2*[{bonobo-activat}]]
+-chrome-T-chrome

148
¦ +-chrome---{chrome}
¦ +-chrome---2*[{chrome}]
¦ L-24*[{chrome}]
+-chrome-T-8*[chrome---2*[{chrome}]]
¦ L-2*[chrome---3*[{chrome}]]
+-2*[clock-applet---{clock-applet}]
+-console-kit-dae---64*[{console-kit-da}]
+-cpufreq-applet---{cpufreq-applet}
+-cron
+-cupsd
+-5*[dbus-daemon]
+-3*[dbus-launch]

7.1.3 Οη Γηεξγαζίεο

Όπσο έγηλε θαλεξφ απφ ην πξνεγνχκελν παξάδεηγκα, θάζε δηεξγαζία έρεη κηα γνληθή δηεξγαζία. Γνληθή
δηεξγαζία είλαη ε δηεξγαζία πνπ έδσζε «εληνιή» ζην Λεηηνπξγηθφ ΢χζηεκα λα δεκηνπξγεζεί ε λέα. Ζ
ηαπηφηεηα ηεο θάζε δηεξγαζίαο είλαη ην PID (Process ID) θαη γηα θάζε δηεξγαζία ππάξρεη ε πιεξνθνξία PID
θαη PPID (Parent Process ID). Γελ ππάξρεη θακία δηεξγαζία ρσξίο γνλέα εθηφο απφ ηε δηεξγαζία 0 (κεδέλ). Ζ
δηεξγαζία 0 (κεδέλ) δελ έρεη γνλέα θαη είλαη ε πξψηε δηεξγαζία πνπ εθηειείηαη κε ην boot (εθθίλεζε) ηνπ
ζπζηήκαηνο. Ζ δηεξγαζία 0 αλαθέξεηαη ζπλήζσο θαη σο “swapper” ή “sched”. Δίλαη ν ππξήλαο θαη δελ
εκθαλίδεηαη ζηε ιίζηα ησλ δηεξγαζηψλ.

Ση γίλεηαη φκσο αλ ν γνλέαο κηαο δηεξγαζίαο ηεξκαηίζεη πξηλ ηεξκαηίζνπλ ηα ηέθλα; Σα ηέθλα ζα έρνπλ
σο PPID κηα δηεξγαζία πνπ δελ ππάξρεη πιένλ; Πξνθαλψο φρη. Ζ ζπκπεξηθνξά ζε απηήλ ηελ πεξίπησζε
εμαξηάηαη απφ ηελ έθδνζε ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο. ΢πλήζεο ηαθηηθή είλαη λα νξίδεηαη σο γνλέαο ζηηο
«νξθαλέο» δηεξγαζίεο ε δηεξγαζία 1, δειαδή ε init.

7.1.4 Γηαδηθαζία εθθίλεζεο ζπζηήκαηνο (boot)

Καηά ηελ εθθίλεζε ελφο ππνινγηζηή:

1. Ο boot loader, δειαδή ην πξφγξακκα πνπ θνξηψλεηαη απφ ηνλ boot sector ηνπ δίζθνπ, μεθηλά ηνλ
ππξήλα (κε PID 0).
2. Ο ππξήλαο μεθηλά ηε δηεξγαζία init. Απηή, αλάινγα κε ηηο ξπζκίζεηο πνπ είλαη απνζεθεπκέλεο ζα
ελεξγνπνηήζεη φιεο ηηο ππφινηπεο δηεξγαζίεο ζην ζχζηεκά καο.

Όηαλ ηεξκαηίζεη ε init, ηφηε ζπκβαίλεη shutdown - ην θιείζηκν ηνπ ιεηηνπξγηθνχ.

7.1.5 Λεηηνπξγίεο fork θαη exec


Τπάξρνπλ δπν ηξφπνη, γηα λα δεκηνπξγεζεί κηα λέα δηεξγαζία. Ο πξψηνο ηξφπνο είλαη κε ηε ιεηηνπξγία fork.
Όηαλ κηα δηεξγαζία θάλεη fork (θαιεί ηελ αληίζηνηρε ζπλάξηεζε ηνπ ππξήλα), ηφηε δεκηνπξγείηαη έλα αθξηβέο
αληίγξαθν ηεο ηξέρνπζαο δηεξγαζίαο. Σν κφλν δηαθνξεηηθφ πνπ έρνπλ νη δπν δηεξγαζίεο είλαη ηα PID, PPID,
δειαδή νη θσδηθνί δηεξγαζηψλ. Έζησ φηη ε δηεξγαζία Α κε PID=9, PPID=3 θάλεη fork θαη δεκηνπξγείηαη κηα
λέα, πνπ είλαη αθξηβέο αληίγξαθν ηεο Α, ηελ νπνία ηελ νλνκάδνπκε Β. Ζ Β ζα έρεη PPID=9 (δειαδή ν γνλέαο
ηεο είλαη ε 9) θαη σο PID έλα λέν κνλαδηθφ αξηζκφ (ζα κπνξνχζε λα είλαη ην 10). Όια ηα ππφινηπα ζηνηρεία
ησλ δπν δηεξγαζηψλ παξακέλνπλ ίδηα, δειαδή ηδηνθηήηεο, ηξέρνλ θαηάινγνο εξγαζίαο, κεηαβιεηέο
πεξηβάιινληνο, αθφκε θαη ε πνξεία εθηέιεζεο.

149
Ο δεχηεξνο ηξφπνο είλαη κε ηε δηαδηθαζία exec. Όηαλ κηα δηεξγαζία θάλεη exec κε φξηζκα έλα
εθηειέζηκν πξφγξακκα (θαιεί ηελ αληίζηνηρε ζπλάξηεζε ηνπ ππξήλα), ηφηε δεκηνπξγείηαη κηα λέα δηεξγαζία
πνπ ηξέρεη ην εθηειέζηκν. Ζ λέα δηεξγαζία θιεξνλνκεί ηα πάληα απφ ηε γνληθή ηεο, αθφκε θαη ηα PID, PPID.
Ζ παιηά δηεξγαζία θαηαζηξέθεηαη, θαη νπζηαζηηθά αληηθαζίζηαηαη απφ ηε λέα.
΢πλήζσο νη ιεηηνπξγίεο fork/exec εθηεινχληαη ζε ζπλδπαζκφ. Γηα παξάδεηγκα, έζησ φηη ζε έλα
θέιπθνο έρεη πιεθηξνινγήζεη ν ρξήζηεο ηελ εληνιή ls. Σν θέιπθνο, αθνχ εξκελεχζεη ηελ εληνιή, θάλεη
fork ηνλ εαπηφ ηνπ. Ζ γνληθή δηεξγαζία ηνπ θειχθνπο απιά πεξηκέλεη ηε ζπγαηξηθή λα ηεξκαηίζεη. Ζ
ζπγαηξηθή δηεξγαζία ηνπ θειχθνπο θάλεη “exec /bin/ls”, νπφηε θαη ηειηθά εθηειείηαη ε εληνιή ls.
H ls ζα έρεη σο PPID ην PID ηνπ γνληθνχ θειχθνπο. Με ηνλ ίδην ηξφπν έλα πξφγξακκα-δηεξγαζία κπνξεί λα
εθηειέζεη θάπνην άιιν πξφγξακκα. ΢ην Γηαδξαζηηθφ ΢ρήκα 7.2 θαίλεηαη ε δηαδηθαζία εθηέιεζεο ηεο εληνιήο
“whoami” απφ ην θέιπθνο. Κάληε θιηθ ζην θνπκπί “1. whoami”, γηα λα μεθηλήζεη ε πξνβνιή. ΢ε θάζε βήκα
ζα πξέπεη λα παηάηε «Δπφκελν».

 Απηφ ην ΢ρήκα είλαη Γηαδξαζηηθφ.


Αλαηξέμηε ζηελ ειεθηξνληθή έθδνζε.

΢ρήκα 7.2: Η δηαδηθαζία εθηέιεζεο εληνιώλ από ην θέιπθνο.

7.2 ΢ήκαηα (signals)


Έλα ζήκα είλαη κηα κέζνδνο γηα επηθνηλσλία κε κηα δηεξγαζία. ΢ήκαηα ρξεζηκνπνηνχληαη ζηα ζπζηήκαηα
Unix θαη ζε φια ηα ιεηηνπξγηθά πνπ αθνινπζνχλ ην πξφηππν POSIX. Έλα ζήκα είλαη κηα αζχγρξνλε
ελεκέξσζε ηεο δηεξγαζίαο φηη ζπλέβε έλα γεγνλφο (event). Όηαλ θηάλεη έλα ζήκα γηα κηα δηεξγαζία, ν
ππξήλαο δηαθφπηεη ηελ θαλνληθή εθηέιεζε ηεο δηεξγαζίαο θαη εθηειείηαη ν αληίζηνηρνο signal handler. Signal
handler είλαη κηα ζπλάξηεζε ηεο δηεξγαζίαο πνπ ζα ρεηξηζηεί ην ζπγθεθξηκέλν ζήκα. Γηα θάζε ζήκα
νξίδνληαη δηαθνξεηηθνί signal handlers. Όηαλ νινθιεξσζεί ε εθηέιεζε ηεο ζπλάξηεζεο signal handler, ε
δηεξγαζία επηζηξέθεη ζηελ θαλνληθή ηεο εθηέιεζε, ζην ζεκείν πνπ ζηακάηεζε. Δάλ κηα δηεξγαζία ιάβεη έλα
ζήκα γηα ην νπνίν δελ έρεη νξηζηεί signal handler, ηφηε εθηειείηαη ν πξνθαζνξηζκέλνο απφ ην Λεηηνπξγηθφ
΢χζηεκα.
Κάζε ζήκα, αλαπαξίζηαηαη κε θάπνηνλ αξηζκφ. Ζ αξίζκεζε κπνξεί λα δηαθέξεη απφ ζχζηεκα ζε
ζχζηεκα. ΢ηνλ Πίλαθα 7.1 θαίλεηαη ε αληηζηνηρία ζεκάησλ θαη ησλ αληίζηνηρσλ θσδηθψλ.

150
Πίλαθαο 7.1: Λίζηα κε ηα ζήκαηα από ην ιεηηνπξγηθό Linux.

Αξηζκόο ζην
΢ήκα Πεξηγξαθή
"Linux x86"
SIGABRT Process aborted 6
SIGALRM Signal raised by alarm 14
SIGBUS Bus error: "access to undefined portion of memory object" 7
SIGCHLD Child process terminated, stopped (or continued*) 17
SIGCONT Continue if stopped 18
SIGFPE Floating point exception: "erroneous arithmetic operation" 8
SIGHUP Hangup 1
SIGILL Illegal instruction 4
SIGINT Interrupt 2
SIGKILL Kill (terminate immediately) 9
SIGPIPE Write to pipe with no one reading 13
SIGQUIT Quit and dump core 3
SIGSEGV Segmentation violation 11
SIGSTOP Stop executing temporarily 19
SIGTERM Termination (request to terminate) 15
SIGTSTP Terminal stop signal 20
SIGTTIN Background process attempting to read from tty ("in") 21
SIGTTOU Background process attempting to write to tty ("out") 22
SIGUSR1 User-defined 1 10
SIGUSR2 User-defined 2 12
SIGPOLL Pollable event 29
SIGPROF Profiling timer expired 27
SIGSYS Bad syscall 31
SIGTRAP Trace/breakpoint trap 5
SIGURG Urgent data available on socket 23
Signal raised by timer counting virtual time: "virtual timer
SIGVTALRM 26
expired"
SIGXCPU CPU time limit exceeded 24
SIGXFSZ File size limit exceeded 25

7.2.1 Η εληνιή kill


Μπνξεί ν ρξήζηεο (ή κηα δηεξγαζία) λα ζηείιεη έλα ζήκα ζε κηα δηεξγαζία κε ηελ εληνιή kill [1]. Όηαλ ε
απνζηνιή ηνπ ζήκαηνο γίλεηαη κέζα απφ πξφγξακκα, ηφηε κπνξεί λα γίλεη κε ηελ θιήζε ζπζηήκαηνο (system
call) kill, ε νπνία είλαη αληίζηνηρε κε ηελ εληνιή. Παξφηη ην φλνκα παξαπιαλεί, ε εληνιή kill ΓΔΝ
«΢ΚΟΣΧΝΔΙ» κηα δηεξγαζία, αιιά ζηέιλεη έλα ζήκα ζε απηήλ.

151
Κάπνηα ζήκαηα έρεη λφεκα λα ηα ζηείιεη ν ρξήζηεο ζε κηα δηεξγαζία, ελψ θάπνηα άιια φρη. Απηά ηα
δεχηεξα ρξεζηκνπνηνχληαη γηα εζσηεξηθνχο ζθνπνχο απφ ην ιεηηνπξγηθφ ζχζηεκα.
Σα πεξηζζφηεξν ζπρλά ρξεζηκνπνηνχκελα ζήκαηα είλαη:

 15 (TERM): Γίλεη ηελ νδεγία ζηε δηεξγαζία λα ηεξκαηίζεη. Ζ δηεξγαζία ζα ηεξκαηίζεη αλ ην ζέιεη.
 9 (KILL): Σεξκαηίδεη βίαηα ηε δηεξγαζία. Ζ δηεξγαζία ζα ηεξκαηίζεη είηε ην ζέιεη είηε φρη.
 19 (STOP): Γίλεη ηελ νδεγία ζηε δηεξγαζία (νπζηαζηηθά ζην ιεηηνπξγηθφ) λα κπεη ζε θαηάζηαζε
παχζεο (STOP mode). H δηεξγαζία ζηακαηά λα εθηειείηαη, αιιά δελ ηεξκαηίδεηαη.
 18 (CONT): Γίλεη ηελ νδεγία ζηε δηεξγαζία πνπ ήηαλ ζε θαηάζηαζε παχζεο λα ζπλερίζεη λα
εθηειείηαη.

Κάπνηα ζήκαηα κπνξνχλ λα ζηαινχλ ζε κηα δηεξγαζία θαη απφ ην πιεθηξνιφγην (δεδνκέλνπ φηη ε
δηεξγαζία εθηειείηαη ζε έλα ηεξκαηηθφ). Απηά είλαη:

 Ctrl-C: ζηέιλεη ην ζήκα SIGINT. Απηφ ην ζήκα νδεγεί ηε δηεξγαζία ζε ηεξκαηηζκφ.


 Ctrl-Z: ζηέιλεη ην ζήκα SIGTSTP. Απηφ ην ζήκα νδεγεί ηε δηεξγαζία ζε θαηάζηαζε παχζεο.

Γείηε ηηο αζθήζεηο γηα πεξηζζφηεξα παξαδείγκαηα.

7.3 ΢ηνηρεία Γηεξγαζηώλ


Έλα ηππηθφ ζχζηεκα Unix/Linux δίλεη πξφζβαζε ζε φια ηα ζηνηρεία πνπ δηαηεξεί ν ππξήλαο γηα θάζε
δηεξγαζία κέζα απφ ηνλ θαηάινγν /proc. Απηφο είλαη έλαο εηθνληθφο θαηάινγνο, ν νπνίνο πεξηέρεη εηθνληθνχο
ππνθαηαιφγνπο θαη εηθνληθά αξρεία.

asidirop@aetos:~$ ls -l /proc
total 0
dr-xr-xr-x 7 root root 0 Apr 26 17:11 1
dr-xr-xr-x 7 root root 0 Apr 26 17:11 10
dr-xr-xr-x 7 dovecot dovecot 0 Apr 26 20:03 10359
dr-xr-xr-x 7 dovecot dovecot 0 Apr 26 19:48 10566
dr-xr-xr-x 7 dimver x0607 0 Apr 26 19:48 10617
dr-xr-xr-x 7 dovecot dovecot 0 Apr 26 19:48 10618
dr-xr-xr-x 7 dimver x0607 0 Apr 26 19:48 10620
dr-xr-xr-x 7 dimver x0607 0 Apr 26 19:49 10656
dr-xr-xr-x 7 dimver x0607 0 Apr 26 19:49 10682
dr-xr-xr-x 7 kourou conit 0 Apr 26 08:01 10717
dr-xr-xr-x 7 dovecot dovecot 0 Apr 26 20:04 11076
dr-xr-xr-x 7 dovecot dovecot 0 Apr 26 16:02 1122
dr-xr-xr-x 7 bind bind 0 Apr 26 10:58 11570
dr-xr-xr-x 7 root root 0 Apr 26 20:04 11669
dr-xr-xr-x 7 root root 0 Apr 26 13:15 1176
dr-xr-xr-x 7 root root 0 Apr 26 18:05 11798
dr-xr-xr-x 7 dovecot dovecot 0 Apr 26 18:06 11866

Όπσο θαίλεηαη ζην παξαπάλσ παξάδεηγκα, κέζα ζηνλ θαηάινγν /proc ππάξρνπλ πνιινί
ππνθαηάινγνη κε νλφκαηα αξηζκνχο. Καζέλαο απφ ηνπο θαηαιφγνπο απηνχο αληηζηνηρεί ζε κηα δηεξγαζία. Σν
φλνκα ηνπ θαηαιφγνπ είλαη ν θσδηθφο ηεο δηεξγαζίαο (PID) ζηελ νπνία αληηζηνηρεί. ΢ε απηφ ην ζεκείν λα
παξαηεξήζνπκε φηη σο κέγεζνο γηα ηνλ θάζε θαηάινγν θαίλεηαη ην κέγεζνο κεδέλ.
΢ε θάζε έλαλ απφ απηνχο ηνπο θαηαιφγνπο κπνξνχλ λα βξεζνχλ φιεο νη πιεξνθνξίεο πνπ δηαηεξεί ν
ππξήλαο γηα ηελ αληίζηνηρε δηεξγαζία.

asidirop@aetos:~$ ls -l /proc/22967

152
total 0
dr-xr-xr-x 2 asidirop conit 0 Apr 26 20:19 attr
-r-------- 1 asidirop conit 0 Apr 26 20:19 auxv
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 cgroup
--w------- 1 asidirop conit 0 Apr 26 20:19 clear_refs
-r--r--r-- 1 asidirop conit 0 Apr 26 20:09 cmdline
-rw-r--r-- 1 asidirop conit 0 Apr 26 20:19 comm
-rw-r--r-- 1 asidirop conit 0 Apr 26 20:19 coredump_filter
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 cpuset
lrwxrwxrwx 1 asidirop conit 0 Apr 26 20:19 cwd ->
/home/staff/ektaktoi/asidirop
-r-------- 1 asidirop conit 0 Apr 26 20:19 environ
lrwxrwxrwx 1 asidirop conit 0 Apr 26 20:19 exe -> /bin/bash
dr-x------ 2 asidirop conit 0 Apr 26 20:09 fd
dr-x------ 2 asidirop conit 0 Apr 26 20:19 fdinfo
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 io
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 limits
-rw-r--r-- 1 asidirop conit 0 Apr 26 20:19 loginuid
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 maps
-rw------- 1 asidirop conit 0 Apr 26 20:19 mem
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 mountinfo
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 mounts
-r-------- 1 asidirop conit 0 Apr 26 20:19 mountstats
dr-xr-xr-x 7 asidirop conit 0 Apr 26 20:19 net
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 numa_maps
-rw-r--r-- 1 asidirop conit 0 Apr 26 20:19 oom_adj
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 oom_score
-rw-r--r-- 1 asidirop conit 0 Apr 26 20:19 oom_score_adj
-r-------- 1 asidirop conit 0 Apr 26 20:19 pagemap
-r-------- 1 asidirop conit 0 Apr 26 20:19 personality
lrwxrwxrwx 1 asidirop conit 0 Apr 26 20:19 root -> /
-rw-r--r-- 1 asidirop conit 0 Apr 26 20:19 sched
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 sessionid
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 smaps
-r-------- 1 asidirop conit 0 Apr 26 20:19 stack
-r--r--r-- 1 asidirop conit 0 Apr 26 20:09 stat
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 statm
-r--r--r-- 1 asidirop conit 0 Apr 26 20:09 status
-r-------- 1 asidirop conit 0 Apr 26 20:19 syscall
dr-xr-xr-x 3 asidirop conit 0 Apr 26 20:19 task
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 wchan

Παξαπάλσ βιέπνπκε φηη ππάξρνπλ 38 αξρεία πνπ πεξηέρνπλ δηάθνξεο πιεξνθνξίεο γηα θάζε
δηεξγαζία. Καη πάιη πξέπεη λα παξαηεξεζεί φηη φια απηά ηα αξρεία θαίλεηαη λα έρνπλ κέγεζνο κεδέλ.
Έλα ρξήζηκν αξρείν είλαη ην αξρείν stat, ηνπ νπνίνπ ηα πεξηερφκελα εκθαλίδνληαη παξαθάησ γηα
κηα ηπραία δηεξγαζία. Βιέπνπκε φηη πεξηέρνληαη πιεξνθνξίεο πνπ αθνξνχλ ηελ θαηάζηαζε ηεο δηεξγαζίαο,
θσδηθνί (PID, PPID, UID θ.ά.), θαζψο θαη πιεξνθνξίεο γηα ηε ρξήζε κλήκεο απφ ηε δηεξγαζία. Ζ
εληνιή ps ζηελ νπζία δηαβάδεη απηέο ηηο πιεξνθνξίεο θαη ηηο εκθαλίδεη κε κνξθή πνπ νξίδεηαη απφ ηα
νξίζκαηα πνπ δίλεη ν ρξήζηεο.

153
asidirop@aetos:~$ more /proc/22967/status
Name: bash
State: S (sleeping)
Tgid: 22967
Pid: 22967
PPid: 22963
TracerPid: 0
Uid: 1143 1143 1143 1143
Gid: 993 993 993 993
FDSize: 256
Groups: 993
VmPeak: 19904 kB
VmSize: 19840 kB
VmLck: 0 kB
VmHWM: 2096 kB
VmRSS: 2096 kB
VmData: 424 kB
VmStk: 136 kB
VmExe: 868 kB
VmLib: 1972 kB
VmPTE: 60 kB
VmSwap: 0 kB
Threads: 1
SigQ: 0/16382
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000010000
SigIgn: 0000000000384004
SigCgt: 000000004b813efb
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Cpus_allowed: ff
Cpus_allowed_list: 0-7
Mems_allowed: 00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 152
nonvoluntary_ctxt_switches: 1

7.3.1 Οη κεηαβιεηέο πεξηβάιινληνο


Γηα θάζε δηεξγαζία ν ππξήλαο δηαηεξεί έλαλ πίλαθα κε «Μεηαβιεηέο Πεξηβάιινληνο» (Environment
Variables). Οη κεηαβιεηέο πεξηβάιινληνο δελ είλαη ραξαθηεξηζηηθφ κφλν ησλ θειπθψλ, αιιά ππάξρνπλ γηα
φιεο ηηο δηεξγαζίεο. Μάιηζηα κεηαβιεηέο πεξηβάιινληνο ππάξρνπλ θαη ζηα Λεηηνπξγηθά ΢πζηήκαηα ησλ
Microsoft Windows θαη φρη κφλν ζηηο παξαιιαγέο ηνπ UNIX.
Οη κεηαβιεηέο πεξηβάιινληνο ρξεζηκνπνηνχληαη:

 γηα λα δψζνπλ πιεξνθνξίεο απφ ην ζχζηεκα πξνο ηνλ ρξήζηε (πρ. USER, SHELL, PWD).
 γηα λα δψζεη ν ρξήζηεο πιεξνθνξίεο (ξπζκίζεηο) ζην ζχζηεκα ή ζε δηεξγαζίεο (πρ. PATH, LANG,
LS_COLORS).

154
 γηα λα δψζεη κηα δηεξγαζία πιεξνθνξίεο ζε θάπνηα ζπγαηξηθή ηεο (πρ:
XDG_SESSION_COOKIE=ad911ed4a37cbe23249debec4bc87826-1335941063.445049-1438191725).

Όιεο νη Μεηαβιεηέο Πεξηβάιινληνο θιεξνδνηνχληαη απφ ηηο δηεξγαζίεο ζηηο ζπγαηξηθέο ηνπο. Έηζη,
ζηελ πξαγκαηηθφηεηα φιεο νη δηεξγαζίεο θιεξνλνκνχλ ηηο κεηαβιεηέο πεξηβάιινληνο πνπ αξρηθνπνηνχληαη
απφ ηε δηεξγαζία init. Πξνθαλψο ε θάζε δηεξγαζία κπνξεί λα ηξνπνπνηήζεη ηηο Μεηαβιεηέο
Πεξηβάιινληφο ηεο, νη νπνίεο βέβαηα ζα θιεξνδνηεζνχλ ζηηο ζπγαηξηθέο ηεο.
Μέζα απφ ην θέιπθνο ν ρξήζηεο κπνξεί λα εκθαλίζεη ηηο κεηαβιεηέο πεξηβάιινληνο
ρξεζηκνπνηψληαο ηελ εληνιή env φπσο θαίλεηαη παξαθάησ:

asidirop@aetos:~$ env
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=94.68.138.167 55038 22
SSH_TTY=/dev/pts/0
USER=asidirop
MAILCHECK=3600
MAIL=/var/mail/asidirop
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/home/staff/ektaktoi/asidi
rop/bin
PWD=/home/staff/ektaktoi/asidirop
LANG=en_US.UTF-8
SHLVL=1
HOME=/home/staff/ektaktoi/asidirop
LOGNAME=asidirop
SSH_CONNECTION=94.68.138.167 55038 195.251.123.232 22
DISPLAY=:0
_=/usr/bin/env

Μέζα απφ ην θέιπθνο Bourne Shell κπνξεί ν ρξήζηεο λα ηξνπνπνηήζεη ηηο κεηαβιεηέο πεξηβάιινληνο
ηεο δηεξγαζίαο πνπ αληηζηνηρεί ζην θέιπθνο. Απηφ κπνξεί λα γίλεη απιά κε κηα εληνιή εθρψξεζεο φπσο
θαίλεηαη παξαθάησ:

asidirop@aetos:~$ LANG=el_GR.UTF-8
asidirop@aetos:~$ env
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=94.68.138.167 55038 22
SSH_TTY=/dev/pts/0
USER=asidirop
MAILCHECK=3600
MAIL=/var/mail/asidirop
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/home/staff/ektaktoi/asidi
rop/bin
PWD=/home/staff/ektaktoi/asidirop
LANG=el_GR.UTF-8
SHLVL=1
HOME=/home/staff/ektaktoi/asidirop
LOGNAME=asidirop
SSH_CONNECTION=94.68.138.167 55038 195.251.123.232 22
DISPLAY=:0
_=/usr/bin/env

155
Δάλ ν ρξήζηεο ζέιεη λα νξίζεη κηα λέα κεηαβιεηή πεξηβάιινληνο, ζα πξέπεη λα ρξεζηκνπνηήζεη ηελ
εληνιή export. Απηφ κπνξεί λα γίλεη κε δπν ηξφπνπο. Ο πξψηνο ηξφπνο είλαη φπσο παξαθάησ, δειαδή
νξίδνληαο αξρηθά ηε κεηαβιεηή ηνπ θειχθνπο TEST θαη κεηά εθηειψληαο ηελ εληνιή export. Οπζηαζηηθά
δίλεη ζην θέιπθνο ηελ νδεγία λα κεηαηξέςεη ηελ ηνπηθή κεηαβιεηή TEST ζε Μεηαβιεηή Πεξηβάιινληνο.

asidirop@aetos:~$ TEST=xyz
asidirop@aetos:~$ export TEST
asidirop@aetos:~$ env
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=94.68.138.167 55038 22
SSH_TTY=/dev/pts/0
USER=asidirop
MAILCHECK=3600
MAIL=/var/mail/asidirop
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/home/staff/ektaktoi
/asidirop/bin
PWD=/home/staff/ektaktoi/asidirop
LANG=el_GR.UTF-8
TEST=xyz
SHLVL=1

Ο ελαιιαθηηθφο ηξφπνο είλαη λα ρξεζηκνπνηεζεί ε εληνιή export ζηελ ίδηα εληνιή κε ηελ
εθρψξεζε:

asidirop@aetos:~$ export TEST=xyz

Άιια θειχθε εθηφο ηνπ Bourne Shell παξέρνπλ άιινπο ηξφπνπο γηα ηνλ ρεηξηζκφ ησλ κεηαβιεηψλ
πεξηβάιινληνο. Γηα παξάδεηγκα ζηα θειχθε ηεο νηθνγέλεηαο csh ρξεζηκνπνηείηαη ε εληνιή setenv. Μέζα
απφ πξνγξάκκαηα κπνξεί ν πξνγξακκαηηζηήο λα δηαβάζεη ή λα ηξνπνπνηήζεη ηηο κεηαβιεηέο πεξηβάιινληνο
ρξεζηκνπνηψληαο ζπλαξηήζεηο πνπ αληηζηνηρνχλ ζηηο θιήζεηο ζπζηήκαηνο setenv θαη getenv.
Δλαιιαθηηθά, αλάινγα κε ηε γιψζζα πξνγξακκαηηζκνχ κπνξεί λα παξέρεηαη θαη άιινο ηξφπνο γηα πξφζβαζε
ζηηο κεηαβιεηέο πεξηβάιινληνο, γηα παξάδεηγκα ζηε γιψζζα πξνγξακκαηηζκνχ php ππάξρεη ν
πίλαθαο $_ENV ηνλ νπνίνλ ν πξνγξακκαηηζηήο κπνξεί λα ρξεζηκνπνηήζεη, φπσο νπνηνλδήπνηε άιινλ πίλαθα
ηεο γιψζζαο.
΢ηηο κεηαβιεηέο πεξηβάιινληνο ππάξρεη πξφζβαζε θαη κέζσ ησλ αξρείσλ ζην /proc. Γηα θάζε
δηεξγαζία ππάξρεη ην αξρείν environ ην νπνίν πεξηέρεη ηνλ πίλαθα κεηαβιεηψλ πεξηβάιινληνο. Βέβαηα αλ
πξνζπαζήζεη ν ρξήζηεο λα δεη απηφ ην αξρείν κε κηα εληνιή cat ην απνηέιεζκα δελ εκθαλίδεηαη
"ζηνηρηζκέλν", παξφια απηά πεξηέρνληαη φιεο νη πιεξνθνξίεο.

156
asidirop@aetos:~$ ps
PID TTY TIME CMD
20870 pts/0 00:00:00 bash
29411 pts/0 00:00:00 ps
asidirop@aetos:~$ cat /proc/20870/environ
LANG=en_US.UTF-
8USER=asidiropLOGNAME=asidiropHOME=/home/staff/ektaktoi/asidiropP
ATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/gamesMAIL=/var
/mail/asidiropSHELL=/bin/bashSSH_CLIENT=94.68.138.167 55038
22SSH_CONNECTION=94.68.138.167 55038 195.251.123.232
22SSH_TTY=/dev/pts/0TERM=xterm

Χξήζηκεο Μεηαβιεηέο Πεξηβάιινληνο


Έλα πνιχ ρξήζηκν ζχλνιν κεηαβιεηψλ πεξηβάιινληνο είλαη νη κεηαβιεηέο πνπ αθνξνχλ ηε γιψζζα θαη ηα
ζχκβνια εκθάληζεο, πρ αλ ζηελ ψξα ζα ππάξρεη ην π.κ. ή ην a.m. Απηέο είλαη νη:

 LANG,
 LANGUAGE,
 LC_CTYPE,
 LC_NUMERIC,
 LC_TIME,
 LC_COLLATE,
 LC_MONETARY,
 LC_MESSAGES,
 LC_PAPER,
 LC_NAME,
 LC_ADDRESS,
 LC_TELEPHONE,
 LC_MEASUREMENT,
 LC_IDENTIFICATION.

Απηέο νη κεηαβιεηέο πεξηβάιινληνο ρξεζηκνπνηνχληαη απφ ηηο βηβιηνζήθεο ηνπ ζπζηήκαηνο θαη ησλ
γισζζψλ πξνγξακκαηηζκνχ γηα ηε ζσζηή εκθάληζε κελπκάησλ. Βαζηθέο κεηαβιεηέο είλαη
νη LANG θαη LANGUAGE. Απηέο νη δπν κεηαβιεηέο νξίδνπλ ηε γιψζζα επηθνηλσλίαο ησλ πξνγξακκάησλ θαη
ηνλ ρξήζηε. Κάπνηα πξνγξάκκαηα ιακβάλνπλ ππφςε ηε κεηαβιεηή LANG, ελψ θάπνηα άιια ηε κεηαβιεηή
LANGUAGE, γη' απηφ ζα πξέπεη λα ηίζεληαη θαη νη δπν ζηελ ίδηα ηηκή. Βιέπνπκε, γηα παξάδεηγκα, παξαθάησ
ηελ εκθάληζε ιαζψλ απφ ηελ εληνιή ls. ΢ηε κηα πεξίπησζε ην κήλπκα ιάζνπο εκθαλίδεηαη ζηα Αγγιηθά,
ελψ ζηελ άιιε ζηα Διιεληθά. Γελ έρνπλ φια ηα πξνγξάκκαηα κεηαθξάζεηο γηα φιεο ηηο γιψζζεο, ζπλεπψο
πνιιέο θνξέο ε κεηάθξαζε είλαη εκηηειήο, φπσο παξαθάησ. Παξφηη ε ls εκθαλίδεη ζηα Διιεληθά ην κήλπκα:
«Γελ ππάξρεη ηέηνην αξρείν ή θαηάινγνο», εκθαλίδεηαη θαη ην κήλπκα “cannot access”, γηα ην νπνίν δελ έρεη
νξηζηεί ε θαηάιιειε κεηάθξαζε ζηελ εληνιή ls.

157
asidirop@aetos:~$ ls /dfg
ls: cannot access /dfg: No such file or directory
asidirop@aetos:~$ export LANG=el_GR.UTF-8
asidirop@aetos:~$ ls /dfg
ls: cannot access /dfg: Γελ ππάξρεη ηέηνην αξρείν ή θαηάινγνο
asidirop@aetos:~$

Δπφκελε ηδηαίηεξα ζεκαληηθή κεηαβιεηή πεξηβάιινληνο είλαη ε PATH. Μέζσ απηήο νξίδεηαη ζε
πνηνπο θαηαιφγνπο ζα ςάρλεη ην θέιπθνο γηα λα βξεη ην εθηειέζηκν ηεο εληνιήο πνπ έρεη πιεθηξνινγήζεη ν
ρξήζηεο. Ζ κεηαβιεηή πεξηιακβάλεη δηαδξνκέο πξνο θαηαιφγνπο ρσξηζκέλεο κε ηνλ ραξαθηήξα ":" φπσο
παξαθάησ:

PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/home/staff/ektaktoi
/asidirop/bin

Κάζε θνξά πνπ ν ρξήζηεο πιεθηξνινγεί κηα εληνιή (πρ ls), ην θέιπθνο ςάρλεη κε ηε ζεηξά φινπο
ηνπο θαηαιφγνπο πνπ νξίδνληαη ζην PATH, γηα λα βξεη ην εθηειέζηκν ηεο ls. ΢ηελ πξψηε ζέζε πνπ ζα ην
βξεη, ζηακαηά ηελ αλαδήηεζε θαη εθηειεί ηελ εληνιή απφ ηνλ θαηάινγν πνπ βξέζεθε.
Δάλ έλα εθηειέζηκν δελ βξίζθεηαη ζην PATH (δειαδή δελ είλαη απνζεθεπκέλν ζε θαηάινγν πνπ
πεξηιακβάλεηαη ζην ΡΑΣΖ), γηα λα ην εθηειέζεη ν ρξήζηεο, ζα πξέπεη λα δψζεη ηε δηαδξνκή πξνο απηφ, είηε
απφιπηε είηε ζρεηηθή. Παξάδεηγκα, παξαθάησ ε εληνιή fsck είλαη απνζεθεπκέλε ζηνλ θαηάινγν /sbin, ν
νπνίνο δελ βξίζθεηαη ζην PATH. Έηζη, δελ κπνξεί ν ρξήζηεο λα ηελ εθηειέζεη πιεθηξνινγψληαο κφλν ην
φλνκά ηεο αιιά πξέπεη λα πιεθηξνινγήζεη ηε δηαδξνκή πξνο απηήλ.

asidirop@aetos:~$ fsck
-bash: fsck: command not found
asidirop@aetos:~$ /sbin/fsck
fsck from util-linux-ng 2.17.2
If you wish to check the consistency of an XFS filesystem or
repair a damaged filesystem, see xfs_check(8) and xfs_repair(8).
e2fsck 1.41.12 (17-May-2010)

7.4 Ρνέο Δηζόδνπ-Δμόδνπ θαη Αλαθαηεύζπλζε


Ζ πιεξνθνξία, πνηα αξρεία έρεη αλνηρηά ε θάζε δηεξγαζία, πξέπεη λα απνζεθεχεηαη θάπνπ. Απηήλ ηελ
πιεξνθνξία ηε δηαηεξεί ν ππξήλαο γηα θάζε δηεξγαζία, θαη δεδνκέλνπ φηη κηα δηεξγαζία κπνξεί λα έρεη πνιιά
αξρεία αλνηρηά ζπγρξφλσο, απαηηείηαη έλαο πίλαθαο πνπ λα απνζεθεχεη απηέο ηηο πιεξνθνξίεο. Σα ζηνηρεία
ηνπ πίλαθα ζην unix αλαθέξνληαη σο file descriptors, ελψ ζηα Windows αλαθέξνληαη σο file handlers, ζηελ
πξαγκαηηθφηεηα φκσο είλαη ην ίδην.
Γηα θάζε αλνηρηφ αξρείν δηαηεξνχληαη δηάθνξεο πιεξνθνξίεο. ΢εκαληηθή πιεξνθνξία είλαη ε ζέζε
ηνπ «Κέξζνξα» κέζα ζην αξρείν. Ο Κέξζνξαο πεξηέρεη ηελ πιεξνθνξία απφ πνηα ζέζε ηνπ αξρείνπ λα
δηαβαζηνχλ δεδνκέλα θαηά ηελ επφκελε αλάγλσζε (read) πνπ ζα θάλεη ε δηεξγαζία απφ ην αξρείν. Αλ δελ
ππήξρε ν Κέξζνξαο ηφηε πάληα κηα δηεξγαζία ζα δηάβαδε ζπλερψο κφλν ην πξψην byte απφ έλα αξρείν. Γηα
παξάδεηγκα, φηαλ έλα πξφγξακκα αλνίγεη έλα αξρείν (πρ γηα αλάγλσζε) ν θέξζνξαο είλαη ζηε ζέζε 0. Δάλ ην
πξφγξακκα δηαβάζεη (read) 5 bytes απφ ην αξρείν, ηφηε ν θέξζνξαο κεηαθηλείηαη 5 ζέζεηο. Σελ επφκελε θνξά
πνπ ζα θάλεη αλάγλσζε (read) ην πξφγξακκα ζα δηαβάζεη ηα επφκελα bytes ηνπ αξρείνπ. Με απηφλ ηνλ ηξφπν
βήκα-βήκα ζα θηάζεη θάπνηα ζηηγκή ζην ηέινο ηνπ αξρείνπ.

158
Βιέπνληαο ηνλ θάθειν fd απφ ην /proc κηαο δηεξγαζίαο, κπνξεί ν ρξήζηεο λα δεη πνηα αξρεία έρεη
αλνηρηά κηα δηεξγαζία (αξθεί λα ην επηηξέπνπλ νη άδεηεο πξφζβαζεο). ΢ην παξαθάησ παξάδεηγκα βιέπνπκε ηα
αξρεία πνπ έρεη αλνηρηά ε δηεξγαζία πνπ αληηζηνηρεί ην πξφγξακκα “firefox” (ζηελ πξαγκαηηθφηεηα είλαη
10άδεο ζηελ πεξίπησζε ηνπ firefox).

asidirop@antonis-PC:~$ ls -l /proc/10569/fd
total 0
lr-x------ 1 asidirop asidirop 64 2012-04-26 19:14 0 -> /dev/null
lrwx------ 1 asidirop asidirop 64 2012-04-26 19:14 1 ->
/home/asidirop/.xsession-errors
l-wx------ 1 asidirop asidirop 64 2012-04-26 19:14 10 -> pipe:[46911]
lrwx------ 1 asidirop asidirop 64 2012-04-26 19:14 101 -> socket:[3928988]
lrwx------ 1 asidirop asidirop 64 2012-04-26 19:14 102 -> socket:[637537]
lr-x------ 1 asidirop asidirop 64 2012-04-26 19:14 103 ->
/home/asidirop/.mozilla/firefox/9nb3c2bh.default/places.sqlite
lrwx------ 1 asidirop asidirop 64 2012-04-26 19:14 106 ->
/home/asidirop/.mozilla/firefox/9nb3c2bh.default/places.sqlite-wal
.......

Όιεο νη δηεξγαζίεο έρνπλ εμ’ νξηζκνχ ηξεηο αλνηρηέο ξνέο εηζφδνπ-εμφδνπ, νπζηαζηηθά ηξία αλνηρηά
αξρεία. Γηα παξάδεηγκα, αλ θηηάμνπκε έλα απιφ πξφγξακκα ην νπνίν δελ θάλεη ηίπνηε θαη ην εθηειέζνπκε, αλ
ειέγμνπκε ηα αλνηρηά αξρεία ζηνλ θάθειν /proc/PID/fd ζα δνχκε ηξεηο εγγξαθέο:

asidirop@antonis-PC:~$ ls -l /proc/13238/fd
total 0
lrwx------ 1 asidirop asidirop 64 Jul 17 15:46 0 -> /dev/pts/2
lrwx------ 1 asidirop asidirop 64 Jul 17 15:46 1 -> /dev/pts/2
lrwx------ 1 asidirop asidirop 64 Jul 17 15:46 2 -> /dev/pts/2

Απηέο νη ξνέο εηζφδνπ-εμφδνπ είλαη νη:

 Καλνληθή είζνδνο (αλαθέξεηαη θαη σο input ή σο standard input ή σο stdin).


 Καλνληθή έμνδνο (αλαθέξεηαη θαη σο output ή σο standard output ή σο stdout).
 Έμνδνο ιαζψλ ( αλαθέξεηαη θαη σο error ή σο standard error ή σο stderr).

Απηφ ηζρχεη ζρεδφλ γηα φια ηα Λεηηνπξγηθά ΢πζηήκαηα θαη πξνθαλψο δελ εμαξηάηαη απφ ηε γιψζζα
πξνγξακκαηηζκνχ κε ηελ νπνία δεκηνπξγήζεθε ην εθηειέζηκν πνπ αληηζηνηρεί ζηε δηεξγαζία. ΢ε φιεο ηηο
γιψζζεο πξνγξακκαηηζκνχ ππάξρνπλ κεηαβιεηέο ή αληηθείκελα πνπ αληηζηνηρνχλ ζε απηέο ηηο ξνέο εηζφδνπ-
εμφδνπ. ΢ε θάζε γιψζζα πξνγξακκαηηζκνχ κπνξεί λα αλαθέξνληαη κε δηαθνξεηηθφ φλνκα, αληηζηνηρνχλ
φκσο ζην ίδην ζηνηρείν:

 C: stdin, stdout, stderr,


 C++: cin, cout, cerr,
 Perl: STDOUT, STDIN, STDERR,
 Java: System.in, System.out, System.err.

΢ηηο πεξηζζφηεξεο γιψζζεο πξνγξακκαηηζκνχ, φηαλ παξαιείπεηαη ε αλαθνξά ζε αξρείν, ελλνείηαη ε


θαλνληθή είζνδνο (stdin), φηαλ πξφθεηηαη γηα αλάγλσζε, ελψ ελλνείηαη ε θαλνληθή έμνδνο (stdout), φηαλ
πξφθεηηαη γηα εγγξαθή. Παξάδεηγκα, ζηε γιψζζα C ηα δπν παξαθάησ είλαη ηζνδχλακα:

159
fprintf(stdout,"TEST\n");
printf("TEST\n");

Αληίζηνηρα, φηαλ πξφθεηηαη γηα αλάγλσζε ηα δπν παξαθάησ ζηε γιψζζα C είλαη ηζνδχλακα:

fscanf(stdin,"%s",tmp);
scanf("%s",tmp);

O "file descriptor" είλαη έλαο αθέξαηνο (integer) πνπ δείρλεη ηε ζέζε ηνπ αξρείνπ ζηνλ πίλαθα κε ηα
αλνηρηά αξρεία ηεο δηεξγαζίαο. Μηα δηεξγαζία έρεη εμ νξηζκνχ ηξία αλνηρηά αξρεία ηα νπνία βξίζθνληαη ζηηο
ζέζεηο 0,1,2 ηνπ πίλαθα αλνηρηψλ αξρείσλ θαη αληηζηνηρνχλ ζηελ θαλνληθή είζνδν, θαλνληθή έμνδν θαη έμνδν
ιαζψλ, φπσο θαίλεηαη ζηνλ Πίλαθα 7.2.

Πίλαθαο 7.2: Σα πξνθαζνξηζκέλα αλνηρηά αξρεία


πνπ αληηζηνηρνύλ ζηηο ξνέο εηζόδνπ-εμόδνπ.

Θέζε Αληηζηνηρία
0 Καλνληθή είζνδνο (stdin)
1 Καλνληθή έμνδνο (stdout)
2 Έμνδνο Λαζψλ (stderr)

Σν Λεηηνπξγηθφ ΢χζηεκα θξαηάεη ζε θάζε ζέζε ηνπ πίλαθα δηάθνξεο πιεξνθνξίεο πνπ αληηζηνηρνχλ
ζην αλνηρηφ αξρείν φπσο ηε ζέζε ηνπ Κέξζνξα ζην αξρείν, ηελ θαηάζηαζε αλνίγκαηνο (read, write, append),
θ.ά.
Μπνξνχκε λα ειέγμνπκε πνηα αξρεία έρεη αλνηρηά έλα θέιπθνο θαζψο εθηειείηαη. ΢ην παξαθάησ
παξάδεηγκα θαίλεηαη φηη ην ηξέρνλ θέιπθνο έρεη ηξία αλνηρηά αξρεία πνπ αληηζηνηρνχλ ζε ζπζθεπή
ηεξκαηηθνχ (/dev/pts/1). Απηφ ζεκαίλεη φηη ην ζπγθεθξηκέλν θέιπθνο γξάθεη θαη δηαβάδεη απφ ην ηεξκαηηθφ
/dev/pts/1. Άξα, αλ ηππψζεη θάηη ζηελ θαλνληθή έμνδν, ζα ηππσζεί ζην /dev/pts/1 θαη ηειηθά ζα εκθαληζηεί
(ππφ θπζηνινγηθέο ζπλζήθεο) ζηελ νζφλε ηνπ ρξήζηε.

asidirop@aetos:~$ ps # Βξίζθνπκε ην PID ηνπ ηξέρνληνο θειύθνπο


PID TTY TIME CMD
7218 pts/1 00:00:00 ps
22967 pts/1 00:00:00 bash
asidirop@aetos:~$ ls -l /proc/22967/fd
total 0
lrwx------ 1 asidirop conit 64 Apr 27 02:18 0 -> /dev/pts/1
lrwx------ 1 asidirop conit 64 Apr 27 02:18 1 -> /dev/pts/1
lrwx------ 1 asidirop conit 64 Apr 27 00:35 2 -> /dev/pts/1

Κάζε δηεξγαζία θιεξνλνκεί απφ ηε γνληθή ηεο ηνλ πίλαθα αλνηρηψλ αξρείσλ. Αλαιπηηθφηεξα, κε ηε
κέζνδν exec θιεξνλνκνχληαη κφλν νη ηξεηο πξψηεο ζέζεηο ηνπ πίλαθα, ελψ κε ηε κέζνδν fork θιεξνλνκείηαη
νιφθιεξνο ν πίλαθαο. Όηαλ ν ρξήζηεο πιεθηξνινγεί κηα εληνιή ζην θέιπθνο, ην θέιπθνο πξψηα θάλεη fork
θαη κεηά exec ηελ εληνιή (φπσο δείμακε ζην Γηαδξαζηηθφ ΢ρήκα 7.2) , ζπλεπψο ε λέα δηεξγαζία πνπ ζα
πξνθχςεη ζα έρεη θιεξνλνκήζεη απφ ην αξρηθφ θέιπθνο ηα stdin, stdout θαη stderr, φπσο παξνπζηάδεηαη ζην

160
΢ρήκα 7.3. Παξαηεξήζηε φηη ζην ζρήκα (θαη ζε θάζε επφκελν ζρήκα) αλαπαξηζηψληαη κε δηαθνξεηηθά βέιε
νη ξνέο θαλνληθήο εμφδνπ θαη εμφδνπ ιαζψλ.

stdout
stdin

Terminal (write)
Terminal (read)
Shell stderr

Program

΢ρήκα 7.3: Μηα δηεξγαζία θιεξνλνκεί από ηε γνληθή ηεο ηηο ξνέο εηζόδνπ-εμόδνπ.

΢ην Γηαδξαζηηθφ ΢ρήκα 7.4 εκθαλίδνληαη ηέζζεξα παξαδείγκαηα εληνιψλ γηα ηελ θαηαλφεζε ηνπ
ηξφπνπ ιεηηνπξγίαο ησλ ξνψλ εηζφδνπ-εμφδνπ θαη ηνπ ηεξκαηηθνχ. ΢ηα δπν πξψηα γηα ιφγνπο απινπνίεζεο
δελ πεξηιακβάλεηαη ε δηαδηθαζία ηνπ θειχθνπο fork-exec, ελψ πεξηιακβάλεηαη ζηα δπν επφκελα. ΢ην
παξαθάησ δηαδξαζηηθφ ζρήκα επηιέμηε έλα απφ ηα ηέζζεξα παξαδείγκαηα (θαηά πξνηίκεζε κε ηε ζεηξά), γηα
λα δείηε ηα βήκαηα πνπ ζπκβαίλνπλ ζε ζρέζε κε ηηο ξνέο εηζφδνπ-εμφδνπ, φηαλ εθηειείηαη κηα εληνιή.

 Απηφ ην ΢ρήκα είλαη Γηαδξαζηηθφ.


Αλαηξέμηε ζηελ ειεθηξνληθή έθδνζε.

΢ρήκα 7.4: Η δηαδηθαζία δεκηνπξγίαο ησλ ξνώλ εηζόδνπ-εμόδνπ θαηά ηελ εθηέιεζε κηαο εληνιήο.

7.4.1 Αλαθαηεύζπλζε (Redirection)


Ο ρξήζηεο κπνξεί λα δψζεη δηάθνξεο νδεγίεο πξνο ην θέιπθνο, ψζηε λα αιιάμεη ηηο πξνθαζνξηζκέλεο ξνέο
εηζφδνπ-εμφδνπ. Έηζη, ρξεζηκνπνηψληαο ην ζχκβνιν > νξίδεηαη αιιαγή ηεο θαλνληθήο εμφδνπ. Μεηά απφ ην
ζχκβνιν > πξέπεη λα αθνινπζεί φλνκα αξρείνπ. Έηζη, ε θαλνληθή έμνδνο ηεο εληνιήο ζα αλαθαηεπζπλζεί ζην
αξρείν πνπ νξίζηεθε. ΢ην παξαθάησ παξάδεηγκα, ε εληνιή ls δελ ζα εκθαλίζεη ηίπνηα ζηελ νζφλε, αιιά ε

161
έμνδφο ηεο ζα απνζεθεπηεί ζην αξρείν file1. ΢ην ΢ρήκα 7.5 παξνπζηάδνληαη ζρεκαηηθά νη ξνέο εηζφδνπ-
εμφδνπ ηνπ παξαδείγκαηνο.

asidirop@aetos:~$ ls -l > file1


asidirop@aetos:~$

Terminal (write)
Terminal (read) stdout
stdin
Shell stderr

ls -l

file1

΢ρήκα 7.5: Αιιαγή ηεο θαλνληθήο εμόδνπ πξνο αξρείν.

Αλ, φκσο, ε ls εκθαλίζεη κήλπκα ιάζνπο, ηφηε απηφ ζα ζηαιεί ζην “stderr”, άξα ζηελ νζφλε. Κάηη
ηέηνην ζα ήηαλ ην απνηέιεζκα ηεο παξαθάησ εληνιήο:

asidirop@aetos:~$ ls -l /foo > file1


ls: cannot access /foo: No such file or directory
asidirop@aetos:~$

 Τπάξρεη ε γεληθή πνιηηηθή: κέζα από έλα πξόγξακκα αλ ζέινπκε λα ηππώζνπκε έλα κήλπκα
ιάζνπο, ηόηε απηό ζα πξέπεη λα ηππσζεί ζηελ έξοδο λαθών (stderr) θαη ΌΧΙ ζηην ηςπική
έξοδο (stdout). Απηή ε πνιηηηθή πξέπεη λα αθνινπζείηαη ζε όιεο ηηο πεξηπηώζεηο θαη κέζα από
όιεο ηηο γιώζζεο πξνγξακκαηηζκνύ θαη ζε όια ηα Λεηηνπξγηθά ΢πζηήκαηα (unix ή windows).

΢ηνλ Πίλαθα 7.3 ζπλνςίδνληαη ηα ζχκβνια πνπ ρξεζηκνπνηνχληαη γηα ηελ αιιαγή ησλ ξνψλ εηζφδνπ-
εμφδνπ. Πξηλ απφ ην ζχκβνιν ">" κπαίλεη ν αξηζκφο ηνπ αλνηρηνχ αξρείνπ πξνο αλαθαηεχζπλζε. Αλ απηφο ν
αξηζκφο παξαιείπεηαη, ηφηε ελλνείηαη ην έλα (1) ην νπνίν αληηζηνηρεί ζηελ θαλνληθή έμνδν. To (2) αληηζηνηρεί
ζηελ έμνδν ιαζψλ. Έηζη, αλ ρξεζηκνπνηήζνπκε ην "2>", κφλν ε έμνδνο ιαζψλ ζα αλαθαηεπζπλζεί ζε αξρείν,
φπσο ζην επφκελν παξάδεηγκα:

asidirop@aetos:~$ ls -l /foo 2> file2


asidirop@aetos:~$ cat file2
ls: cannot access /foo: No such file or directory
asidirop@aetos:~$

162
Terminal (write)
Terminal (read)
stdout
stdin
Shell stderr

ls -l

file2

΢ρήκα 7.6: Αιιαγή ηεο εμόδνπ ιαζώλ πξνο αξρείν.

Πίλαθαο 7.3: Λίζηα κε ηα ζύκβνια αλαθαηεύζπλζεο.

΢ύκβνιν Πεξηγξαθή
>file Άιιαμε ην stdout, ψζηε λα «γξάθεη» ζην αξρείν file θαη φρη ζην πξνθαζνξηζκέλν. Σν file,
1> file αλ ππάξρεη, ζα δηαγξαθεί, αλ δελ ππάξρεη ζα δεκηνπξγεζεί.
Άιιαμε ην stdout, ψζηε λα «γξάθεη» ζην αξρείν file θαη φρη ζην πξνθαζνξηζκέλν. Σν file,
>>file
αλ ππάξρεη, ΓΔΝ ζα δηαγξαθεί, αλ δελ ππάξρεη ζα δεκηνπξγεζεί. Σα δεδνκέλα απφ ηελ
1>> file
εληνιή ζα γίλνπλ append ζην file.
Άιιαμε ην stderr, ψζηε λα «γξάθεη» ζην αξρείν file θαη φρη ζην πξνθαζνξηζκέλν. Σν file,
2> file
αλ ππάξρεη, ζα δηαγξαθεί, αλ δελ ππάξρεη ζα δεκηνπξγεζεί.
Άιιαμε ην stderr, ψζηε λα «γξάθεη» ζην αξρείν file θαη φρη ζην πξνθαζνξηζκέλν. Σν file,
2>> file αλ ππάξρεη, ΓΔΝ ζα δηαγξαθεί, αλ δελ ππάξρεη ζα δεκηνπξγεζεί. Σα δεδνκέλα απφ ηελ
εληνιή ζα γίλνπλ append ζην file.
Άιιαμε ην stdin, ψζηε λα «δηαβάδεη» απφ ην αξρείν file θαη φρη απφ ην πξνθαζνξηζκέλν
< file
(ηεξκαηηθφ). Αλ δελ ππάξρεη ην file, ηφηε ζα πάξνπκε ζθάικα.
Άιιαμε, ψζηε ην stdin λα «δηαβάδεη» απφ ην θέιπθνο. Σν θέιπθνο ζα πεξηκέλεη λα
<< STRING πιεθηξνινγήζνπκε δεδνκέλα, κέρξη λα πιεθηξνινγήζνπκε ηε γξακκή STRING. Σφηε, φ,ηη
πιεθηξνινγήζακε ζα ην ζηείιεη ζην stdin ηεο δηεξγαζίαο.
΢ηείιε ηελ έμνδν απφ ην 1 (stdout) ζην 2 (stderr). ΢ηε γεληθή πεξίπησζε, x>&y, ζηείιε ην x
1>&2
ζην y.

Δάλ ε εληνιή (δηεξγαζία) ζηείιεη δεδνκέλα θαη ζηελ θαλνληθή έμνδν, αιιά θαη ζηελ έμνδν ιαζψλ,
ηφηε ην θάζε ηη ζα απνζεθεπηεί ή ζα εκθαληζηεί ζηε ξνή πνπ ηνπ αληηζηνηρεί.

163
asidirop@aetos:~$ ls /tmp /foo 2> file2
/tmp:
20112xeim-adopse.tar.bz2 cake filename myid2 t textVi.txt
arx fff leleris.txt myid9 test too2l
arxeio2 file1 ls myidnik test01 too3l
asd file1.txt mc-antant o test.txt
ask3erg4 file3 mybest otinane testvi1
asidirop@aetos:~$ cat file2
ls: cannot access /foo: No such file or directory
asidirop@aetos:~$

΢ηελ παξαπάλσ εληνιή ls δφζεθε ε νδεγία λα εκθαλίδεη ηα πεξηερφκελα ησλ θαηαιφγσλ /tmp θαη
/foo. Ο /tmp ππάξρεη, θαη ε εληνιή εκθαλίδεη ηα πεξηερφκελά ηνπ ζηελ θαλνληθή έμνδν, δειαδή εκθαλίδνληαη
ζην ηεξκαηηθφ. Ο /foo δελ ππάξρεη, θαη ε εληνιή εκθαλίδεη κήλπκα ιάζνπο, ην νπνίν ζηέιλεη ζηελ έμνδν
ιαζψλ, ε νπνία αληηζηνηρεί ζην αξρείν file2. Αλ εκθαλίζνπκε ηα πεξηερφκελα ηνπ file2, είλαη μεθάζαξν φηη
πεξηέρεη ην κήλπκα ιάζνπο ηεο ls.
΢ε κηα εληνιή είλαη δπλαηφ λα αιιάμεη ν ρξήζηεο πνιιέο ξνέο εηζφδνπ-εμφδνπ. Έηζη, παξαθάησ
αιιάδνπλ θαη νη δπν ξνέο. Ζ θαλνληθή έμνδνο απνζεθεχεηαη ζην file1, ελψ ε έμνδνο ιαζψλ ζην file2.
΢ρεκαηηθή αλαπαξάζηαζε απηήο ηεο εληνιήο θαίλεηαη ζην ΢ρήκα 7.7.

asidirop@aetos:~$ ls /tmp /foo > file1 2> file2


asidirop@aetos:~$ cat file1
20112xeim-adopse.tar.bz2
arx
arxeio2
asd
ask3erg4
cake
fff
file1
file1.txt
........
asidirop@aetos:~$ cat file2
ls: cannot access /foo: No such file or directory
asidirop@aetos:~$
Terminal (read)

Terminal

stdout
(write)

stdin
Shell stderr

ls -l file1

file2

΢ρήκα 7.7: Αιιαγή ηεο θαλνληθήο εμόδνπ θαη ηεο εμόδνπ ιαζώλ πξνο δηαθνξεηηθά αξρεία.

164
΢ηελ ηειεπηαία γξακκή ηνπ Πίλαθα 7.3 αλαθέξεηαη ε δπλαηφηεηα αλαθαηεχζπλζεο κηαο ξνήο ζε κηα
άιιε. Με ηελ παξαθάησ εληνιή αλαθαηεπζχλεηαη ε έμνδνο ιαζψλ ζηελ θαλνληθή έμνδν (΢ρήκα 7.8). Απφ ην
απνηέιεζκα δελ είλαη πξνθαλέο ηη ζπλέβε, δηφηη θαη νη δπν ξνέο έηζη θη αιιηψο αληηζηνηρνχλ ζην ηεξκαηηθφ.
Όκσο απηφ πνπ ζπλέβε εζσηεξηθά είλαη λα δηαγξαθεί ε ζέζε 2 ηνπ πίλαθα κε ηα αλνηρηά αξρεία θαη λα
αληηθαηαζηαζεί ην πεξηερφκελφ ηεο κε φ,ηη πεξηέρεη ε ζέζε 1 (θαλνληθή έμνδνο).

asidirop@aetos:~$ ls /foo 2>&1


ls: cannot access /foo: No such file or directory
asidirop@aetos:~$

Terminal (write)
Terminal (read)

stdout
stdin
Shell stderr

ls -l

΢ρήκα 7.8: Αιιαγή ηεο εμόδνπ ιαζώλ πξνο ηελ θαλνληθή έμνδν.

΢ηα παξαθάησ παξαδείγκαηα είλαη πεξηζζφηεξν εκθαλέο ηη ζπκβαίλεη. Αλαθαηεπζχλεηαη ε θαλνληθή


έμνδνο ζην αξρείν file1 θαη κεηά αλαθαηεπζχλεηαη ε έμνδνο ιαζψλ ζηελ θαλνληθή έμνδν, δειαδή ζην αξρείν
file1. Έηζη, ζην αξρείν file1 απνζεθεχνληαη ηα δεδνκέλα ηεο θαλνληθήο εμφδνπ αιιά θαη ηεο εμφδνπ ιαζψλ.
Δδψ λα ζεκεησζεί φηη απηφο είλαη ν κφλνο ηξφπνο λα γίλεη απνζήθεπζε δπν ξνψλ ζε έλα αξρείν. ΢ην ΢ρήκα
7.9 θαίλεηαη ζρεκαηηθά ε δνκή ησλ αλαθαηεπζχλζεσλ.

asidirop@aetos:~$ ls /tmp /foo > file1 2>&1


asidirop@aetos:~$ cat file1
ls: cannot access /foo: No such file or directory
20112xeim-adopse.tar.bz2
arx
arxeio2
asd
ask3erg4
cake
fff
file1
file1.txt
........

165
Terminal (read)

Terminal
stdout

(write)
stdin
Shell stderr

file1
ls -l

΢ρήκα 7.9: Αιιαγή ηεο θαλνληθήο εμόδνπ πξνο αξρείν θαη ηεο εμόδνπ ιαζώλ πξνο ηελ θαλνληθή έμνδν.

΢ηελ πεξίπησζε πνπ γίλεηαη αλαθαηεχζπλζε κηαο ξνήο ζε κηα άιιε, είλαη ζεκαληηθή ε ζεηξά κε ηελ
νπνία νξίδνληαη νη αλαθεηεπζχλζεηο (ελψ ζε άιιεο πεξηπηψζεηο δελ παίδεη ξφιν ε ζεηξά). Έηζη γηα
παξάδεηγκα, αλ γίλεη πξψηα ε 2>&1 θαη κεηά ην >file όπωο παξαθάηω:

asidirop@aetos:~$ ls /tmp /foo 1 2>&1 > file


ls: cannot access /foo: No such file or directory
asidirop@aetos:~$ cat file1
20112xeim-adopse.tar.bz2
arx
arxeio2
asd
ask3erg4
cake
fff
file1
file1.txt
........

ηφηε έρνπκε έλα εληειψο δηαθνξεηηθφ ζρήκα αλαθαηεπζχλζεσλ ζε ζρέζε κε ηελ πξνεγνχκελε πεξίπησζε.
Πξψηα γίλεηαη ε αλαθαηεχζπλζε ηεο εμφδνπ ιαζψλ πξνο ηελ θαλνληθή έμνδν ( 2>&1). Καηά ηε ζπγθεθξηκέλε
ρξνληθή ζηηγκή ε θαλνληθή έμνδνο δελ έρεη αιιάμεη αθφκε θαη "δείρλεη" πξνο ην ηεξκαηηθφ. ΢ε δεχηεξν βήκα
γίλεηαη ε αλαθαηεχζπλζε ηεο θαλνληθήο εμφδνπ πξνο ην αξρείν file1. Όκσο ηειηθά ε έμνδνο ιαζψλ παξακέλεη
λα "δείρλεη" πξνο ην ηεξκαηηθφ (΢ρήκα 7.10).
Terminal (read)

Terminal

stdout
(write)

stdin
Shell stderr

file1
ls -l

΢ρήκα 7.10: Αιιαγή ηεο εμόδνπ ιαζώλ πξνο ηελ θαλνληθή έμνδν θαη ηεο θαλνληθήο εμόδνπ πξνο αξρείν.

166
7.4.2 Γηαζσιήλσζε (Pipelining)
΢ην Unix ππάξρεη έλα εηδηθνχ ηχπνπ αξρείν (Βιέπε Παξάγξαθν 1.3.7 θαη Τπνθεθάιαην 3.5) ην νπνίν
νλνκάδεηαη pipe (ζσιήλα). Έλα αξρείν ηχπνπ pipe είλαη νπζηαζηηθά κηα δίνδνο δεδνκέλσλ. ΢ε απηνχ ηνπ
ηχπνπ ηα αξρεία πξέπεη κηα δηεξγαζία λα γξάθεη θαη κηα άιιε (αθφκε θαη ε ίδηα, αιιά δελ έρεη πξαθηηθή
ρξήζε) λα δηαβάδεη. Απηφο ν ηχπνο αξρείσλ είλαη ηχπνπ FIFO (First-In First-Out). Έηζη φ,ηη γξάθεη ε πξψηε
δηεξγαζία ην δηαβάδεη ε δεχηεξε κε ηελ ίδηα ζεηξά. Δδψ λα ζεκεησζεί φηη ππάξρνπλ δηαθνξέο ζηελ εζσηεξηθή
πινπνίεζε ησλ pipes ζηηο δηάθνξεο εθδφζεηο ηνπ unix. ΢ην linux πινπνηνχληαη κέζσ ηνπ pipefs αιιά δελ
αληηζηνηρνχλ θαηά αλάγθε ζε πξαγκαηηθφ ρψξν ζηνλ δίζθν.
Μπνξνχκε λα αλαθαηεπζχλνπκε ηελ θαλνληθή έμνδν κηαο εληνιήο Α ζε έλα αξρείν pipe θαη ηελ
θαλνληθή είζνδν κηαο εληνιήο Β ζην ίδην αξρείν pipe. Με απηφλ ηνλ ηξφπν, φ,ηη ηππψλεη ε εληνιή Α ζα ην
δηαβάδεη ε εληνιή Β. Απηφ επηηπγράλεηαη κε ην ζχκβνιν "|" (pipe), ρσξίο λα νξίζεη ν ρξήζηεο φλνκα γηα
απηφ ην αξρείν:

Α | Β

Ζ παξαπάλσ εληνιή, ινηπφλ, δεκηνπξγεί έλα αξρείν pipe. ΢ε απηφ ην αξρείν γξάθεη ε εληνιή Α θαη
δηαβάδεη ε εληνιή Β. Έηζη πξαθηηθά, ε έμνδνο ηεο εληνιήο Α γίλεηαη είζνδνο γηα ηελ εληνιή Β.
΢ηε γεληθή πεξίπησζε κπνξνχλ λα ζπλδπαζηνχλ απεξηφξηζηεο εληνιέο κέζα ζε κηα ζπλερφκελε
δηαζσιήλσζε. Έηζη ζην παξαθάησ παξάδεηγκα (΢ρήκα 7.11) ε δηεξγαζία Α ζηέιλεη ηελ έμνδφ ηεο σο είζνδν
ζηε δηεξγαζία Β. Ζ δηεξγαζία Β ζηέιλεη ηελ έμνδφ ηεο ζηε δηεξγαζία C θαη απηφ ζα κπνξνχζε λα ζπλερηζηεί
κε πεξηζζφηεξεο δηεξγαζίεο.

Α | Β | C

Shell
Terminal (write)
Terminal (read)

C
B
A

΢ρήκα 7.11: Βαζηθή κνξθή δηαζσιήλσζεο.

Δδψ πξέπεη λα παξαηεξεζεί φηη κε ηε δηαζσιήλσζε (|) αιιάδεη κφλν ε θαλνληθή έμνδνο ηεο εληνιήο
θαη φρη ε έμνδνο ιαζψλ. Έηζη, ε έμνδνο ιαζψλ γηα φιεο ηηο δηεξγαζίεο ηνπ παξαπάλσ παξαδείγκαηνο
παξακέλεη φπσο ήηαλ, δειαδή απηφ πνπ θιεξνλνκήζεθε απφ ην γνληθφ θέιπθνο, δειαδή ην ηεξκαηηθφ.
Αο δνχκε κεξηθά παξαδείγκαηα. Έζησ ε απιή πεξίπησζε:

asidirop@aetos:~$ ls | wc
7 7 42
asidirop@aetos:~$

167
Όπσο θαίλεηαη ζην ΢ρήκα 7.12, ην θέιπθνο δεκηνπξγεί δπν ζπγαηξηθέο δηεξγαζίεο, ηελ ls θαη ηελ wc.
Γεκηνπξγείηαη έλα pipe ζην νπνίν γξάθεη ε ls θαη απφ ην νπνίν δηαβάδεη ε wc. Ζ εληνιή ls ζα γξάςεη ζην pipe
ηε ιίζηα κε ηα νλφκαηα ησλ αξρείσλ. Ζ wc ζα δηαβάζεη απηή ηε ιίζηα απφ ηελ θαλνληθή ηεο είζνδν. Ζ
ιεηηνπξγία ηεο wc είλαη λα κεηξά γξακκέο, ιέμεηο, ραξαθηήξεο. Έηζη ζα ηα κεηξήζεη (απηά πνπ ζα δηαβάζεη
απφ ηελ είζνδφ ηεο) θαη ζα ηππψζεη ζηελ θαλνληθή έμνδν (δειαδή ζην ηεξκαηηθφ) ηνπο ηξεηο αξηζκνχο.

Terminal (write)
Terminal (read)

Shell

wc
ls

BAKS 7 7 42
dbii_bin
soft
DBII
File1
test
tests

΢ρήκα 7.12: Παξάδεηγκα δηαζσιήλσζεο κε ls θαη wc.

Δλδηαθέξνλ έρεη ε πεξίπησζε πνπ κηα απφ ηηο εληνιέο πνπ ππάξρνπλ ζε κηα αθνινπζία εληνιψλ κε
δηαζσιελψζεηο παξνπζηάζεη θάπνην ζθάικα. Αο επαλαιάβνπκε ηελ πξνεγνχκελε αθνινπζία εληνιψλ κε
ηέηνην ηξφπν ψζηε ε πξψηε λα δψζεη κήλπκα ζθάικαηνο:

asidirop@aetos:~$ ls /foo | wc
access /foo: No such file or directory
0 0 0
asidirop@aetos:~$
Terminal (write)
Terminal (read)

Shell

wc
ls /foo

0 0 0

Cannot access /foo: No such file or directory

΢ρήκα 7.13: Παξάδεηγκα δηαζσιήλσζεο κε ls θαη wc (πεξίπησζε ιάζνπο).

168
Απηφ πνπ ζπκβαίλεη είλαη λα εκθαληζηεί ζην ηεξκαηηθφ κήλπκα ζθάικαηνο θαη ε εληνιή wc λα
εκθαλίζεη ηξία κεδεληθά. Θα ξσηνχζε θάπνηνο: «αθνχ ε πξψηε εληνιή έδσζε ζθάικα, γηαηί εθηειείηαη θαη ε
επφκελε εληνιή; Καη γηαηί ε επφκελε εληνιή εκθαλίδεη κεδεληθά;»

 ΢ε κηα αθνινπζία εληνιώλ κε δηαζσιήλσζε, οι ενηολέρ (διεπγαζίερ) εκηελούνηαι


παπάλληλα.

Γειαδή νη δπν δηεξγαζίεο μεθηλνχλ ζρεδφλ ηαπηφρξνλα, άξα θαηά ηελ ελεξγνπνίεζε ηεο δεχηεξεο δελ
είλαη γλσζηφ ην απνηέιεζκα ηεο πξψηεο. Έηζη, ινηπφλ, είλαη αλαπφθεπθην λα εθηειεζηνχλ θαη νη δπν εληνιέο.
Απηφ πνπ ζπκβαίλεη θαίλεηαη ζρεκαηηθά ζην ΢ρήκα 7.13. Ζ εληνιή "ls /foo" ηππψλεη ζηελ έμνδν ιαζψλ
ην κήλπκα ζθάικαηνο. Ζ έμνδνο ιαζψλ αληηζηνηρεί ζην ηεξκαηηθφ, άξα ην κήλπκα ζθάικαηνο εκθαλίδεηαη
ζην ηεξκαηηθφ. ΢ηελ θαλνληθή έμνδφ ηεο ε εληνιή ls δελ ζα ηππψζεη θάηη, δειαδή 0 bytes. Ζ δηεξγαζία πνπ
αληηζηνηρεί ζηελ wc ζα δηαβάζεη απφ ηελ θαλνληθή ηεο είζνδν 0 bytes (δειαδή θαηεπζείαλ ηνλ ραξαθηήξα
ειέγρνπ End-Of_File), θαη απηά ζα κεηξήζεη, δειαδή κεδέλ γξακκέο, κεδέλ ιέμεηο, κεδέλ ραξαθηήξεο.

7.5 Αζθήζεηο γηα εμάζθεζε

΢ηόρνο
Δμνηθείσζε κε ηνλ ρεηξηζκφ δηεξγαζηψλ, αλαθαηεχζπλζε, δηαζσιήλσζε, θίιηξα.

Άζθεζε 1
1. Υξεζηκνπνηήζηε ηελ εληνιή ps, γηα λα δείηε ηηο δηεξγαζίεο πνπ εθηεινχληαη ζην ζχζηεκα κε φιεο ηηο
δπλαηέο επηινγέο (π.ρ. ps , ps –ef, ps –al, ps -aldef θιπ).

2. ΢ηε ζπλέρεηα ρξεζηκνπνηήζηε ηελ εληνιή kill ή kill -9 ζε θάπνηα απφ ηηο ελεξγέο δηεξγαζίεο. Ση
παξαηεξείηε;

3. Αλνίμηε δπν ηεξκαηηθά (ηνπηθά, φρη απνκαθξπζκέλα). Απφ ην έλα ηεξκαηηθφ ζαο εθηειέζηε ηελ εληνιή:
dolphin.
Θα εθηειεζηεί ν FileExplorer ηνπ KDE. Απφ ην άιιν ηεξκαηηθφ, εθηειψληαο ηελ εληνιή ps ux βξείηε
ην PID πνπ αληηζηνηρεί ζηε δηεξγαζία ηνπ dolphin. ΢ηείιηε ζηε δηεξγαζία ην ζήκα STOP. (Αλ ην PID
πνπ βξήθαηε είλαη ην 1234, δψζηε ηελ εληνιή: kill –STOP 1234). Ση ζπλέβε κε ηελ εθαξκνγή; Γνθηκάζηε
λα ηε ρξεζηκνπνηήζεηε, λα θάλαηε ζην παξάζπξν ηεο εθαξκνγήο resize, minimize θηι.
΢ηείιηε ην ζήκα CONT ζηελ ίδηα δηεξγαζία. Ση ζπλέβε;
΢ηείιηε ην ζήκα TERM ζηελ ίδηα δηεξγαζία. Ση ζπλέβε;

4. ΢πλδεζείηε κε ssh ζηνλ ηδξπκαηηθφ εμππεξεηεηή (server). Δθηειέζηε ηελ εληνιή ps auxw. Δληνπίζηε
κηα δηεξγαζία πνπ δελ αλήθεη ζε ζαο θαη ζηείιηε ηεο ην ζήκα KILL (π.ρ. kill –KILL 1234). Ση
ζπλέβε;

5. Απφ ηελ έμνδν ηεο εληνιήο ps auxw κπνξείηε λα βγάιεηε ζπκπεξάζκαηα γηα

α) Σηο ελέξγεηεο πνπ θάλνπλ απηήλ ηε ζηηγκή νη ρξήζηεο?


β) Σηο ππεξεζίεο (services) πνπ εθηεινχληαη ζην κεράλεκα?

169
Άζθεζε 2

Μηα δηεξγαζία όηαλ εθηειείηαη από έλα ηεξκαηηθό, ηόηε «παίξλεη» ηνλ έιεγρν ηνπ ηεξκαηηθνύ,
δειαδή ό,ηη πιεθηξνινγήζνπκε ζα δηαβαζηεί από ηε δηεξγαζία (αλ ε δηεξγαζία δελ ζέιεη λα
δηαβάζεη από ην ηεξκαηηθό, ηόηε ό,ηη παηάκε παξακέλεη ζηνλ buffer ηνπ ηεξκαηηθνύ κέρξη θάπνηνο
λα ην δηαβάζεη). Σν shell δελ κπνξεί λα δηαβάζεη από ην ηεξκαηηθό κέρξη λα απνδεζκεύζεη ην
ηεξκαηηθό ε δηεξγαζία.

1. Αλνίμηε έλα ηεξκαηηθφ (ηνπηθά, φρη απνκαθξπζκέλα). Απφ ην ηεξκαηηθφ δψζηε πάιη ηελ εληνιή kcalc.
Σν πξφγξακκα «Κνκπηνπηεξάθη» εθηειείηαη. ΢ην ηεξκαηηθφ δελ κπνξνχκε λα δψζνπκε εληνιέο. Όηαλ
πιεθηξνινγνχκε, δελ γίλεηαη ηίπνηε. Παηήζηε ηα πιήθηξα Cntrl-Z(ζπκβνιίδεηαη κε ^Ε).

Σν ^Ε ζηέιλεη ζηελ ηξέρνπζα δηεξγαζία ην ζήκα STOP.

Πιένλ ην παξάζπξν ηνπ kcalc δελ αληηδξά ζηηο θηλήζεηο καο.

To θέιπθνο έρεη ηε δπλαηόηεηα λα ρεηξηζηεί ηηο δηεξγαζίεο πνπ εθηειέζακε κέζα από απηό. Σηο
νλνκάδεη jobs. Έλα job είλαη κηα δηεξγαζία πνπ εθηειέζηεθε από ην θέιπθνο θαη ζηακάηεζε (ή
κπήθε ζην παξαζθήλην). Παηώληαο ^Ε, ε ηξέρνπζα δηεξγαζία γίλεηαη job.

asidirop@dellpc:~$ kcalc
^Z
[1]+ Stopped kcalc
asidirop@dellpc:~$

Σα jobs έρνπλ ηε δηθή ηνπο αξίζκεζε απφ ην θέιπθνο. ΢ηελ παξαπάλσ πεξίπησζε είλαη ην jobs [1].
To + καο δειψλεη φηη είλαη ην ηξέρνλ job.

2. Γψζηε ηελ εληνιή (απφ ην ίδην ηεξκαηηθφ) :

kwrite &

To & ζην ηέινο κηαο εληνιήο δειώλεη ζην θέιπθνο λα εθηειέζεη ηελ εληνιή, θαη λα ηε βάιεη λα
εθηειείηαη ζην παξαζθήλην (δειαδή ε εληνιή δελ ζα κπνξεί λα δηαβάζεη από ην ηεξκαηηθό, αλ ην
ζειήζεη). Σν ηεξκαηηθό παξακέλεη ζηνλ έιεγρν ηνπ θειύθνπο.

170
3. Γψζηε ηελ εληνιή:

jobs

καο δείρλεη φια ηα jobs ηνπ ηξέρνληνο θειχθνπο θαη ην status ηνπ θαζελφο. Αλ ε έμνδνο απφ ηελ εληνιή jobs
είλαη ε:

asidirop@dellpc:~$ jobs
[1]+ Stopped kcalc
[2]- Running kwrite &

δψζηε ηελ εληνιή:

bg %1

δειαδή % θαη ηνλ αξηζκφ ηνπ job πνπ αληηζηνηρεί ζην ζηακαηεκέλν job.

Η εληνιή bg ζηέιλεη ην ζήκα CONT ζηε δηεξγαζία πνπ αληηζηνηρεί, θαη ηε βάδεη λα εθηειείηαη ζην
παξαζθήλην.

Δθηειέζηε πάιη ηελ εληνιή jobs θαη δψζηε ηελ εληνιή:

fg %1

H εληνιή fg ζηέιλεη ην ζήκα CONT ζηε δηεξγαζία πνπ αληηζηνηρεί, θαη ηελ βάδεη λα εθηειείηαη ζην
πξνζθήλην, δειαδή ηεο δίλεη ηνλ έιεγρν ηνπ ηεξκαηηθνύ.

Παηήζηε ηα πιήθηξα Cntrl-C (ζπκβνιίδεηαη ^C).

To ^C ζηέιλεη ζηελ ηξέρνπζα δηεξγαζία ην ζήκα TERM.

Ζ εθαξκνγή kcalc ηεξκαηίζηεθε. Σψξα σο “job” έρνπκε κφλν ην kwrite. Γψζηε ηελ εληνιή:

kcharselect &

Σψξα έρνπκε δπν jobs πνπ ηξέρνπλ. Κιείζηε ην ηεξκαηηθφ απφ ην νπνίν ηξέμαηε ηα πξνεγνχκελα jobs
(παηψληαο ζην παξάζπξν ην θνπκπί γηα θιείζηκν). Σν bash, φηαλ ηεξκαηίδεηαη, ηεξκαηίδεη θαη φια ηα jobs

171
ηνπ (ζηέιλεη ζε φια ηα jobs ην ζήκα SIGHUP). Δάλ δελ ζέινπκε έλα job λα ηεξκαηηζηεί κε ηελ έμνδν απφ ην
θέιπθνο, ηφηε πξέπεη λα δψζνπκε ηελ εληνιή disown %x (φπνπ x ην job number).
H εληνιή disown απνδεζκεχεη έλα job απφ ην ηξέρνλ shell. H δηεξγαζία, φκσο, παξακέλεη ζε
εθηέιεζε.

Άζθεζε 3
Να βξεζεί ην απνηέιεζκα ηεο εθηέιεζεο ησλ παξαθάησ εληνιψλ :

# 1
who > file1
# 2
cat file1
# 3
wc file1
# 4
wc < file1
# 5
ls –l file1
# 6
echo "Hello world" > file2
# 7
more file2
# 8
wc file2
# 9
sort < file1 > file3
# 10
cat file3

Πνηα είλαη ε δηαθνξά ηεο εληνιήο 3 απφ ηελ 4;

Οη εληνιέο wc, grep, sort (θαη όιεο νη αληίζηνηρεο) ζπλήζσο νλνκάδνληαη εληνιέο θίιηξα.
Απηέο νη εληνιέο (εάλ δελ ηηο δνζεί σο όξηζκα όλνκα αξρείνπ) δηαβάδνπλ δεδνκέλα από ηελ
θαλνληθή είζνδν θαη ηππώλνπλ ηα απνηειέζκαηα ζηελ θαλνληθή έμνδν.

Γψζηε ηελ εληνιή:

wc

Θα λνκίζεηε φηη ην ηεξκαηηθφ «θφιιεζε». Χζηφζν, δελ θφιιεζε. Ζ δηεξγαζία πνπ αληηζηνηρεί ζηελ
εληνιή πεξηκέλεη λα δηαβάζεη απφ ηελ θαλνληθή είζνδν. Ζ θαλνληθή είζνδνο (εθφζνλ δελ νξίζακε
δηαθνξεηηθά) είλαη ην ηεξκαηηθφ. Μφλν πνπ ε εληνιή δελ καο εκθαλίδεη θάπνηα πξνηξνπή (prompt) φπσο ην
θέιπθνο, γηα λα ην αληηιεθζνχκε.
Πιεθηξνινγήζηε θείκελν. Πφηε ζα ζηακαηήζεη λα δηαβάδεη ε δηεξγαζία;

172
Όηαλ έλα πξόγξακκα δηαβάδεη από ηελ θαλνληθή είζνδν, δηαβάδεη κε ηνλ ίδην αθξηβώο
ηξόπν κε ηνλ νπνίν ζα δηάβαδε δεδνκέλα από έλα αξρείν. Αλ κέζα από έλα πξόγξακκα ζέιακε λα
δηαβάζνπκε όια ηα πεξηερόκελα ελόο αξρείνπ, ζα δηαβάδακε byte-byte ή γξακκή-γξακκή, κέρξη λα
θηάζνπκε ζην ηέινο ηνπ αξρείνπ. Όηαλ δηαβάδνληαο έλα αξρείν θηάζνπκε ζην ηέινο ηνπ θαη δελ
ππάξρνπλ άιια δεδνκέλα, ηόηε ην ιεηηνπξγηθό ζηέιλεη έλαλ εηδηθό ραξαθηήξα ζην πξόγξακκά καο
πνπ νλνκάδεηαη “End-Of-File” θαη ζπλήζσο ζπκβνιίδεηαη κε ην EOF. Σόηε ην πξόγξακκα
αληηιακβάλεηαη όηη δελ ππάξρεη θάηη άιιν λα δηαβάζεη από ην αξρείν.

Σν ίδην θάλεη θαη ε εληνιή wc όηαλ δηαβάδεη από ηελ θαλνληθή είζνδν (αιιά αθόκε θαη
όηαλ δηαβάδεη από αξρείν, ε ζπκπεξηθνξά είλαη ίδηα). Γηαβάδεη ζπλερώο κέρξη λα θηάζεη ζηνλ
εηδηθό ραξαθηήξα EOF. Απηόλ ηνλ εηδηθό ραξαθηήξα, κπνξνύκε λα ηνλ δεκηνπξγήζνπκε από ην
πιεθηξνιόγην (θαη άξα λα ηνλ δηαβάζεη ε εληνιή) παηώληαο Cntrl-D (^D). Μόιηο
παηήζνπκε ^D, ε δηεξγαζία ζα ζηακαηήζεη λα δηαβάδεη θαη ζα καο εκθαλίζεη ην απνηέιεζκα.

Γψζηε ηελ εληνιή:

grep test

Ζ εληνιή grep ζα αλαδεηήζεη ηε ζπκβνινζεηξά “test”. Πνχ φκσο; Δθφζνλ δελ νξίζακε αξρείν,
ηφηε ζα δηαβάζεη απφ ηελ θαλνληθή είζνδν (stdin), δειαδή ην ηεξκαηηθφ.
Πιεθηξνινγήζηε κεξηθέο γξακκέο, αλάκεζα ζε απηέο θαη κεξηθέο πνπ λα πεξηέρνπλ ην "test". Ση
παξαηεξείηε; Παηήζηε ^D ψζηε λα νινθιεξσζεί ε εληνιή.

Άζθεζε 4
Να βξεζεί ην απνηέιεζκα ηεο εθηέιεζεο ησλ παξαθάησ εληνιψλ :

# 1
ls | wc -l
# 2
who | wc -l
# 3
ls *.c | wc -l
# 4
who | sort | more
# 5
ls /tmp | wc -l
# 6
ls /ttt | wc –l

Πνηα είλαη ε δηαθνξά ζηελ πεξίπησζε (5) κε (6); ΢ηελ πεξίπησζε (6) ε wc κεηξάεη ην κέγεζνο ηνπ
κελχκαηνο ζθάικαηνο;

173
Άζθεζε 5
1. Βξείηε ηα αξρεία ηνπ ηξέρνληνο θαηαιφγνπ θαη εκθαλίζηε ηα, ηαμηλνκεκέλα κε βάζε ην κέγεζνο ζε
θζίλνπζα ζεηξά (δείηε ην man ηεο εληνιήο sort).

2. Δκθαλίζηε ηα πεξηερφκελα ηνπ αξρείνπ /etc/passwd κε θεθαιαίνπο ραξαθηήξεο. (δείηε ην man ηεο
εληνιήο tr).

3. Βξείηε ηα αξρεία πνπ ην φλνκά ηνπο μεθηλάεη κε d θαη εκθαλίζηε ηα νλφκαηά ηνπο κε θεθαιαία γξάκκαηα
ζε θζίλνπζα αιθαβεηηθή ζεηξά.

4. Μεηξήζηε πφζνη θαηάινγνη ππάξρνπλ ζηνλ ηξέρνληα θαηάινγν.

5. Μεηξήζηε πφζνη ρξήζηεο ππάξρνπλ ζην ζχζηεκα (κεηξήζηε ηηο γξακκέο ηνπ /etc/passwd).

6. Μεηξήζηε πφζνη ρξήζηεο ηνπ αεηνχ (ή ελφο ζπζηήκαηνο κε πνιινχο ρξήζηεο) έρνπλ username πνπ

7. μεθηλάεη κε a θαη ηειεηψλεη ζε p.

8. Βξείηε ηε δηεξγαζία κε ην κεγαιχηεξν PID (ζπκεζείηε ηηο εληνιέο sort, head, tail).

9. Βξείηε ην αξρείν (απφ ηνλ ηξέρνληα θάθειν) κε ην κεγαιχηεξν κέγεζνο.

7.6 Αλαθνξέο
[1] GNU User Commands Reference Manual: kill command.
[2] GNU User Commands Reference Manual: ps command.
[3] Brian L Stuart. Principles of operating systems: design & applications. Course Technology, 2009.
[4] Peter H. Salus. A quarter century of UNIX. Addison-Wesley, 1994.
[5] U. Vahalia. Unix Internals: The New Frontiers. Dorling Kindersley Pvt. Limited, 2008.
[ https://books.google.gr/books?id=Z7qfu9NK7WQC ]

174
Κεθάιαην 8

8 Δηζαγσγή ζηα ζελάξηα θειύθνπο

8.1 Κέιπθνο ή Φινηόο (shell)


Σν θέιπθνο (shell) είλαη ην πξφγξακκα πνπ δηεξκελεχεη (interpret) ηηο εληνιέο πνπ εηζάγνληαη απφ ην
πιεθηξνιφγην. Δθηφο απφ ηελ αλάγλσζε εληνιψλ απφ ην πιεθηξνιφγην, νη εληνιέο είλαη δπλαηφλ λα
ηνπνζεηεζνχλ ζε έλα αξρείν θαη λα αλαγλσζηνχλ απφ απηφ. Έλα αξρείν πνπ πεξηέρεη εληνιέο θειχθνπο
νλνκάδεηαη ζελάξην θειχθνπο (shell script). Ο φξνο ζελάξην (script) ρξεζηκνπνηείηαη γηα φιεο ηηο γιψζζεο
πξνγξακκαηηζκνχ πνπ είλαη δηεξκελεπηέο (interpreters), φπσο γηα παξάδεηγκα: php script, perl script θηι.
Σν θέιπθνο ζηελ πξαγκαηηθφηεηα είλαη έλα πξφγξακκα ην νπνίν απφ ηε κηα πιεπξά δηαβάδεη ηηο
εληνιέο ηνπ ρξήζηε θαη απφ ηελ άιιε επηθνηλσλεί κε ηνλ ππξήλα ηνπ Λεηηνπξγηθνχ ΢πζηήκαηνο γηα λα
«ζηείιεη» ηηο εληνιέο πξνο εθηέιεζε.

Χρήστες

Εφαρμογές
Κελφφη

Πυρήνας

Υλικό

΢ρήκα 8.1: Ιεξάξρεζε ζηα ηκήκαηα ηνπ Unix.

΢ε θάζε ζχζηεκα UNIX ππάξρνπλ ηνπιάρηζηνλ δχν δηαζέζηκα θειχθε θαη απηά ζπλήζσο είλαη ην
Bourne shell (sh) θαη ην C-shell (csh). Χζηφζν, ε γιψζζα θαη ε ζχληαμε πνπ ρξεζηκνπνηείηαη γηα ηελ
επηθνηλσλία κε θαζέλα απφ απηά είλαη δηαθνξεηηθή. Όπσο βιέπνπκε ζηε ιίζηα πνπ αθνινπζεί, ππάξρνπλ
πνιιά δηαθνξεηηθά θειχθε:

 Οηθνγέλεηα Bourne Shell: Bourne Shell (sh), Bourne-Again Shell (bash), Korn Shell (ksh), MirBSD Korn
Shell (mksh), Almquist shell (ash),
 Z-sh
 Οηθνγέλεηα C-shell: C-shell (csh), Tc-shell (tcsh).

Καηά ηε ζπγγξαθή ηνπ παξφληνο ην πεξηζζφηεξν δηαδεδνκέλν θέιπθνο είλαη ην Bourne again shell
(bash). Σν bash είλαη βειηησλέλε έθδνζε ηνπ sh θαη είλαη πιένλ ν εμ νξηζκνχ θινηφο ζε ζπζηήκαηα linux.
Μάιηζηα ζε αξθεηέο πεξηπηψζεηο ε βαζηθή έθδνζε Bourne Shell δελ ππάξρεη θαλ, θαη ε εληνιή sh είλαη
ζχλδεζκνο ζηελ εληνιή bash.

175
 Αλεμάξηεηα από ην θέιπθνο πνπ ρξεζηκνπνηείηαη, όια ηα θειύθε έρνπλ σο ζηόρν λα παξέρνπλ
ζην UNIX κηα δηεπαθή ρξήζηε (user interface).

΢ρεδφλ φια ηα θειχθε έρνπλ ηηο παξαθάησ δπλαηφηεηεο-ηδηφηεηεο:


 δηεξκελεία (interpretation) θαη επεμεξγαζία ηεο γξακκήο εληνιψλ,
 ππνζηήξημε δεζκεπκέλσλ ιέμεσλ,
 ππνζηήξημε ραξαθηήξσλ κπαιαληέξ (wildcards),
 εθηέιεζε εληνιψλ (πξνγξακκάησλ ή εζσηεξηθψλ εληνιψλ ηνπ θειχθνπο - bultin commands),
 δηαρείξηζε αξρείσλ: αλαθαηεχζπλζε εηζφδνπ / εμφδνπ θαη δηαζσιελψζεηο,
 ππνζηήξημε κεηαβιεηψλ,
 θαζνξηζκφ ςεπδσλχκσλ (aliases),
 έιεγρν ηνπ πεξηβάιινληνο θαη δεκηνπξγία πεξηβάιινληνο πξνζαξκνζκέλνπ ζηηο απαηηήζεηο ηνπ
ρξήζηε,
 δεκηνπξγία ζελαξίσλ θινηνχ (shell scripts).

8.1.1 Σν πξώην κνπ ζελάξην θειύθνπο


Σν θέιπθνο, φπσο θαη ηα θίιηξα, έρνπλ ηε δπλαηφηεηα, αληί λα δηαβάδνπλ δεδνκέλα απφ ηελ θαλνληθή
είζνδν, λα κπνξνχλ λα ηα δηαβάδνπλ θαη απφ αξρείν. ΢ηελ πεξίπησζε ηνπ θειχθνπο ηα δεδνκέλα είλαη ζηελ
πξαγκαηηθφηεηα εληνιέο. Έηζη, αλ εθηειέζνπκε ηελ εληνιή ηνπ θειχθνπο θαη δψζνπκε σο φξηζκα έλα φλνκα
αξρείνπ, ηφηε ην θέιπθνο αληί λα δηαβάδεη εληνιέο απφ ην ηεξκαηηθφ (θαλνληθή είζνδν) ζα ηηο δηαβάδεη απφ ην
αξρείν.
Φηηάρλνπκε, ινηπφλ, ην αξρείν file1 πνπ πεξηέρεη εληνιέο, φπσο θαίλεηαη παξαθάησ:

bash-2.05a$ cat file1


ls -l
whoami
date
bash-2.05a$ sh file1
total 24
-rw-r--r-- 1 asidirop it 314 Jan 11 2003 cc
-rw-r--r-- 1 asidirop it 18 Nov 20 15:22 file1
-rw-r--r-- 1 asidirop it 183 Jan 8 2003 list
asidirop
Mon Nov 20 15:23:05 EET 2006
bash-2.05a$

Δθηειψληαο ηελ εληνιή "sh file1" εθηειείηαη ην sh (ην θέιπθφο καο) κε φξηζκα ην
αξρείν file1. Όηαλ ζα δεκηνπξγεζεί ε δηεξγαζία ηνπ sh, ζα αλαγλσξίζεη φηη δφζεθε φξηζκα, νπφηε θαη δελ
ζα πεξηκέλεη λα δηαβάζεη εληνιέο απφ ηελ θαλνληθή είζνδν, αιιά ζα αλνίμεη ην αξρείν file1 γηα αλάγλσζε θαη
ζα δηαβάδεη απφ εθεί γξακκή-γξακκή. Κάζε γξακκή αληηζηνηρεί ζε κηα εληνιή. ΢πλεπψο, κεηά ηελ αλάγλσζε
κηαο γξακκήο, ην θέιπθνο εθηειεί ηελ εληνιή πνπ πεξηέρεηαη ζε απηήλ. Έηζη, είλαη ην ίδην κε ην λα έγξαθε ν
ρξήζηεο ηηο εληνιέο ζην ηεξκαηηθφ. Αληί λα δηαβαζηνχλ νη εληνιέο απφ ην ηεξκαηηθφ, δηαβάδνληαη απφ ην
αξρείν.

176
 Όηαλ έλα αξρείν πεξηέρεη text ην νπνίν είλαη εληνιέο, ηόηε απηό ην αξρείν νλνκάδεηαη ζελάξην
(script).

 Όηαλ ην ζελάξην πεξηέρεη εληνιέο γηα ην θέιπθνο (shell), νλνκάδεηαη ζελάξην θειύθνπο (shell
script).

Μεηνλέθηεκα ζηνλ παξαπάλσ ηξφπν είλαη φηη πξέπεη λα γλσξίδεη ν ρξήζηεο αλ ην ζελάξην θειχθνπο
είλαη γξακκέλν γηα ην θέιπθνο sh, ή γηα ην θέιπθνο bash, ή γηα ην csh θηι. Όπσο αλαθέξακε πξηλ, ηα δηάθνξα
θειχθε έρνπλ αζπκβαηφηεηεο κεηαμχ ηνπο. ΢πλεπψο, αλ ν ρξήζηεο πξνζπαζήζεη λα εθηειέζεη έλα ζελάξην
πνπ είλαη γξακκέλν γηα csh ρξεζηκνπνηψληαο ην bash, ην πην πηζαλφ είλαη λα ππάξμεη απνηπρία ζηελ
εθηέιεζε.
Όπσο αλαθέξακε πξηλ, ζην Unix ηα ζελάξηα ρξεζηκνπνηνχληαη ζπρλά (shell scripts, perl scripts,
python scripts, awk scripts θ.α.). Δπεηδή, ινηπφλ, δελ είλαη δπλαηφ λα γλσξίδεη ν ρξήζηεο γηα θάζε ζελάξην
πνπ πξνζπαζεί λα εθηειέζεη ηε γιψζζα πξνγξακκαηηζκνχ γηα ηελ νπνία είλαη γξακκέλν, ππάξρεη ε εμήο
ζχκβαζε: ΢ηελ αξρή ηνπ ζελαξίνπ κπαίλνπλ νη ραξαθηήξεο #! αθνινπζνχκελνη απφ ηελ απφιπηε δηαδξνκή
ηνπ αληίζηνηρνπ δηεξκελεπηή. Έηζη, έλα ζελάξην γηα bash ζα πξέπεη λα μεθηλά κε:

#!/bin/bash

Αληίζηνηρα, έλα ζελάξην γηα perl μεθηλά κε #!/usr/bin/perl, έλα ζελάξην γηα csh μεθηλά
κε #!/bin/csh θηι.
Ο ππξήλαο ηνπ Unix, φηαλ πξνζπαζεί λα εθηειέζεη έλα πξφγξακκα, αξρηθά ειέγρεη αλ είλαη binary
θαη αληηζηνηρεί ζηελ αξρηηεθηνληθή ηνπ ηξέρνληνο επεμεξγαζηή. Δάλ λαη, ηφηε μεθηλά ηε δηεξγαζία
θνξηψλνληαο ηνλ δπαδηθφ θψδηθα (binary code) ζηε κλήκε. Δάλ φρη, ηφηε ειέγρεη εάλ είλαη αξρείν θεηκέλνπ
(text file). Όια ηα ζελάξηα είλαη αξρεία θεηκέλνπ. Δάλ, ινηπφλ, είλαη αξρείν θεηκέλνπ, ηφηε ειέγρεη ηνπο δπν
πξψηνπο ραξαθηήξεο ηνπ αξρείνπ. Δάλ απηνί νη δπν πξψηνη ραξαθηήξεο είλαη νη #! ηφηε αληηιακβάλεηαη φηη
πξφθεηηαη γηα ζελάξην, θαη δηαβάδεη ηελ ππφινηπε πξψηε γξακκή γηα λα βξεη ηνλ δηεξκελεπηή πνπ πξέπεη λα
εθηειέζεη.
Έζησ έλα αξρείν κε φλνκα file1 πνπ πεξηέρεη:

#!/path/command
Lala
Foo

Όηαλ πξνζπαζήζνπκε λα «εθηειέζνπκε» ην file1 κε ηελ εληνιή:

./file1

ηφηε ην UNIX ζα αλαγλσξίζεη φηη δελ πξφθεηηαη γηα αξρείν κε δπαδηθφ θψδηθα (binary file) αιιά γηα
αξρείν θεηκέλνπ (text). Θα δηαβάζεη ηελ πξψηε γξακκή θαη ζα εθηειέζεη ηελ εληνιή:

/path/command ./file1

177
Άξα, αλ ε πξψηε γξακκή ηνπ αξρείνπ file2 είλαη #!/usr/bin/perl, ηφηε εθηειψληαο ην file2 ν
ππξήλαο εθηειεί ηελ εληνιή:

/usr/bin/perl ./file2

Αλ ε πξψηε γξακκή ηνπ file3 είλαη #!/bin/bash, ηφηε εθηειψληαο ην file3 ν ππξήλαο εθηειεί ηελ
εληνιή:

/bin/bash ./file3

Με ην παξαπάλσ, μεθηλά νπζηαζηηθά κηα λέα δηεξγαζία θειχθνπο κε φξηζκα ην αξρείν file3.
΢πλεπψο, μεθηλά έλα θέιπθνο ην νπνίν ζα δηαβάδεη εληνιέο απφ ην αξρείν file3.

8.1.2 Δθηέιεζε ζελαξίσλ θαη άδεηεο ρξήζεο


Γηα λα κπνξεί λα εθηειέζεη θάπνηνο ρξήζηεο έλα πξφγξακκα, ζα πξέπεη λα έρεη άδεηα εθηέιεζεο γηα ην αξρείν
πνπ αληηζηνηρεί ζην πξφγξακκα. Σν ίδην ηζρχεη θαη γηα ηα ζελάξηα, ηα νπνία, ζηελ νπζία, είλαη πξνγξάκκαηα.

Όηαλ δεκηνπξγνύκε ζελάξηα, πξέπεη λα ηνπο δώζνπκε ηελ άδεηα πξόζβαζεο “execute”. Η άδεηα
“execute”, όπσο έρνπκε αλαθέξεη ζηελ Παξάγξαθν 5.3.1, δελ ηίζεηαη από κόλε ηεο, όηαλ
δεκηνπξγνύληαη αξρεία, αιιά πξέπεη λα δνζεί εθ ησλ πζηέξσλ.

Αλ ην αξρείν δελ έρεη άδεηα “execute”, ζα πάξνπκε ην κήλπκα “Permission denied”, φπσο θάζε θνξά
πνπ γίλεηαη πξνζπάζεηα εθηέιεζεο πξνγξάκκαηνο γηα ην νπνίν δελ ππάξρνπλ ηα θαηάιιεια δηθαηψκαηα:

aetos_test_27_$ ./file1
./file1: Permission denied.
aetos_test_27_$ ls -l
total 24
-rw-r--r-- 1 asidirop it 314 Jan 11 2003 cc
-rw------- 1 asidirop it 28 Nov 20 18:40 file1
-rw-r--r-- 1 asidirop it 183 Jan 8 2003 list

΢ε αληίζεζε κε ηα πξνγξάκκαηα ηχπνπ binary, γηα ηα νπνία αξθεί ην δηθαίσκα “execute” γηα ηελ
εθηέιεζή ηνπο ρσξίο λα ρξεηάδεηαη ην δηθαίσκα “read”, ζηελ πεξίπησζε ησλ ζελαξίσλ ππάξρνπλ επηπιένλ
πεξηνξηζκνί.
Έζησ, ινηπφλ, ζην πξνεγνχκελν παξάδεηγκα έρνπκε δψζεη ζην file1 ηελ άδεηα “execute” αιιά φρη
ηελ άδεηα “read”. Όηαλ πξνζπαζήζνπκε λα εθηειέζνπκε ην file1, ζα πάξνπκε ην δηαθνξεηηθφ απφ ηελ
πξνεγνχκελε πεξίπησζε κήλπκα “cannot open: Permission denied”. Απηφ πνπ ζπλέβε είλαη φηη ην file1
πέξαζε ηνλ έιεγρν άδεηαο “execute”, ν ππξήλαο έιεγμε ηνλ ηχπν ηνπ αξρείνπ θαη δηάβαζε ηελ πξψηε γξακκή
θαη κεηά εθηέιεζε ηελ εληνιή "/bin/sh file1". Ζ εληνιή εθηειείηαη θαλνληθά, μεθηλά ην θέιπθνο θαη
(ην θέιπθνο) πξνζπαζεί λα αλνίμεη ην αξρείν file1, γηα ηελ αλάγλσζε ησλ εληνιψλ. Δπεηδή, φκσο δελ ππάξρεη
ην δηθαίσκα αλάγλσζεο (read), ην θέιπθνο εκθαλίδεη ην κήλπκα ζθάικαηνο.

178
aetos_test_27_$ ./file1
/bin/sh: ./file1: cannot open: Permission denied
aetos_test_45_$ /bin/sh file1
/bin/sh: file1: cannot open: Permission denied
aetos_test_27_$ ls -l
total 24
-rw-r--r-- 1 asidirop it 314 Jan 11 2003 cc
--wx------ 1 asidirop it 28 Nov 20 18:48 file1
-rw-r--r-- 1 asidirop it 183 Jan 8 2003 list

8.1.3 Απνζθαικάησζε ζελαξίσλ θειύθνπο


Όια ηα θειχθε παξέρνπλ ηελ επηινγή –v, γηα λα εκθαλίδεηαη ζηελ νζφλε θάζε γξακκή ηνπ ζελαξίνπ, θαζψο
απηφ δηαβάδεηαη θαη ηελ επηινγή –x, γηα λα εκθαλίδνληαη νη εληνιέο, θαζψο εθηεινχληαη. Οη επηινγέο απηέο
είλαη πνιχ ρξήζηκεο γηα ηε ζπληαθηηθή αλάιπζε ησλ εληνιψλ. Μπνξνχκε λα ελζσκαηψζνπκε απηέο ηηο
επηινγέο ζηελ πξψηε γξακκή ηνπ ζελαξίνπ, φπσο θαη θάζε άιιε επηινγή κε ηνλ ίδην ηξφπν.
΢ην παξαθάησ παξάδεηγκα πξνζζέηνπκε ζην ζελάξην file2 ην φξηζκα -v, φπσο θαίλεηαη
παξαθάησ. Καηά ηελ εθηέιεζε ηνπ αξρείνπ ν ππξήλαο ζα δηαβάζεη ηελ πξψηε γξακκή θαη απηφ πνπ ζα
εθηειέζεη είλαη /bin/sh -v file2. Παξαθάησ βιέπνπκε πνην ζα είλαη ην απνηέιεζκα ρξεζηκνπνηψληαο
ην -v. Σν θέιπθνο ζα ηππψλεη θάζε γξακκή ηνπ αξρείνπ πξηλ ηελ εθηειέζεη. Θα ηππψζεη αθφκε θαη ηηο
γξακκέο πνπ πεξηέρνπλ ζρφιηα θαη φρη εληνιέο.

bash-2.05a$ cat file2


#!/bin/sh -v
whoami # dixnei poios eimai
#Twra typonoyme tin hmeromhnia
date
bash-2.05a$ ./file2
#!/bin/sh -v
whoami # dixnei poios eimai
asidirop
#Twra typonoyme tin hmeromhnia
date
Mon Nov 20 19:16:30 EET 2006
bash-2.05a$

Αλ αιιάμνπκε ην -v ζε -x, ηφηε ην θέιπθνο δελ ζα εκθαλίδεη φιεο ηηο γξακκέο αιιά κφλν ηηο
εληνιέο πνπ πξφθεηηαη λα εθηειεζηνχλ κε έλαλ ζηαπξφ απφ κπξνζηά:

bash-2.05a$ cat file2


#!/bin/sh -x
whoami # dixnei poios eimai
#Twra typonoyme tin hmeromhnia
date
bash-2.05a$ ./file2
+ whoami
asidirop
+ date
Mon Nov 20 19:17:13 EET 2006

179
bash-2.05a$

8.1.4 Δθηέιεζε ζελαξίσλ θαη ε κεηαβιεηή PATH


Γηα λα εθηειέζνπκε έλα πξφγξακκα ή ζελάξην (script) πξέπεη λα αλαθεξζνχκε ζην φλνκα αξρείνπ είηε κε
ζρεηηθή είηε κε απφιπηε δηαδξνκή. Έηζη ζην παξαθάησ παξάδεηγκα γηα ην file1 πνπ βξίζθεηαη ζηνλ ηξέρνληα
θάθειν εξγαζίαο (cwd) κπνξνχκε είηε λα εθηειέζνπκε ./file1, δειαδή λα ρξεζηκνπνηήζνπκε ηε ζρεηηθή
δηαδξνκή πξνο ην αξρείν, είηε ~/test/file1, δειαδή λα ρξεζηκνπνηήζνπκε ηελ απφιπηε δηαδξνκή πξνο
ην αξρείν.

aetos_test_51_$ cat file1


#!/bin/sh
whoami
date
aetos_test_52_$ ./file1
asidirop
Mon Nov 20 18:54:36 EET 2006
aetos_test_53_$ ~/test/file1
asidirop
Mon Nov 20 18:54:42 EET 2006
aetos_test_54_$ pwd
/usr/people/staff/ektaktoi/it/asidirop/test

Αλ δελ δψζνπκε δηαδξνκή γηα ην αξρείν file1, ηφηε ζα πάξνπκε ην κήλπκα ζθάικαηνο:

bash-2.05a$ ./file1
asidirop
Mon Nov 20 18:57:17 EET 2006
bash-2.05a$ file1
bash: file1: command not found
bash-2.05a$

Απηφ ζπκβαίλεη, δηφηη ην αξρείν-ζελάξην file1 δελ βξίζθεηαη ζε θάπνηνλ θαηάινγν πνπ πεξηέρεηαη ζηε
κεηαβιεηή πεξηβάιινληνο PATH. Όπσο αλαθέξακε ζηε Παξάγξαθν 7.3.1 γηα λα κπνξνχκε λα εθηεινχκε έλα
πξφγξακκα-εληνιή ρσξίο λα γξάθνπκε ηε δηαδξνκή ζε απηφ, πξέπεη ν θαηάινγνο κέζα ζηνλ νπνίν είλαη
απνζεθεπκέλν λα έρεη ζπκπεξηιεθζεί ζηε κεηαβιεηή πεξηβάιινληνο PATH.

8.2 Μεηαβιεηέο Κειύθνπο


΢ην θέιπθνο ππάξρνπλ κεηαβιεηέο (εθηφο ησλ κεηαβιεηψλ πεξηβάιινληνο). Ο ρξήζηεο κπνξεί λα νξίζεη
νπνηαδήπνηε κεηαβιεηή. Όιεο νη κεηαβιεηέο είλαη αιθαξηζκεηηθνχ ηχπνπ (string) θαη δελ κπνξεί ν ρξήζηεο
λα θαζνξίζεη θάπνηνλ δηαθνξεηηθφ ηχπν.

180
Χο νλόκαηα κεηαβιεηώλ ν ρξήζηεο κπνξεί λα ζέζεη νπνηνλδήπνηε ζπλδπαζκό γξακκάησλ θαη
αξηζκώλ (αξρίδνληαο από γξάκκα), ελώ από ηνπο εηδηθνύο ραξαθηήξεο ν κόλνο πνπ κπνξεί λα
ρξεζηκνπνηείηαη κε αζθάιεηα είλαη ε ππνγξάκκηζε “_”. Γελ επηηξέπνληαη θελά θαη άιινη εηδηθνί
ραξαθηήξεο πνπ κπνξεί λα έρνπλ θάπνηα εηδηθή ζεκαζία γηα ην θέιπθνο (π.ρ. $ \ # ; θ.ν.θ.).

Σν θέιπθνο sh (θαη ην bash) ρεηξίδεηαη ηηο κεηαβιεηέο πεξηβάιινληνο κε ηνλ ίδην ηξφπν πνπ ρεηξίδεηαη
ηηο κεηαβιεηέο ηνπ shell. Γηα λα δηαρσξίδνληαη εχθνια, ζπλεζίδεηαη λα ρξεζηκνπνηνχληαη γηα ηηο κεηαβιεηέο
πεξηβάιινληνο κφλν θεθαιαίνη ραξαθηήξεο ελψ γηα ηηο κεηαβιεηέο ηνπ θειχθνπο κφλν πεδνί.

 Οη κεηαβιεηέο ηνπ θειύθνπο απνζεθεύνληαη ζηε κλήκε πνπ ρξεζηκνπνηεί ην ίδην ην shell, είλαη
ηνπηθέο θαη δελ θιεξνδνηνύληαη από ηηο δηεξγαζίεο ζηηο ζπγαηξηθέο.

 Οη κεηαβιεηέο πεξηβάιινληνο απνζεθεύνληαη από ηνλ ππξήλα ζην ρώξν κλήκεο πνπ
δηαηεξνύληαη ηα δηάθνξα ζηνηρεία ησλ δηεξγαζηώλ θαη θιεξνδνηνύληαη από ηηο δηεξγαζίεο ζηηο
ζπγαηξηθέο ηνπο.

Ο νξηζκφο κηαο κεηαβιεηήο γίλεηαη κε ηελ αξρηθνπνίεζε ηεο:

a=5

Με ην παξαπάλσ νξίδεηαη ε κεηαβιεηή κε φλνκα a θαη απνζεθεχεηαη ε ηηκή 5 σο αιθαξηζκεηηθφ


(string). Απφιπηα ηζνδχλακν κε ην πξνεγνχκελν είλαη θαη ην:

a="5"

 Ππιν και μεηά ηον σαπακηήπα "=" δεν ππέπει να ςπάπσοςν κενά.

 Δάλ ζηελ ηηκή πξνο εθρώξεζε πεξηέρνληαη εηδηθνί ραξαθηήξεο (πρ: space * ; < > | θ.ν.θ.) ηόηε
πξέπεη λα ρξεζηκνπνηεζνύλ εηζαγσγηθά (κνλά ή δηπιά) ή λα αλαηξεζεί ε εηδηθή ζεκαζία απηώλ
ησλ ραξαθηήξσλ κε ην \ (αλάπνδε θάζεηνο - back slash).

8.2.1 ΢θάικαηα θαηά ηελ εθρώξεζε


΢ηελ πεξίπησζε πνπ πξνζπαζεί ν ρξήζηεο λα θάλεη εθρψξεζε αιιά ρξεζηκνπνηεζνχλ κε ιάζνο ηξφπν ηα
θελά δηαζηήκαηα (space), ηφηε πξνθαλψο δελ ζα γίλεη εθρψξεζε, αιιά ζα επηζηξαθεί κήλπκα ζθάικαηνο.

asidirop@dellpc:~$ a=5 Β # Δθρώξεζε 1

181
Β: command not found
asidirop@dellpc:~$ a="5 Β" # Δθρώξεζε 2
asidirop@dellpc:~$ a= 5 # Δθρώξεζε 3
5: command not found
asidirop@dellpc:~$ a=" 5" # Δθρώξεζε 4
asidirop@dellpc:~$ a =5 # Δθρώξεζε 5
a: command not found

Παξαπάλσ παξνπζηάδνληαη ηξεηο πεξηπηψζεηο ζθάικαηνο. ΢ηελ πξψηε πεξίπησζε (εθρψξεζε 1)


ππάξρεη θελφ δηάζηεκα κεηαμχ ηνπ 5 θαη ηνπ Β. Δθφζνλ ε ηηκή πξνο εθρψξεζε πεξηέρεη θελφ δηάζηεκα, ζα
πξέπεη λα ρξεζηκνπνηνχληαη εηζαγσγηθά φπσο ζηελ εθρψξεζε 2. ΢ηελ πεξίπησζε πνπ δελ έρνπλ
ρξεζηκνπνηεζεί εηζαγσγηθά, εκθαλίδεηαη ην κήλπκα “Β: command not found”. Απηφ ζεκαίλεη φηη ην θέιπθνο
πξνζπάζεζε λα εθηειέζεη κηα εληνιή κε φλνκα Β ε νπνία φκσο πξνθαλψο δελ βξέζεθε. Απηφ νθείιεηαη ζην
φηη ην θέιπθνο ππνζηεξίδεη ηελ εμήο ζχληαμε:

ENV_VAR1=VAL1 ENV_VAR2=VAL2 .... command [args]

Με ην παξαπάλσ δίλεηαη ε εληνιή εθηέιεζεο command, φκσο επηπιένλ πξηλ ηελ εθηέιεζή ηεο
ηίζεληαη θαη νη κεηαβιεηέο πεξηβάιινληνο ENV_VAR1, ENV_VAR2, θηι.
Αθξηβψο ην ίδην ζθάικα ζπκβαίλεη θαη ζηελ επφκελε πεξίπησζε (Δθρψξεζε 3). Σν θέιπθνο
πξνζπαζεί λα εθηειέζεη ηελ εληνιή κε φλνκα "5" κε αξρηθνπνίεζε ηεο κεηαβιεηήο πεξηβάιινληνο a ζε θελή
ηηκή. Ζ ιχζε πξνθαλψο είλαη ε ρξήζε εηζαγσγηθψλ (εθρψξεζε 4).
΢ηελ ηειεπηαία πεξίπησζε (εθρψξεζε 5) έρεη κπεη θελφ δηάζηεκα πξηλ απφ ηνλ ραξαθηήξα =. Σν
κήλπκα ζθάικαηνο απφ ην θέιπθνο είλαη: “a: command not found”. Δίλαη ζρεδφλ πξνθαλέο πσο εξκήλεπζε
ηελ εληνιή ην θέιπθνο. Θεψξεζε φηη δφζεθε ε εληνιή a κε φξηζκα ην "=5".

 Ππιν και μεηά ηον σαπακηήπα "=" δεν ππέπει να ςπάπσοςν κενά.

8.2.2 Δθρώξεζε ηηκώλ


Ζ εθρψξεζε ηηκήο ζε κηα κεηαβιεηή ζην θέιπθνο κπνξεί λα γίλεη κε δπν ηξφπνπο:
1. Αλάζεζε ηηκήο κε εθρψξεζε, φπσο πεξηγξάθεθε παξαπάλσ (πρ: a=543245).
2. Αλάγλσζε ηηκήο απφ ηελ θαλνληθή είζνδν ρξεζηκνπνηψληαο ηελ read.

Χξεζηκνπνηώληαο ηελ εληνιή read


Ζ εληνιή read εθρσξεί ζε κηα κεηαβιεηή νηηδήπνηε εηζάγεηαη απφ ηελ θαλνληθή είζνδν (ζπλήζσο ην
ηεξκαηηθφ), αθνινπζνχκελν απφ κηα αιιαγή γξακκήο, δειαδή δηαβάδεη απφ ην ηεξκαηηθφ κηα γξακκή.

182
bash-2.05a$ read b
foo bar
bash-2.05a$ echo $b
foo bar
bash-2.05a$ echo "$b"
foo bar
bash-2.05a$

΢ην παξαπάλσ παξάδεηγκα εκθαλίδνπκε κε ππνγξάκκηζε ηελ πιεθηξνιφγεζε ηνπ ρξήζηε. ΢ηε
κεηαβιεηή b εθρσξήζεθε αθξηβψο απηφ πνπ πιεθηξνινγήζεθε. Δπεηδή φκσο πεξηέρεη εηδηθνχο ραξαθηήξεο
(ηα θελά δηαζηήκαηα), ζα πξέπεη λα ρξεζηκνπνηείηαη κε εηζαγσγηθά.
Δίλαη πνιχ ζπλεζηζκέλν θαηά ηελ εθηέιεζε ελφο πξνγξάκκαηνο λα ππάξρεη ε αλάγθε γηα είζνδν απφ
ηνλ ρξήζηε. ΢ε απηήλ ηελ πεξίπησζε πξνθαλψο ρξεζηκνπνηείηαη ε εληνιή read. Δίλαη πνιχ θιαζηθφο
ζπλδπαζκφο ηεο εληνιήο read κε ηελ echo, φπνπ ε πξψηε εκθαλίδεη ηελ πξνηξνπή γηα ηνλ ρξήζηε:

Αρχείο: read_demo

#!/bin/bash
echo -n "Enter some text > "
read text
echo "You entered: $text"

Παξαθάησ θαίλεηαη ε εθηέιεζε ηνπ ζελαξίνπ read_demo. Ζ ρξήζε ηνπ νξίζκαηνο -n ζηελ
εληνιή echo νδεγεί ηελ εληνιή λα κελ αιιάμεη γξακκή κεηά ηελ εκθάληζε ηνπ κελχκαηνο, ζπλεπψο ν
θέξζνξαο παξακέλεη ζηελ ίδηα γξακκή θαη ν ρξήζηεο «γξάθεη» ζηελ ίδηα γξακκή κε ηελ πξνηξνπή. Ζ εληνιή
ζα δηαβάζεη, ηελ είζνδν κέρξη λα δηαβαζηεί ν ραξαθηήξαο αιιαγήο γξακκήο, ν νπνίνο βέβαηα αληηζηνηρεί ζην
πιήθηξν “Enter”.

asidirop@aetos:/tmp$ ./read_demo
Enter some text > My name is Antonis
You entered: My name is Antonis
asidirop@aetos:/tmp$

8.2.3 Χξήζε κεηαβιεηώλ


Ζ ρξήζε κηαο κεηαβιεηήο (δειαδή ηεο ηηκήο πνπ πεξηέρεη) γίλεηαη ρξεζηκνπνηψληαο ηνλ ραξαθηήξα $.

 Ο ραξαθηήξαο $ δίλεη ηελ νδεγία ζην θέιπθνο λα ζεσξήζεη ηε ιέμε (string) πνπ αθνινπζεί σο
όλνκα κεηαβιεηήο θαη λα ηελ αληηθαηαζηήζεη κε ηελ ηηκή ηεο.

183
asidirop@dellpc:/tmp$ a=Hello
asidirop@dellpc:/tmp$ echo $a
Hello

8.3 Χξήζε Δηζαγσγηθώλ


Σν ζχλνιν ραξαθηήξσλ ASCII πεξηέρεη ηξεηο ηχπνπο εηζαγσγηθψλ. Γηα ην θέιπθνο θαη νη ηξεηο ηχπνη
εηζαγσγηθψλ έρνπλ εηδηθή ζεκαζία:

 Σα απιά εηζαγσγηθά ('single quotes') αθπξψλνπλ ηελ εηδηθή ζεκαζία φισλ ησλ ζπκβφισλ εθηφο απφ
ηνλ εαπηφ ηνπο.
 Σα δηπιά εηζαγσγηθά ("double quotes") αθπξψλνπλ ηελ εηδηθή ζεκαζία φισλ ησλ ζπκβφισλ εθηφο
απφ ηνλ εαπηφ ηνπο, ηελ αλάπνδε θάζεην (backslash \ ) θαη ην δνιάξην ($).
 Σα αλάπνδα εηζαγσγηθά (`back quotes`) πξνθαινχλ ηελ εθηέιεζε ηεο εληνιήο πνπ πεξηθιείνπλ.

Αθξηβψο ηελ ίδηα ζεκαζία έρνπλ ηα εηζαγσγηθά θαη ζε άιιεο γιψζζεο πξνγξακκαηηζκνχ, νη νπνίεο
έρνπλ θιεξνλνκήζεη αξθεηά ραξαθηεξηζηηθά ηνπ θειχθνπο φπσο ε perl θαη ε php.
Ζ ρξήζε εηζαγσγηθψλ (κνλά ή δηπιά) είλαη ζρεδφλ ππνρξεσηηθή, φηαλ κέζα ζε έλα αιθαξηζκεηηθφ
πεξηιακβάλνληαη εηδηθνί ραξαθηήξεο. Ο πεξηζζφηεξν ζπρλφο εηδηθφο ραξαθηήξαο είλαη ην θελφ δηάζηεκα
(space). ΢ην παξαθάησ παξάδεηγκα ε ρξήζε ή φρη εηζαγσγηθψλ ζηηο ηξεηο πξψηεο πεξηπηψζεηο δελ έρεη
δηαθνξά. Δίηε ρξεζηκνπνηεζνχλ κνλά εηζαγσγηθά, είηε δηπιά, είηε θαζφινπ, ην απνηέιεζκα είλαη ην ίδην θαη
ζσζηφ, εθφζνλ ζην αιθαξηζκεηηθφ δελ πεξηιακβάλεηαη θάπνηνο εηδηθφο ραξαθηήξαο.

bash-2.05a$ echo "TEST"


TEST
bash-2.05a$ echo 'TEST'
TEST
bash-2.05a$ echo TEST
TEST
bash-2.05a$ echo "TEST A"
TEST A
bash-2.05a$ echo 'TEST A'
TEST A
bash-2.05a$ echo TEST A
TEST A
bash-2.05a$ echo TEST\ \ \ \ \ A
TEST A

΢ηηο ηξεηο επφκελεο εληνιέο ην αιθαξηζκεηηθφ πεξηιακβάλεη πνιιαπιά θελά δηαζηήκαηα (spaces). Γηα
ην θέιπθνο (γηα φια ηα θειχθε) ην θελφ δηάζηεκα είλαη εηδηθφο ραξαθηήξαο θαη ζεκαίλεη δηαρσξηζκφο
νξηζκάησλ κεηαμχ ηνπο ή δηαρσξηζκφο εληνιήο απφ ηα νξίζκαηα. Μάιηζηα, ην θέιπθνο αγλνεί ηα πνιιαπιά
θελά δηαζηήκαηα. Βιέπνπκε, ινηπφλ, ζην παξάδεηγκα φηη ην απνηέιεζκα είλαη ζσζηφ κε ηε ρξήζε
εηζαγσγηθψλ (κνλψλ ή δηπιψλ), αιιά φρη αθξηβέο ρσξίο ηε ρξήζε εηζαγσγηθψλ. Οπζηαζηηθά αγλννχληαη
(ράλνληαη) ηα πνιιαπιά θελά δηαζηήκαηα. Άξα, ε ρξήζε ησλ εηζαγσγηθψλ είλαη ελδεδεηγκέλε ζηελ
πεξίπησζε πνπ ην αιθαξηζκεηηθφ πεξηέρεη έλαλ ή πεξηζζφηεξνπο εηδηθνχο ραξαθηήξεο. ΢ηελ πεξίπησζε πνπ ν
ρξήζηεο δελ επηζπκεί ηε ρξήζε ησλ εηζαγσγηθψλ, ηφηε ζα πξέπεη λα αθπξσζεί ε εηδηθή ζεκαζία ησλ εηδηθψλ
ραξαθηήξσλ κε ηε ρξήζε ηεο αλάπνδεο θαζέηνπ (back slash). Θα πξέπεη πξηλ απφ θάζε εκθάληζε εηδηθνχ
ραξαθηήξα λα ρξεζηκνπνηείηαη ε αλάπνδε θάζεηνο (ηειεπηαία εληνιή). Απηή ε κέζνδνο, βέβαηα, δελ είλαη
ηδηαίηεξα πξαθηηθή, εηδηθά φηαλ ππάξρνπλ πνιιέο εκθαλίζεηο εηδηθψλ ραξαθηήξσλ.

184
8.3.1 Δηζαγσγηθά θαη κεηαβιεηέο θειύθνπο
Όηαλ ζπκπεξηιακβάλνληαη εηδηθνί ραξαθηήξεο ζηελ ηηκή κηαο κεηαβιεηήο απαηηείηαη πξνζνρή ψζηε λα κελ
εξκελεπηνχλ απηνί νη εηδηθνί ραξαθηήξεο. ΢ην παξαθάησ παξάδεηγκα έγηλε εθρψξεζε ζηε κεηαβιεηή a ελφο
αιθαξηζκεηηθνχ ην νπνίν πεξηέρεη πνιιαπιά θελά δηαζηήκαηα. Αλ ρξεζηκνπνηεζεί ην $aρσξίο εηζαγσγηθά,
ην απνηέιεζκα είλαη ην ίδην κε ηελ πξνεγνχκελε πεξίπησζε, δειαδή θαηαζηξέθνληαη ηα πνιιαπιά θελά
δηαζηήκαηα. Θα πξέπεη ινηπφλ θαη νη κεηαβιεηέο λα ρξεζηκνπνηνχληαη κέζα ζε εηζαγσγηθά. Πξνθαλψο, αλ ε
κεηαβιεηή δελ πεξηείρε εηδηθνχο ραξαθηήξεο, δελ ζα ππήξρε πξφβιεκα ζηε ρξήζε ηεο θαη ρσξίο εηζαγσγηθά.
Όκσο απηφ δελ κπνξεί λα ην γλσξίδεη ν πξνγξακκαηηζηήο εθ ησλ πξνηέξσλ. ΢πλεπψο, κέζα ζε έλα ζελάξην
θειχθνπο νη κεηαβιεηέο ζα πξέπεη λα ρξεζηκνπνηνχληαη κέζα ζε δηπιά εηζαγσγηθά. Δδψ λα ζπκίζνπκε φηη
κέζα ζηα δηπιά εηζαγσγηθά αθπξψλνληαη φινη νη εηδηθνί ραξαθηήξεο εθηφο απφ ηνπο $, \, ". Άξα, κέζα ζε
δηπιά εηζαγσγηθά νη κεηαβιεηέο, νη νπνίεο ζεκαηνδνηνχληαη κε ην $, εξκελεχνληαη. Μέζα ζε κνλά
εηζαγσγηθά αθπξψλνληαη όινη νη εηδηθνί ραξαθηήξεο, ζπλεπψο θαη ν ραξαθηήξαο $.

bash-2.05a$ a='test 1' # εληνιή 1


bash-2.05a$ echo $a # εληνιή 2
test 1
bash-2.05a$ echo "$a" # εληνιή 3
test 1
bash-2.05a$ echo '$a' # εληνιή 4
$a
bash-2.05a$

 Μέζα ζε έλα ζελάξην θειύθνπο νη κεηαβιεηέο πξέπεη λα ρξεζηκνπνηνύληαη κέζα ζε δηπιά


εηζαγσγηθά.

Μάιηζηα, φηαλ ζηηο κεηαβιεηέο πεξηέρνληαη πεξηζζφηεξν «θξίζηκνη» ραξαθηήξεο απφ ην θελφ
δηάζηεκα, ηφηε ηα απνηειέζκαηα κπνξεί λα είλαη ηξαγηθά άζηνρα, ελδερνκέλσο θαη θαηαζηξνθηθά γηα ηε
ζσζηή ιεηηνπξγία ηνπ ζελαξίνπ θειχθνπο, φπσο ζην παξαθάησ παξάδεηγκα. Δδψ ν εηδηθφο ραξαθηήξαο " *"
αληηθαζίζηαηαη κε φια ηα νλφκαηα αξρείσλ ηνπ ηξέρνληνο θαηαιφγνπ (ζπκεζείηε φηη είλαη wildcard -
Κεθάιαην 4).

bash-2.05a$ a='*'
bash-2.05a$ echo $a
file1 file5 test8
bash-2.05a$ echo "$a"
*
bash-2.05a$

Αλ κέζα ζε δηπιά εηζαγσγηθά ζέινπκε λα ρξεζηκνπνηήζνπκε ηνλ ραξαθηήξα $, ρσξίο απηφο λα


εξκελεπηεί σο εηδηθφο ραξαθηήξαο, παξάδεηγκα αλ ζέινπκε λα εθηππψζνπκε ην αιθαξηζκεηηθφ "x$x" ηφηε
ζα πξέπεη λα αθπξψζνπκε ηελ εηδηθή ζεκαζία ηνπ κε ηε ρξήζε ηεο αλάπνδεο θαζέηνπ (back slash) ή
ελαιιαθηηθά λα ρξεζηκνπνηεζνχλ κνλά εηζαγσγηθά:

185
bash-2.05a$ echo "x\$x"
x$x
bash-2.05a$ echo 'x$x'
x$x
bash-2.05a$ echo "x$x" # Με " θαη ρωξίο \$ ην απνηέιεζκα
# δελ είλαη ην δεηνύκελν.
x
bash-2.05a$

8.3.2 Δηζαγσγηθά θαη κεηαβιεηέο πεξηβάιινληνο


΢ηελ πεξίπησζε ησλ κεηαβιεηψλ πεξηβάιινληνο ππάξρεη ε ίδηα ζπκπεξηθνξά θαη πθίζηαηαη ην ίδην πξφβιεκα
κε ηηο κεηαβιεηέο ηνπ θειχθνπο. Οη κεηαβιεηέο πεξηβάιινληνο ρξεζηκνπνηνχληαη θαη απηέο κε ηε ρξήζε ηνπ
δνιαξίνπ ($). ΢ην παξαθάησ παξάδεηγκα, ε κεηαβιεηή πεξηβάιινληνο HOSTNAME (ε νπνία πεξηέρεη ην
φλνκα ππνινγηζηή ζηνλ νπνίν είκαζηε ζπλδεδεκέλνη) εξκελεχεηαη κέζα ζηα δηπιά εηζαγσγηθά αιιά φρη κέζα
ζηα κνλά.

asidirop@aetos:/tmp$ echo "My host name is $HOSTNAME"


My host name is aetos
asidirop@aetos:/tmp$ echo 'My host name is $HOSTNAME'
My host name is $HOSTNAME
asidirop@aetos:/tmp$

8.3.3 ΢πλέλσζε κεηαβιεηώλ


Σν θέιπθνο, φηαλ ζπλαληά ηνλ ραξαθηήξα $, ζεσξεί φηη απηφ πνπ αθνινπζεί είλαη φλνκα κεηαβιεηήο (ή
κεηαβιεηήο πεξηβάιινληνο) θαη ην αληηθαζηζηά κε ηελ ηηκή ηνπ. Πνχ φκσο ηειεηψλεη «απηφ πνπ αθνινπζεί»;
΢ε πνην ζεκείν ηειεηψλεη ην φλνκα ηεο κεηαβιεηήο; Σν φλνκα κεηαβιεηήο ηειεηψλεη κφιηο ην θέιπθνο
ζπλαληήζεη θάπνηνλ ραξαθηήξα πνπ απαγνξεχεηαη ζηα νλφκαηα κεηαβιεηψλ, δειαδή θάπνηνλ εηδηθφ
ραξαθηήξα, ή θελφ δηάζηεκα, ή αιιαγή γξακκήο.
Αλ ζέινπκε λα ελψζνπκε δπν αιθαξηζκεηηθά, ην κφλν πνπ ρξεηάδεηαη είλαη λα ηνπνζεηεζεί ην έλα
κεηά ην άιιν. Γηα παξάδεηγκα:

asidirop@aetos:/tmp$ a='test'
asidirop@aetos:/tmp$ b='foo'
asidirop@aetos:/tmp$ echo "$a$b"
testfoo
asidirop@aetos:/tmp$

Ση ζα γίλεη φκσο, αλ ζέισ λα ζπλελψζσ κηα κεηαβιεηή κε κηα ζηαζεξή ζπκβνινζεηξά;

asidirop@aetos:/tmp$ a='test'
asidirop@aetos:/tmp$ echo "$afoo"

asidirop@aetos:/tmp$

186
΢ην παξαπάλσ παξάδεηγκα ην θέιπθνο απνηπγράλεη λα ηππψζεη ηε κεηαβιεηή $a θαη ακέζσο κεηά ηε
ζπκβνινζεηξά "foo", δηφηη ζεσξεί φηη ην φλνκα ηεο κεηαβιεηήο είλαη afoo. Σέηνηα κεηαβιεηή δελ έρεη
νξηζηεί, ζπλεπψο εθηππψλεη θελφ. Τπάξρνπλ πνιιέο ιχζεηο, γηα λα παξαθακθζεί ην παξαπάλσ πξφβιεκα:

asidirop@aetos:/tmp$ a='test'
asidirop@aetos:/tmp$ echo "$a""foo"
testfoo
asidirop@aetos:/tmp$ echo "$a"foo
testfoo
asidirop@aetos:/tmp$ echo "$a"'foo'
testfoo
asidirop@aetos:/tmp$ echo $a'foo' #όρη θαιή ιύζε
testfoo
asidirop@aetos:/tmp$

Όιεο νη παξαπάλσ ιχζεηο είλαη ηνπ ηχπνπ WorkAround, δειαδή πξφρεηξε παξάθακςε ηνπ
πξνβιήκαηνο. Ζ νξζή θαη γεληθή ιχζε είλαη λα ρξεζηκνπνηνχληαη ηα άγθηζηξα: {}.

asidirop@aetos:/tmp$ a='test'
asidirop@aetos:/tmp$ echo "${a}foo"
testfoo

Όπσο έρνπκε αλαθέξεη θαη γηα άιιεο πεξηπηψζεηο, ε νξηνζέηεζε κεηαβιεηήο κε ηα άγθηζηξα είλαη
ραξαθηεξηζηηθφ θαη άιισλ γισζζψλ πξνγξακκαηηζκνχ πνπ έρνπλ θιεξνλνκήζεη ραξαθηεξηζηηθά απφ ην
θέιπθνο, φπσο ε php θαη ε perl.

 Ο θαιύηεξνο ηξόπνο, γηα λα ρξεζηκνπνηεζεί κηα κεηαβιεηή a, είλαη λα ρξεζηκνπνηείηαη κέζα ζε


δηπιά εηζαγσγηθά θαη άγθηζηξα "${a}".

8.3.4 Σα αλάπνδα εηζαγσγηθά ` θαη ην $()


Σα αλάπνδα εηζαγσγηθά εθηεινχλ ηε ζπκβνινζεηξά πνπ πεξηέρνπλ σο εληνιή, δελ εκθαλίδεηαη ηίπνηα ζηελ
θαλνληθή έμνδν θαη «επηζηξέθνπλ» ζαλ θιήζε ζπλάξηεζεο φ,ηη έρεη ζηείιεη ε εληνιή ζηελ έμνδφ ηεο.

asidirop@aetos:~$ date
Mon Jul 27 10:54:27 EEST 2015
asidirop@aetos:~$ a=`date`
asidirop@aetos:~$ echo "$a"
Mon Jul 27 10:54:32 EEST 2015
asidirop@aetos:~$ echo "$a"
Mon Jul 27 10:54:32 EEST 2015
asidirop@aetos:~$

Γηα παξάδεηγκα ε εληνιή date εκθαλίδεη ζηελ θαλνληθή έμνδν ηελ ηξέρνπζα εκεξνκελία θαη ψξα. Αλ
γίλεη αλάζεζε ηεο date κε αλάπνδα εηζαγσγηθά ζε κηα κεηαβιεηή a, ηφηε ε κεηαβιεηή ζα πεξηέρεη απηφ πνπ

187
έζηεηιε ε εληνιή ζηελ θαλνληθή έμνδν ηελ ψξα ηεο αλάζεζεο. Πξνθαλψο, φζεο θνξέο θαη λα εκθαλίζνπκε ηε
κεηαβιεηή ζα πεξηέρεη ηελ ψξα θαηά ηε ζηηγκή ηεο αλάζεζεο θαη φρη ηελ ψξα θαηά ηε ζηηγκή ηεο ρξήζεο.
Γειαδή ε εληνιή έρεη εθηειεζηεί κηα θνξά θαηά ηε ζηηγκή ηεο αλάζεζεο.
Δπηπιένλ, κέζα ζηα αλάπνδα εηζαγσγηθά κπνξεί λα ζπκπεξηιεθζεί νπνηνζδήπνηε ζπλδπαζκφο
εληνιψλ κε δηαζσιήλσζε, αλαθαηεχζπλζε θαη νηηδήπνηε άιιν ζα κπνξνχζε λα γξαθηεί ζηε γξακκή
εληνιψλ. ΢ηελ πξαγκαηηθφηεηα, φηαλ ην θέιπθνο βξεη αλάπνδα εηζαγσγηθά δεκηνπξγεί έλα λέν θέιπθνο
(δηεξγαζία), ην νπνίν είλαη ππεχζπλν λα εθηειέζεη ηηο εληνιέο πνπ πεξηθιείνληαη ζηα εηζαγσγηθά. Ζ θαλνληθή
έμνδνο απφ ην λέν θέιπθνο δεζκεχεηαη θαη γίλεηαη αλάζεζε ζηε κεηαβιεηή. Όιεο νη εληνιέο πνπ ζα
εθηειεζηνχλ απφ ην λέν θέιπθνο, θιεξνλνκνχλ ηελ θαλνληθή έμνδν ηνπ λένπ θειχθνπο.

asidirop@aetos:~$ a=`ls|wc`
asidirop@aetos:~$ echo "$a"
33 33 257
asidirop@aetos:~$

Ζ έμνδνο ησλ εληνιψλ κέζα ζηα αλάπνδα εηζαγσγηθά κπνξεί λα πεξηέρεη πνιιέο γξακκέο, φπσο γηα
παξάδεηγκα ε έμνδνο απφ ηελ εληνιή ls -l:

bash-2.05a$ b=`ls -l`


bash-2.05a$ echo $b
total 32 -rw-r--r-- 1 asidirop it 314 Jan 11 2003 cc -rwxr--r-- 1
asidirop it 77 Nov 20 19:17 file1 -rwxr-xr-x 1 asidirop it 61 Nov
20 19:34 file2 -rw-r--r-- 1 asidirop it 183 Jan 8 2003 list
bash-2.05a$ echo "$b"
total 32
-rw-r--r-- 1 asidirop it 314 Jan 11 2003 cc
-rwxr--r-- 1 asidirop it 77 Nov 20 19:17 file1
-rwxr-xr-x 1 asidirop it 61 Nov 20 19:34 file2
-rw-r--r-- 1 asidirop it 183 Jan 8 2003 list
bash-2.05a$

Όκσο γηα λα ρξεζηκνπνηήζνπκε ην απνηέιεζκα, ζα πξέπεη πάληα λα ρξεζηκνπνηνχληαη δηπιά


εηζαγσγηθά γηα ηε κεηαβιεηή, δηφηη δηαθνξεηηθά, φπσο θαίλεηαη παξαπάλσ, ράλνληαη νη εηδηθνί ραξαθηήξεο
(πνιιαπιά θελά, αιιαγή γξακκήο θ.ν.θ.).
΢ην θέιπθνο bash ηελ ίδηα ρξήζε κε ηα αλάπνδα εηζαγσγηθά έρεη θαη ν ζπλδπαζκφο $(). Πξαθηηθά
είλαη ηζνδχλακα κε ηα αλάπνδα εηζαγσγηθά:

bash-2.05a$ b=$(ls –l)


bash-2.05a$ echo "$b"
total 32
-rw-r--r-- 1 asidirop it 314 Jan 11 2003 cc
-rwxr--r-- 1 asidirop it 77 Nov 20 19:17 file1
-rwxr-xr-x 1 asidirop it 61 Nov 20 19:34 file2
-rw-r--r-- 1 asidirop it 183 Jan 8 2003 list
bash-2.05a$

188
 Υξεηάδεηαη ηδηαίηεξε πξνζνρή! Όηαλ ζε έλα θέιπθνο ρξεζηκνπνηνύληαη δπλαηόηεηεο ηνπ bash
νη νπνίεο δελ ππνζηεξίδνληαη από ην sh, ζα πξέπεη νπσζδήπνηε ην ζελάξην λα μεθηλά
κε #!/bin/bash θαη όρη κε #!/bin/sh.

8.4 Αξηζκεηηθέο Πξάμεηο

8.4.1 Αξηζκεηηθέο Πξάμεηο κε ρξήζε ηεο expr


Γεληθά ηα θειχθε δελ ππνζηεξίδνπλ κεηαβιεηέο ηχπνπ αξηζκνχ θαη ζπλεπψο δελ ππνζηεξίδνπλ αξηζκεηηθέο
πξάμεηο (ην bash φκσο ππνζηεξίδεη: βιέπε Παξάγξαθν 8.4.2). Οη αξηζκεηηθέο πξάμεηο πξαγκαηνπνηνχληαη κε
ηε ρξήζε εμσηεξηθψλ εληνιψλ. Ζ πην δηαδεδνκέλε εληνιή γηα αξηζκεηηθέο πξάμεηο είλαη ε expr.
Ζ expr έρεη ηε δπλαηφηεηα λα πξαγκαηνπνηεί κφλν πξάμεηο αθέξαησλ αξηζκψλ. Γέρεηαη σο νξίζκαηα ηελ
αξηζκεηηθή παξάζηαζε θαη ηππψλεη ην απνηέιεζκα ζηελ θαλνληθή έμνδν.

asidirop@aetos:~$ expr 1 + 2
3
asidirop@aetos:~$ a=5
asidirop@aetos:~$ expr "$a" - 10
-5
asidirop@aetos:~$ b=4000
asidirop@aetos:~$ expr "$b" + "$a"
4005
asidirop@aetos:~$

Πξνθαλψο ζηα νξίζκαηα ηεο expr κπνξνχλ λα δνζνχλ είηε ζηαζεξέο ηηκέο αξηζκψλ είηε κεηαβιεηέο
ζηηο νπνίεο πξνεγνχκελα έρεη γίλεη αλάζεζε αξηζκεηηθή ηηκή.
Απαηηείηαη αξθεηή πξνζνρή, φηαλ ρξεζηκνπνηείηαη ε εληνιή expr ζηνλ ηξφπν κε ηνλ νπνίν ζα
δνζνχλ ηα νξίζκαηα θαζψο θαη ζηελ πξάμε ηνπ πνιιαπιαζηαζκνχ.

asidirop@aetos:~$ expr 6 * 10 # εληνιή 1


expr: syntax error
asidirop@aetos:~$ expr 6 \* 10 # εληνιή 2
60
asidirop@aetos:~$ expr 6 '*' 10 # εληνιή 3
60
asidirop@aetos:~$ expr "6 * 10" # εληνιή 4
6 * 10
asidirop@aetos:~$

Δθφζνλ ε πξάμε ηνπ πνιιαπιαζηαζκνχ ζπκβνιίδεηαη κε ηνλ ραξαθηήξα *, ν νπνίνο φκσο είλαη θαη
εηδηθφο ραξαθηήξαο γηα ην θέιπθνο, ζα πξέπεη λα αθπξσζεί ε εηδηθή ηνπ ζεκαζία. Γηαθνξεηηθά, φπσο
θαίλεηαη ζηελ πξψηε εληνιή παξαπάλσ ε expr ζα δψζεη ζπληαθηηθφ ζθάικα, δηφηη ην "*" ζα έρεη
αληηθαηαζηαζεί απφ ην θέιπθνο, πξηλ εθηειεζηεί ε expr κε ηα νλφκαηα αξρείσλ ηνπ ηξέρνληνο θαηαιφγνπ.
΢ηε δεχηεξε θαη ηξίηε εληνιή παξαπάλσ, έρεη αθπξσζεί ε εηδηθή ζεκαζία ηνπ "*", ζηε κηα κε ηελ αλάπνδε
θάζεην ελψ ζηελ άιιε κε ηα εηζαγσγηθά. Πξνζνρή φκσο (ηέηαξηε εληνιή) δελ ζα κπνξνχζακε λα βάινπκε ζε
εηζαγσγηθά νιφθιεξε ηελ αξηζκεηηθή παξάζηαζε. Ζ expr απαηηεί θάζε ηειεζηήο θαη ηειεζηένο λα απνηειεί
δηαθνξεηηθφ φξηζκα ζηελ εληνιή.

189
Δθφζνλ ε expr ζηέιλεη ην απνηέιεζκα ζηελ θαλνληθή έμνδν, κπνξνχκε λα δεζκεχζνπκε ηελ
θαλνληθή έμνδν κε ηε ρξήζε ησλ αλάπνδσλ εηζαγσγηθψλ θαη λα ηελ εθρσξήζνπκε ζε θάπνηα κεηαβιεηή.

asidirop@aetos:~$ c=`expr 7 / 2`
asidirop@aetos:~$ echo "$c"
3
asidirop@aetos:~$ a=4000
asidirop@aetos:~$ b=5
asidirop@aetos:~$ d=`expr "$a" + "$b"`
asidirop@aetos:~$ echo "$d"
4005
asidirop@aetos:~$

Ο πξνεγνχκελνο, ινηπφλ, είλαη ν γεληθφο ηξφπνο ρξήζεο ηεο expr ζε φια ηα θειχθε. Όκσο
ρξεηάδεηαη ηδηαίηεξε πξνζνρή θαηά ηε ρξήζε. ΢ην παξαθάησ παξάδεηγκα θαίλνληαη δπν πνιχ ζπλεζηζκέλεο
πεξηπηψζεηο ζθάικαηνο. ΢ηελ πξψηε πεξίπησζε νιφθιεξε ε αξηζκεηηθή παξάζηαζε απνηειεί έλα θαη κφλν
φξηζκα, θάηη πνπ δελ έρεη ηε δπλαηφηεηα λα ην δηαρεηξηζηεί ε expr. ΢ηε δεχηεξε πεξίπησζε δελ δηαρσξίδεηαη
ε πξάμε απφ ηνλ δεχηεξν αξηζκφ, ζπλεπψο ε εληνιή ζεσξεί ην "+" σο πξφζεκν ηνπ δεχηεξνπ αξηζκνχ, άξα
ιείπεη ε πξάμε. Σν απνηέιεζκα θαη ζηηο δπν πεξηπηψζεηο είλαη εζθαικέλν.

asidirop@aetos:~$ expr 6+4


6+4
asidirop@aetos:~$ expr 6 +4
expr: syntax error
asidirop@aetos:~$

Δπίζεο, πξφβιεκα κπνξεί λα δεκηνπξγεζεί θαη ζηηο πεξηπηψζεηο πνπ ρξεζηκνπνηνχληαη κεηαβιεηέο,
αιιά απηέο δελ έρνπλ αξρηθνπνηεζεί. ΢ηα παξαθάησ παξαδείγκαηα, ζηελ πξψηε πεξίπησζε, έρεη
αξρηθνπνηεζεί ε κεηαβιεηή a αιιά φρη ε w. ΢πλεπψο, ε εληνιή expr $a + $w είλαη ζαλ λα έρνπκε
γξάςεη expr 1 +, ην νπνίν πξνθαλψο είλαη ιαλζαζκέλε αξηζκεηηθή παξάζηαζε. Αθφκε θαη αλ
ρξεζηκνπνηεζνχλ εηζαγσγηθά (εληνιή ηξίηε), ην ηξίην φξηζκα ("$w") ζα είλαη θελφ (empty string), ην νπνίν
ε expr δελ κπνξεί λα ην κεηαηξέςεη ζε αξηζκφ.

bash-2.05a$ a=1
bash-2.05a$ expr $a + $w # πεξίπηωζε 1
Syntax error
bash-2.05a$ expr 1 + # πεξίπηωζε 2
Syntax error
bash-2.05a$ expr "$a" + "$w" # πεξίπηωζε 3
non-numeric argument
bash-2.05a$ expr 0"$a" + 0"$w" # πεξίπηωζε 4
1
bash-2.05a$ b=x
bash-2.05a$ expr 0"$a" + 0"$b" # πεξίπηωζε 5
expr: non-integer argument
bash-2.05a$ k=`expr $c + $w` # πεξίπηωζε 6
Syntax error
bash-2.05a$ echo $k

190
bash-2.05a$

Μηα πξφρεηξε παξάθακςε ηνπ πξνβιήκαηνο κπνξεί λα γίλεη ρξεζηκνπνηψληαο ην "0" πξηλ απφ θάζε
κεηαβιεηή, έηζη ψζηε, αλ ε κεηαβιεηή είλαη θελή ν ηειεζηένο λα είλαη "0", αλ δελ είλαη θελή, παξάδεηγκα "1",
ν ηειεζηένο ζα είλαη "01", δειαδή αξηζκεηηθά "1". Παξφια απηά, πάιη κπνξνχλ λα πξνθχςνπλ ζθάικαηα
ζηελ πεξίπησζε πνπ κηα κεηαβιεηή δελ πεξηέρεη αξηζκφ αιιά ραξαθηήξεο (πεξίπησζε 5).
Σέινο, ηα πξνβιήκαηα κπνξνχλ λα πνιιαπιαζηαζηνχλ, φηαλ γίλεηαη αλάζεζε ηνπ απνηειέζκαηνο ζε
κεηαβιεηή, αιιά ε θιήζε ηεο expr έδσζε θάπνην ζθάικα φπσο ζηελ πεξίπησζε 6. Ζ εληνιή δελ ζα
ηππψζεη ηίπνηε ζηελ θαλνληθή έμνδν, ζπλεπψο ε κεηαβιεηή ζα έρεη θελή ηηκή. Άξα, φηαλ ζα ηε
ρξεζηκνπνηήζνπκε αξγφηεξα ζην ζελάξην ζα δεκηνπξγήζεη πξφβιεκα.

 Πξηλ από ηε ρξήζε ηεο expr απαηηείηαη νπσζδήπνηε έιεγρνο θαη επηβεβαίσζε λόκηκσλ ηηκώλ
ησλ κεηαβιεηώλ.

 Δλαιιαθηηθά, κεηά από ηε ρξήζε ηεο expr απαηηείηαη νπσζδήπνηε έιεγρνο θαη επηβεβαίσζε
ηνπ απνηειέζκαηνο ή ηνπ θσδηθνύ ζθάικαηνο (error code ή exit code).

8.4.2 Αξηζκεηηθέο Πξάμεηο κε ρξήζε ηεο αξηζκεηηθήο θαηάζηαζεο (arithmetic mode)


ηνπ bash
Σν bash (σο επέθηαζε ηνπ sh) έρεη ηε δπλαηφηεηα λα θάλεη αξηζκεηηθέο πξάμεηο. Δπηπιένλ:
 Γελ ππάξρεη πξφβιεκα κε ηα θελά δηαζηήκαηα (spaces).
 Γελ ππάξρεη πξφβιεκα, αλ κηα κεηαβιεηή δελ είλαη νξηζκέλε (αξθεί λα κελ ρξεζηκνπνηνχκε ην $).
 Γελ ππάξρεη πξφβιεκα, αλ κηα κεηαβιεηή δελ πεξηέρεη αξηζκφ (ζεσξείηαη 0).

asidirop@aetos:~$ a=$((5+4)) # πεξίπηωζε 1


asidirop@aetos:~$ echo $a
9
asidirop@aetos:~$ a=$((a+4)) # πεξίπηωζε 2
asidirop@aetos:~$ echo $a
13
asidirop@aetos:~$ a=$((a+w)) # πεξίπηωζε 3
asidirop@aetos:~$ echo $a
13
asidirop@aetos:~$ a=$((a+$w)) # πεξίπηωζε 4
-bash: a+: syntax error: operand expected (error token is "+")
asidirop@aetos:~$
asidirop@aetos:~$ w='test'
asidirop@aetos:~$ a=$((a+w)) # πεξίπηωζε 5
asidirop@aetos:~$ echo $a
13

΢ην παξαπάλσ παξάδεηγκα βιέπνπκε (πεξηπηψζεηο 1 θαη 2) φηη δελ ππάξρεη πξφβιεκα κε ηε κε
χπαξμε θελψλ δηαζηεκάησλ κέζα ζηελ αξηζκεηηθή παξάζηαζε. ΢ηελ πεξίπησζε 3, πνπ ρξεζηκνπνηείηαη ε
κεηαβιεηή w, ε νπνία δελ έρεη νξηζηεί, ρξεζηκνπνηείηαη ζαλ κεδέλ (0). Όκσο αλ είρακε βάιεη ηνλ

191
ραξαθηήξα $ πξηλ απφ ηε κεηαβιεηή w, ηφηε, φπσο θαίλεηαη ζηελ πεξίπησζε 4, ππάξρεη πξφβιεκα. Σέινο, αλ
κηα κεηαβιεηή πεξηέρεη γξάκκαηα θαη φρη αξηζκφ, ηφηε κεηαθξάδεηαη ζε κεδέλ (πεξίπησζε 5).
Υξεηάδεηαη κεγάιε πξνζνρή ζηελ πεξίπησζε πνπ ρξεζηκνπνηεζεί ν ραξαθηήξαο $ κέζα ζε
αξηζκεηηθή παξάζηαζε σο κεηαβιεηή.

asidirop@aetos:~$ a=13
asidirop@aetos:~$ b='test'
asidirop@aetos:~$ test='1000'
asidirop@aetos:~$ c=$(($a+$b))
asidirop@aetos:~$ echo $c
1013
asidirop@aetos:~$

To $ εξκελεχεηαη πξηλ απφ ηελ εθηέιεζε ηεο πξάμεο. Άξα, ην $b ζα αληηθαηαζηαζεί κε ην test θαη
ην $a κε ην 13. Άξα, είλαη ζαλ λα γξάθνπκε:c=$((13+test)) θαη ην test είλαη κεηαβιεηή πνπ πεξηέρεη
ηελ ηηκή 1000!

 Πξνηηκήζηε ηε δπλαηόηεηα ηνπ bash γηα αξηζκεηηθέο πξάμεηο, αξθεί ην ζελάξην λα μεθηλάεη
κε #!/bin/bash

 Απνθύγεηε ηε ρξήζε ηνπ $ κέζα ζηελ θαηάζηαζε αξηζκεηηθήο ιεηηνπξγίαο (arithmetic mode).

Σέινο, λα ζεκεησζεί φηη ε θαηάζηαζε αξηζκεηηθήο ιεηηνπξγίαο ππνζηεξίδεη φιεο ηηο καζεκαηηθέο
πξάμεηο θαη φιεο ηηο ζπληνκνγξαθίεο πνπ ηζρχνπλ ζηηο πεξηζζφηεξεο γιψζζεο πξνγξακκαηηζκνχ (Πίλαθα
8.1). Γηα παξάδεηγκα:

asidirop@aetos:~$ a=13
asidirop@aetos:~$ ((a++))
asidirop@aetos:~$ echo $a
14
asidirop@aetos:~$ ((a+=6))
asidirop@aetos:~$ echo $a
20
asidirop@aetos:~$ ((b=a+8))
asidirop@aetos:~$ c=$((a+8))
asidirop@aetos:~$ echo $b
28
asidirop@aetos:~$ echo $c
28
asidirop@aetos:~$

Όπσο θαίλεηαη ζηα παξαπάλσ παξαδείγκαηα, αλάζεζε ηηκήο ζε κεηαβιεηή κπνξεί λα γίλεη
εμνινθιήξνπ κέζα ζηελ θαηάζηαζε αξηζκεηηθήο ιεηηνπξγίαο, δειαδή ην ((b=a+8)). Πξνζνρή, ζε απηήλ
ηελ πεξίπησζε δελ ρξεζηκνπνηείηαη ν ραξαθηήξαο $ πξηλ απφ ηηο παξελζέζεηο.

192
Πίλαθαο 8.1: Λίζηα κε ηηο αξηζκεηηθέο πξάμεηο ηεο θαηάζηαζεο αξηζκεηηθήο ιεηηνπξγίαο ηνπ
θειύθνπο.

Πξάμε Δμήγεζε
id++ id-- variable post-increment and post-decrement
++id --id variable pre-increment and pre-decrement
- + unary minus and plus
! ~ logical and bitwise negation
** exponentiation
* ,/ , % multiplication, division, remainder
+, - addition, subtraction
<< , >> left and right bitwise shifts
<= ,>=, <, > comparison
==, != equality and inequality
&, ^, | bitwise AND, bitwise exclusive OR, bitwise OR
&&, || logical AND, logical OR
expr?expr:expr conditional operator
= *= /= %= += -= <<= >>=
assignment
&= ^= |=

8.5 Αζθήζεηο γηα εμάζθεζε

΢ηόρνο
Δηζαγσγή ζηα ζελάξηα θινηνχ

Άζθεζε 1
Φηηάμηε έλα ζελάξην θειχθνπο κε φλνκα myls, ην νπνίν ζα εθηειεί ηελ εληνιή ls –l (ζα εκθαλίδεη ηα
απνηειέζκαηά ηεο), κεηά ζα εκθαλίδεη ην πιήζνο ησλ απιψλ αξρείσλ, ην πιήζνο ησλ θαηαιφγσλ, ην πιήζνο
ησλ θξπθψλ αξρείσλ, ην πιήζνο ησλ θξπθψλ θαηαιφγσλ.

193
Άζθεζε 2
Γεκηνπξγήζηε έλα script κε φλνκα echo_test ην νπνίν λα πεξηέρεη:

Αρχείο: echo_test

#!/bin/sh
#echo_test
#-----------------------------------
echo "1.the process id is : $$ and cwd $PWD"
echo '2.the process id is : $$ and cwd $PWD '
echo 3.the process id is : $$ and cwd $PWD
echo 4.the process id is\ \ :\ \ \ \$\$ and cwd $PWD
echo '5.the process id is : "$$ and cwd $PWD" '
echo "6.the process id is : '$$' and cwd $PWD"

Ση παξαηεξείηε θαηά ηελ εθηέιεζή ηνπ;

Άζθεζε 3
Γεκηνπξγήζηε έλα ζελάξην θειχθνπο κε φλνκα echo_test3 ην νπνίν λα πεξηέρεη:

Αρχείο: echo_test3

#!/bin/bash
#echo_test3
#-----------------------------------
a=TEST
b=TEST B
c="TEST C"
d="$c + D"
echo "1.a is $a"
echo
echo "2.b is $b"
echo
echo '3.c is $c'
echo "4.c is $c"
echo 5.c is $c
echo
echo "5.d is $d"
echo var1="6 "
var2=$((var1 + 2 ))
echo "7.var1 is $var1, var2 is $var2"

1. Ση παξαηεξείηε; Πνηεο είλαη νη δηαθνξέο κε ηε ρξήζε δηπιψλ ή κνλψλ εηζαγσγηθψλ;


2. Πνηα ηηκή έρεη ε κεηαβιεηή b;

194
Άζθεζε 4
Γεκηνπξγήζηε ηα παξαθάησ ζελάξηα θειχθνπο θαη εθηειέζηε ηα. Πνην είλαη ην θαιχηεξν;

Αρχείο: echo_test4a

#!/bin/sh
#echo_test4a
#-----------------------------------
x=`ls –l`
echo x is $x

Αρχείο: echo_test4b

#!/bin/sh
#echo_test4b
#-----------------------------------
x=`ls –l`
echo "x is $x"

Αρχείο: echo_test4c

#!/bin/sh
#echo_test4c
#-----------------------------------
x=`ls –l`
echo 'x is $x'

195
Άζθεζε 5
Γεκηνπξγήζηε έλα ζελάξην θειχθνπο κε φλνκα echo_test5 ην νπνίν λα πεξηέρεη:

Αρχείο: echo_test5

#!/bin/bash
#echo_test5
#-----------------------------------
a=5
b=" 6"
c=""
d=$((a+5))
e=$((b+5))
((f=c+5))
echo "d is $d, e is $e, f is $f"
echo d=`expr $a + 5`
e=`expr $b+5`
f=`expr $c+5`
echo "d is $d, e is $e, f is $f"

Άζθεζε 6
Γεκηνπξγήζηε έλα ζελάξην θειχθνπο κε φλνκα echo_test6 ην νπνίν λα πεξηέρεη:

Αρχείο: echo_test6

#!/bin/sh
#script06
#-----------------------------------
a=5
echo –n "Give me your name: "
read name
echo "value of a is $a"
echo "value of name is $name"

Άζθεζε 7
Γεκηνπξγήζηε ην παξαθάησ ζελάξην θειχθνπο:

Αρχείο: echo_test7

#!/bin/sh
#echo_test7
#-----------------------------------
echo "first parameter : $1"
echo "third parameter : $3"

196
echo "ninth parameter : $9"
echo "tenth parameter : $10"
echo "eleventh parameter : $11"
echo "No of parameters : $#"
echo "all parameters : $*"
echo "all parameters : $@"
shift
echo "first parameter : $1"
echo "all parameters : $*"

΢ηνλ Πίλαθα 8.2 εμεγνχληαη νη πξνδεισκέλεο κεηαβιεηέο ηνπ θειχθνπο.


Ση ζα εκθαληζηεί ζηελ νζφλε κε ηελ εθηέιεζε ηεο αθφινπζεο γξακκήο εληνιήο;

./echo_test7 one two 3 4 5 6 7 eight 9 ten 11

Πίλαθαο 8.2: Πξν-δεισκέλεο κεηαβιεηέο ηνπ θειύθνπο.

Μεηαβιεηή Δμήγεζε
$1,$2,…$9 νη ηηκέο ησλ 9 πξψησλ νξηζκάησλ πνπ έδσζε ν ρξήζηεο ζε έλα script
$# ην πιήζνο ησλ νξηζκάησλ πνπ έδσζε ν ρξήζηεο ζε έλα script
$*, $@ Οη πίλαθεο κε ηα νξίζκαηα πνπ έδσζε ν ρξήζηεο ζε έλα script
$$ Σν ProcessID ηνπ ηξέρνληνο shell

197
Παξάξηεκα Α

Α Ο επεμεξγαζηήο θεηκέλνπ vi
O vi είλαη ν βαζηθφο επεμεξγαζηήο θεηκέλνπ πνπ δεκηνπξγήζεθε γηα ην UNIX θαη απεπζπλφηαλ ζε «ζλεηνχο
ρξήζηεο». Πξηλ απφ ηνλ vi, νη επεμεξγαζηέο θεηκέλνπ δελ είραλ ηε ζεκεξηλή κνξθή θαη ιεηηνπξγία. Ο βαζηθφο
επεμεξγαζηήο θεηκέλνπ (γηα UNIX αιιά θαη γηα DOS) ήηαλ ν ed (editor). Ο ed αλήθε ζηελ θαηεγνξία πνπ
νλνκάδεηαη “line editor”. Γελ ππήξρε πξνβνιή ηνπ αξρείνπ, αιιά ν ρξήζηεο πιεθηξνινγνχζε ην θείκελφ ηνπ
κε εληνιέο, παξάδεηγκα: «πξφζζεζε ηε γξακκή κε θείκελν xyz». Πξνθαλψο, ηέηνηνπ ηχπνπ επεμεξγαζία
θεηκέλνπ ήηαλ βαζαληζηηθή γηα ηνπο ρξήζηεο. Ο vi ήηαλ απφ ηηο πξψηεο εθαξκνγέο ζηελ νπνία ν ρξήζηεο
έβιεπε ην θείκελν θαη κπνξνχζε λα κεηαθηλεζεί κε ηα βειάθηα ζε θάπνην ζεκείν ηνπ θεηκέλνπ θαη λα θάλεη
αιιαγέο/πξνζζήθεο.
H αξρηθή έθδνζε ηνπ vi δεκηνπξγήζεθε ην 1976, ελψ κέρξη ζήκεξα έρνπλ δεκηνπξγεζεί πάξα πνιινί
θιψλνη. Ζ έθδνζε θιψλνο πνπ ρξεζηκνπνηείηαη ζήκεξα πεξηζζφηεξν είλαη ν vIM (vi IMproved). Δπίζεο,
εθηφο απφ ηηο παξαδνζηαθέο εθδφζεηο πνπ ιεηηνπξγνχλ ζε ηεξκαηηθφ, έρνπλ δεκηνπξγεζεί θαη γξαθηθέο
εθαξκνγέο φπσο ν gvim, kvim θ.ά., νη νπνίεο εθηφο απφ ηηο βαζηθέο ιεηηνπξγίεο ηνπ vi εκθαλίδνπλ ζε
παξάζπξν κελνχ επηινγψλ θαζψο θαη toolbar κε ηηο ζπρλφηεξεο ιεηηνπξγίεο.
΢ην παξφλ παξνπζηάδνπκε ηε βαζηθή έθδνζε, φκσο, φια απηά πνπ αλαθέξνληαη ιεηηνπξγνχλ ζε
φινπο ηνπο θιψλνπο θαη παξαιιαγέο ηνπ vi.
Ο vi έρεη δπν θχξηεο θαηαζηάζεηο ιεηηνπξγίαο:
1. Καηάζηαζε Δληνιψλ (command mode).
2. Καηάζηαζε Δηζαγσγήο (insert mode).
Με ηελ έλαξμε ηνπ vi βξηζθφκαζηε ζε Καηάζηαζε Δληνιψλ. ΢ηελ «Καηάζηαζε Δληνιψλ»
νπνηνδήπνηε πιήθηξν θαη λα παηήζνπκε αληηζηνηρεί ζε «Δληνιή». Φαληαζηείηε ηηο ζπληνκεχζεηο (shortcuts)
ζε κηα εθαξκνγή φπσο ζην Microsoft Word. Δλεξγνπνηνχληαη κε ην πιήθηξν Control. Παξάδεηγκα, ζην
Microsoft Word, ην "Cntrl-S" θάλεη απνζήθεπζε ηνπ αξρείνπ. Ζ "Καηάζηαζε Δληνιψλ" ηνπ vi, είλαη ΢ΑΝ λα
έρνπκε παηεκέλν ην Cntrl θαη πεξηκέλεη λα παηήζνπκε θαη αθφκε έλα πιήθηξν γηα λα εθηειέζεη ηελ
αληίζηνηρε ζπληφκεπζε.
Όηαλ βξηζθφκαζηε ζε "Καηάζηαζε Δηζαγσγήο", ηφηε φ,ηη πιεθηξνινγνχκε πξνζηίζεηαη ζην αξρείν,
φπσο ζε έλαλ επεμεξγαζηή θεηκέλνπ ηχπνπ notepad.
Πσο, φκσο, κπαίλνπκε ζε «Καηάζηαζε Δηζαγσγήο»; Ζ απάληεζε είλαη: κε ηελ εληνιή (ζπληφκεπζε)
πνπ καο κεηαθέξεη ζε απηήλ ηελ θαηάζηαζε. Ζ πεξηζζφηεξν ζπρλή εληνιή γηα είζνδν ζε «Καηάζηαζε
Δηζαγσγήο» είλαη ε εληνιή "i". Τπάξρνπλ θαη άιιεο εληνιέο πνπ καο κεηαθέξνπλ ζε «Καηάζηαζε
Δηζαγσγήο», φπσο θαίλνληαη ζηνλ Πίλαθα Α.1.
΢θεθηείηε ην γεγνλφο φηη φηαλ δεκηνπξγήζεθε ην vi, δελ ππήξραλ παξαζπξηθά πεξηβάιινληα νχηε
πνληίθηα. ΢πλεπψο, γηα ηε γξήγνξε επεμεξγαζία θεηκέλσλ ζε θαηάζηαζε ηεξκαηηθνχ θαη ηδίσο αξρείσλ πνπ
πεξηέρνπλ θψδηθα, δεκηνπξγήζεθαλ ζηνλ vi εθαηνληάδεο εληνιέο ζρεδφλ γηα φιεο ηηο πεξηπηψζεηο πνπ
ρξεηάδεηαη έλαο πξνγξακκαηηζηήο. Γηα απηφλ ηνλ ιφγν βιέπνπκε έμη εληνιέο πνπ καο κεηαθέξνπλ ζε
«Καηάζηαζε Δηζαγσγήο», αιιά κε δηαθνξεηηθφ ηξφπν, ψζηε λα ειαρηζηνπνηεζεί ην πιήζνο πιήθηξσλ πνπ
ρξεηάδεηαη λα παηήζεη θάπνηνο.

Πίλαθαο Α.1: Δληνιέο Δηζόδνπ ζε "Καηάζηαζε Δηζαγσγήο".

Δληνιή Λεηηνπξγία
i Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη ν θέξζνξαο παξακέλεη ζηε ζέζε ηνπ.
Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη ν θέξζνξαο κεηαθέξεηαη ακέζσο κεηά απφ ηελ
a
ηξέρνπζα ζέζε.

199
Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη ν θέξζνξαο κεηαθέξεηαη ζηελ αξρή ηεο
I ηξέρνπζαο γξακκήο. Αλ ππάξρνπλ ζηεινζέηεο ζηελ αξρή ηεο γξακκήο, ν θέξζνξαο ζα
κεηαθεξζεί πξηλ απφ ηελ πξψηε ιέμε ηεο ηξέρνπζαο γξακκήο.
Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη ν θέξζνξαο κεηαθέξεηαη ζην ηέινο ηεο ηξέρνπζαο
A
γξακκήο κεηά απφ ηνλ ηειεπηαίν ραξαθηήξα.
Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη λέα γξακκή. Γίλεηαη εηζαγσγή λέαο γξακκήο κεηά
o
απφ ηελ ηξέρνπζα θαη ν θέξζνξαο κεηαθέξεηαη ζε απηήλ ηε γξακκή.
Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη λέα γξακκή. Γίλεηαη εηζαγσγή λέαο γξακκήο πξηλ
Ο
απφ ηελ ηξέρνπζα θαη ν θέξζνξαο κεηαθέξεηαη ζε απηήλ ηε γξακκή.

΢ηνλ Πίλαθα Α.2 βιέπνπκε ηηο πεξηζζφηεξν ζπρλέο εληνιέο γηα ηνλ ρεηξηζκφ ηεο επεμεξγαζίαο,
δειαδή εληνιέο γηα αληηγξαθή-επηθφιιεζε, αλαίξεζε, επαλάιεςε θηι.
Δδψ πξέπεη λα ζεκεησζεί πσο γηα ηηο εληνιέο πνπ απνηεινχληαη απφ πεξηζζφηεξα ηνπ ελφο πιήθηξα,
δελ βιέπνπκε ηνπο ραξαθηήξεο πνπ πιεθηξνινγνχκε. Απιά ζα δνχκε ην απνηέιεζκα ηεο εληνιήο, φηαλ
νινθιεξσζεί ε πιεθηξνιφγεζή ηεο.

Πίλαθαο Α.2: Βαζηθέο Δληνιέο Δπεμεξγαζίαο.

Δληνιή Λεηηνπξγία
u Αλαίξεζε (undo).
. Δπαλάιεςε ηειεπηαίαο εληνιήο (redo).
Γηαγξαθή ηεο ηξέρνπζαο γξακκήο θαη αληηγξαθή ηεο ζηελ πξνζσξηλή κλήκε (buffer ή
dd
clipboard).
Δπαλάιεςε ηεο εληνιήο Γηαγξαθήο Ν θνξέο. Οπζηαζηηθά δηαγξαθή Ν γξακκψλ
Ndd μεθηλψληαο απφ ηελ ηξέρνπζα. Οη γξακκέο ζα αληηγξαθνχλ ζηελ πξνζσξηλή κλήκε (buffer
ή clipboard).
Γηαγξαθή ηεο ηξέρνπζαο ιέμεο θαη αληηγξαθή ηεο ζηελ πξνζσξηλή κλήκε (buffer ή
dw
clipboard).
Γηαγξαθή Ν ιέμεσλ μεθηλψληαο απφ ηελ ηξέρνπζα ιέμε θαη αληηγξαθή ηνπο ζηελ
Νdw
πξνζσξηλή κλήκε (buffer ή clipboard).
Γηαγξαθή απφ ην ζεκείν ηνπ θέξζνξα κέρξη ην ηέινο γξακκήο θαη αληηγξαθή απηψλ πνπ
D
δηαγξάθεθαλ ζηελ πξνζσξηλή κλήκε (buffer ή clipboard).
Γηαγξαθή απφ ην ζεκείν ηνπ θέξζνξα θαη ησλ επφκελσλ Ν-1 γξακκψλ θαη αληηγξαθή
ND
απηψλ πνπ δηαγξάθεθαλ ζηελ πξνζσξηλή κλήκε (buffer ή clipboard).
yy Αληηγξαθή ηεο ηξέρνπζαο γξακκήο ζηελ πξνζσξηλή κλήκε (buffer ή clipboard).
Αληηγξαθή Ν γξακκψλ (μεθηλψληαο απφ ηελ ηξέρνπζα γξακκή) ζηελ πξνζσξηλή κλήκε
Νyy
(buffer ή clipboard).
Αληηγξαθή Ν γξακκψλ (μεθηλψληαο απφ ηελ ηξέρνπζα γξακκή) ζηελ πξνζσξηλή κλήκε
yw
(buffer ή clipboard).
Αληηγξαθή Ν ιέμεσλ μεθηλψληαο απφ ηελ ηξέρνπζα ιέμε ζηελ πξνζσξηλή κλήκε (buffer ή
Νyw
clipboard).
Αληηγξαθή απφ ην ζεκείν ηνπ θέξζνξα κέρξη ην ηέινο γξακκήο ζηελ πξνζσξηλή κλήκε
Τ
(buffer ή clipboard).
Αληηγξαθή απφ ην ζεκείν ηνπ θέξζνξα θαη ησλ επφκελσλ Ν-1 γξακκψλ ζηελ πξνζσξηλή
Τ
κλήκε (buffer ή clipboard).

200
Δπηθφιιεζε ησλ πεξηερνκέλσλ ηεο πξνζσξηλήο κλήκεο πξηλ ηνλ θέξζνξα. Αλ ε πξνζσξηλή
P κλήκε πεξηέρεη νιφθιεξεο γξακκέο, ηφηε γίλεηαη εηζαγσγή γξακκψλ πξηλ ηελ ηξέρνπζα
γξακκή.
Δπηθφιιεζε ησλ πεξηερνκέλσλ ηεο πξνζσξηλήο κλήκεο κεηά ηνλ θέξζνξα. Αλ ε
p πξνζσξηλή κλήκε πεξηέρεη νιφθιεξεο γξακκέο, ηφηε γίλεηαη εηζαγσγή γξακκψλ κεηά ηελ
ηξέρνπζα γξακκή.
Γηαγξαθή ηνπ ραξαθηήξα πνπ βξίζθεηαη θάησ απφ ηνλ θέξζνξα θαη αληηγξαθή ηνπ ζηελ
x
πξνζσξηλή κλήκε.
Γηαγξαθή ηνπ ραξαθηήξα πνπ βξίζθεηαη θάησ απφ ηνλ θέξζνξα θαη ησλ επφκελσλ Ν-1 (ηεο
Nx
ηξέρνπζαο γξακκήο) θαη αληηγξαθή ηνπο ζηελ πξνζσξηλή κλήκε.
Αληηθαηάζηαζε ηεο ηξέρνπζαο ιέμεο. Γηαγξάθεηαη ε ηξέρνπζα ιέμε θαη κπαίλνπκε ζε
cw «Καηάζηαζε Δηζαγσγήο Κεηκέλνπ» γηα ηελ πιεθηξνιφγεζε. Θα πξέπεη λα παηεζεί ην
πιήθηξν Esc γηα ηέινο αληηθαηάζηαζεο.
Αληηθαηάζηαζε ηεο ηξέρνπζαο ιέμεο θαη ησλ Ν-1 επφκελσλ ιέμεσλ. Γηαγξάθνληαη νη Ν
Ncw ιέμεηο θαη κπαίλνπκε ζε «Καηάζηαζε Δηζαγσγήο Κεηκέλνπ» γηα ηελ πιεθηξνιφγεζε. Θα
πξέπεη λα παηεζεί ην πιήθηξν Esc γηα ηέινο αληηθαηάζηαζεο.
Αληηθαηάζηαζε ηνπ ηξέρνληνο ραξαθηήξα (πνπ βξίζθεηαη θάησ απφ ηνλ θέξζνξα). Ακέζσο
r
κεηά ην "r" ζα πξέπεη λα παηήζνπκε ηνλ ραξαθηήξα αληηθαηαζηάηε.
Αληηθαηάζηαζε ηνπ ηξέρνληνο ραξαθηήξα (πνπ βξίζθεηαη θάησ απφ ηνλ θέξζνξα) θαη ησλ
Νr Ν-1 επφκελσλ. Ακέζσο κεηά ην "r" ζα πξέπεη λα παηήζνπκε ηνλ ραξαθηήξα
αληηθαηαζηάηε. Θα γίλνπλ Ν αληηθαηαζηάζεηο.
Μεηαηξνπή ηνπ ηξέρνληνο ραξαθηήξα (πνπ βξίζθεηαη θάησ απφ ηνλ θέξζνξα) απφ πεδφ ζε
~
θεθαιαίν ή ην αληίζηξνθν.
Μεηαηξνπή ηνπ ηξέρνληνο ραξαθηήξα θαη ησλ Ν-1 επφκελσλ απφ πεδνχο ζε θεθαιαίνπο ή
Ν~
ην αληίζηξνθν.

Όπσο είλαη ζρεδφλ πξνθαλέο απφ ηνλ πξνεγνχκελν πίλαθα, ε ιεηηνπξγία επαλάιεςεο κπνξεί λα
εθαξκνζηεί ζε νπνηαδήπνηε εληνιή. Πιεθηξνινγνχκε έλαλ αξηζκφ, κεηά ηελ εληνιή θαη ε εληνιή
επαλαιακβάλεηαη ηφζεο θνξέο, φζεο θαη ν αξηζκφο πνπ δφζεθε. Πξνθαλψο, ν αξηζκφο κπνξεί λα είλαη
κνλνςήθηνο, δηςήθηνο ή νπνηνπδήπνηε κεγέζνπο. Παξάδεηγκα, αλ παηήζνπκε "16p", ζα γίλεη 16 θνξέο ε
εληνιή επηθφιιεζεο, δειαδή φ,ηη ππάξρεη ζηελ πξνζσξηλή κλήκε ζα επηθνιιεζεί 16 θνξέο. Αλ παηήζνπκε
"12~", ζα κεηαηξαπνχλ 12 ραξαθηήξεο απφ πεδνί ζε θεθαιαίνπο (ή ην αληίζηξνθν).
΢ηελ «Καηάζηαζε Δηζαγσγήο Δληνιψλ», άιιεο εληνιέο αληηζηνηρνχλ ζε πεδά γξάκκαηα θαη άιιεο ζε
θεθαιαία. Παξάδεηγκα, είλαη δηαθνξεηηθή ε εληνιή "i" απφ ηελ εληνιή "I". Γηα απηφ απαηηείηαη πξνζνρή ζηε
ρξήζε ηνπ "Caps Lock" θαη θαιφ είλαη λα είλαη πάληα απελεξγνπνηεκέλν.
Δπίζεο, ν vi, δελ θαηαιαβαίλεη εληνιέο ζηα ειιεληθά. Παξάδεηγκα, αλ έρνπκε επηιεγκέλν ην ειιεληθφ
πιεθηξνιφγην, ηφηε ην πιήθηξν "i" ζε θαηάζηαζε Δληνιψλ ζα αληηζηνηρεί ζηνλ ραξαθηήξα "η" (γηψηα κηθξφ),
ην νπνίν γηα ηνλ vi δελ είλαη εληνιή. Τπάξρεη, βέβαηα, ε δπλαηφηεηα λα ξπζκηζηεί ν vi, ψζηε λα θαηαιαβαίλεη
σο εληνιέο θαη ηνπο ειιεληθνχο ραξαθηήξεο, απαηηεί, φκσο, αξθεηέο ξπζκίζεηο γηα ηελ επνηθνδνκεηηθή
ιεηηνπξγία θαη δελ πεξηγξάθνληαη ζην παξφλ.
Τπάξρνπλ πάξα πνιιέο εληνιέο κεηαθίλεζεο. Θπκεζείηε πσο, φηαλ δεκηνπξγήζεθε ν vi δελ ππήξραλ
πνληίθηα. Δπίζεο, φια ηα πιεθηξνιφγηα δελ είραλ πιήθηξα κεηαθίλεζεο (βειάθηα) ή θαη αλ είραλ, δελ ήηαλ
φια ζπκβαηά κεηαμχ ηνπο. ΢ηνλ Πίλαθα Α.3 αλαθέξνπκε κεξηθέο κφλν απφ ηηο εληνιέο κεηαθίλεζεο.

201
Πίλαθαο Α.3: Δληνιέο Μεηαθίλεζεο ζε "Καηάζηαζε Δληνιώλ".

Δληνιή Λεηηνπξγία
Μεηαθίλεζε αξηζηεξά (←), θάησ (↓), επάλσ (↑), δεμηά (→). Δίλαη αληίζηνηρα κε ηα
h,j,k,l
πιήθηξα κεηαθίλεζεο ηα νπνία δνπιεχνπλ θαη απηά ζε φιεο ηηο λέεο εθδφζεηο ηνπ vi.
^ Μεηαθίλεζε ζηελ αξρή γξακκήο.
$ Μεηαθίλεζε ζην ηέινο γξακκήο.
G Μεηαθίλεζε ζηελ ηειεπηαία γξακκή ηνπ αξρείνπ.
NG Μεηαθίλεζε ζηε N-νζηή γξακκή ηνπ αξρείνπ (πρ 5G ζηελ 5ε γξακκή).
w Μεηαθίλεζε ζηελ επφκελε ιέμε, ζπκπεξηιακβάλνληαο σο ιέμε θαη ηα ζεκεία ζηίμεο.
W Μεηαθίλεζε ζηελ επφκελε ιέμε, αγλνψληαο ηα ζεκεία ζηίμεο.
e,Δ Μεηαθίλεζε ην ηέινο ηεο ιέμεο, ζπκπεξηιακβάλνληαο ή φρη ηα ζεκεία ζηίμεο.
b,B Μεηαθίλεζε ζηελ πξνεγνχκελε ιέμε ζπκπεξηιακβάλνληαο ή φρη ηα ζεκεία ζηίμεο.
Μεηαθίλεζε ζηελ πξψηε γξακκή πνπ θαίλεηαη ζηελ νζφλε (κπνξεί λα είλαη ε πξψηε
Ζ
γξακκή ηνπ αξρείνπ ή φρη).
Μεηαθίλεζε ζηελ παξέλζεζε ( "(", ")" ) ή αγθχιε( "[", "]" ) ή άγθηζηξν ( "{", "}" ) πνπ
%
ηαηξηάδεη.
(, ) Μεηαθίλεζε ζηελ πξνεγνχκελε ή επφκελε πξφηαζε.
{, } Μεηαθίλεζε ζηελ αξρή ηεο ηξέρνπζαο ή ηεο επφκελεο παξαγξάθνπ.

Όια ηα παξαπάλσ κπνξνχλ λα ζπλδπαζηνχλ κε ηελ επαλάιεςε εληνιήο, πρ: "3}" ζα κεηαθέξεη ηνλ
θέξζνξα 3 παξαγξάθνπο κεηά. Δπίζεο, κπνξνχλ λα ζπλδπαζηνχλ κε ηηο εληνιέο δηαγξαθήο ή αληηγξαθήο.
Παξάδεηγκα, έρνληαο ηνλ θέξζνξα ζε έλα άγθηζηξν πνπ αλνίγεη ({), αλ παηήζνπκε "d%", ζα δηαγξάςεη κέρξη
ην άγθηζηξν πνπ θιείλεη. Αλ ζε κηα παξάγξαθν παηήζνπκε "3y}", ζα αληηγξάςεη ηηο επφκελεο 3
παξαγξάθνπο.
I, i, A, a, o, O

Καηάζηαζε Εηζαγωγήο
(insert mode)

Esc
Καηάζηαζε Εληνιώλ
: (command mode)
Enter or Esc

/,?
Enter or Esc
Καηάζηαζε Γξακκήο
Εληνιώλ
(command line mode)
! Καηάζηαζε Αλαδήηεζεο
(search mode)
Γξακκή εληνιώλ
θειύθνπο
(shell command mode)

΢ρήκα Α.1: Οη θαηαζηάζεηο ιεηηνπξγίαο ηνπ vi.

Δθηφο απφ ηηο δπν βαζηθέο θαηαζηάζεηο ιεηηνπξγίαο πνπ πεξηγξάςακε (Δηζαγσγήο θαη Δληνιψλ),
ππάξρνπλ θαη άιιεο θαηαζηάζεηο ιεηηνπξγίαο. Κάπνηεο εληνιέο είηε κπνξεί λα είλαη πεξίπινθεο είηε πνιχ

202
ζεκαληηθέο, νπφηε θαη πξέπεη λα ηηο βιέπνπκε θαζψο ηηο πιεθηξνινγνχκε. Έηζη, ππάξρεη ε «Καηάζηαζε
Γξακκήο Δληνιψλ». ΢ε απηήλ ηελ θαηάζηαζε κπνξνχκε λα κεηαβνχκε παηψληαο ηελ εληνιή ":" φηαλ
βξηζθφκαζηε ζε «Καηάζηαζε Δληνιψλ». Σφηε ζηελ ηειεπηαία γξακκή ηνπ ηεξκαηηθνχ εκθαλίδεηαη ν
ραξαθηήξαο ":" θαη αλακέλεη λα πιεθηξνινγεζεί εληνιή. Οη εληνιέο ζε «Καηάζηαζε Γξακκήο Δληνιψλ»
είλαη δηαθνξεηηθέο απφ ηηο εληνιέο ζε «Καηάζηαζε Δληνιψλ».
΢ε απηήλ ηελ θαηάζηαζε, νη δπν πνιχ ζεκαληηθέο εληνιέο είλαη ε εληνιή γηα απνζήθεπζε ηνπ
αξρείνπ θαη γηα ηεξκαηηζκφ ηνπ πξνγξάκκαηνο.

Πίλαθαο Α.4: Δληνιέο ζε "Καηάζηαζε Γξακκήο Δληνιώλ".

Δληνιή Λεηηνπξγία
:w Απνζήθεπζε ηνπ αξρείνπ (write).
Απνζήθεπζε ηνπ αξρείνπ κε λέν φλνκα. Δίλαη αληίζηνηρε ηεο ιεηηνπξγίαο
"Απνζήθεπζε Χο" ή "Save As". Σν φλνκα αξρείνπ κπνξεί λα είλαη κφλν φλνκα,
:w
νπφηε θαη ζα απνζεθεπηεί ζηνλ ηξέρνληα θάθειν ή δηαδξνκή (απφιπηε ή ζρεηηθή)
filename
πξνο φλνκα αξρείνπ. Παξαδείγκαηα: :w file.txt ή :w /tmp/file2.txt
ή :w ../file3.txt
Έμνδνο απφ ην πξφγξακκα (quit). ΢ηελ πεξίπησζε πνπ δελ έρεη απνζεθεπηεί ε
:q ηειεπηαία ηξνπνπνίεζε ηνπ αξρείνπ, ζα εκθαληζηεί κήλπκα πξνεηδνπνίεζεο θαη δελ
ζα εθηειεζηεί ε ιεηηνπξγία εμφδνπ.
Έμνδνο απφ ην πξφγξακκα αγλνψληαο ηπρφλ πξνεηδνπνίεζε. Θα ηεξκαηίζεη ηνλ vi
:q!
αθφκε θαη αλ δελ έρεη απνζεθεπηεί ε ηειεπηαία έθδνζε ηνπ αξρείνπ.
Απνζήθεπζε ηνπ αξρείνπ θαη αγλφεζε πξνεηδνπνίεζεο. ΢πλήζσο πξνθχπηεη
:w! πξνεηδνπνίεζε γηα κεηαβνιή ελφο αξρείνπ πνπ έρεη νξηζηεί "κφλν γηα αλάγλσζε"
(read-only).
:wq Απνζήθεπζε ηνπ αξρείνπ θαη κεηά έμνδνο.

Απφ ηελ «Καηάζηαζε γξακκήο εληνιψλ» βγαίλνπκε απηφκαηα κε ηελ εθηέιεζε ηεο εληνιήο, δειαδή
κφιηο παηήζνπκε ην πιήθηξν "Enter". ΢ηελ πεξίπησζε πνπ έρνπκε μεθηλήζεη ηελ πιεθηξνιφγεζε κηαο
εληνιήο, αιιά ηειηθά δελ επηζπκνχκε ηελ εθηέιεζή ηεο, κπνξνχκε λα παηήζνπκε "Esc", νπφηε θαη
αθπξψλεηαη ε εληνιή θαη επηζηξέθνπκε ζε «Καηάζηαζε Δληνιψλ».
΢ηελ Καηάζηαζε Γξακκήο Δληνιψλ, ν vi δέρεηαη θαη φιεο ζρεδφλ ηηο εληνιέο ηνπ πξνγξάκκαηνο sed.
Όληαο ζε «Καηάζηαζε Γξακκήο Δληνιψλ», κπνξνχκε λα πιεθηξνινγήζνπκε ηνλ ραξαθηήξα "!" θαη
κεηά κηα εληνιή ηνπ θειχθνπο. Παξάδεηγκα:!ls -l. Ο vi ζα εθηειέζεη έλα θέιπθνο θαη κέζα ζε απηφ ηελ
εληνιή πνπ δφζεθε. Θα εκθαληζηνχλ ηα απνηειέζκαηα ηεο εληνιήο θαη ζα ππάξρεη ε πξνηξνπή λα παηήζνπκε
"Enter" γηα επηζηξνθή ζηνλ vi θαη ζηελ «Καηάζηαζε Δληνιψλ».
Απφ «Καηάζηαζε Δληνιψλ» παηψληαο ην πιήθηξν «/» ή ην "?" κπαίλνπκε ζε «Καηάζηαζε
Αλαδήηεζεο» (Search Mode). Δδψ, πξέπεη λα πιεθηξνινγήζνπκε ην θείκελν γηα αλαδήηεζε. Με ηελ
νινθιήξσζε ηεο πιεθηξνιφγεζεο (παηψληαο Enter) κεηαθέξεηαη ν θέξζνξαο ζηελ πξψηε εκθάληζε ηνπ
θεηκέλνπ πνπ αλαδεηήζακε. Με ηελ εληνιή “n” κεηαθεξφκαζηε ζηελ επφκελε εκθάληζε. Με ηελ εληνιή «Ν»
κεηαθεξφκαζηε ζηελ πξνεγνχκελε εκθάληζε. Με ην "/" ε αλαδήηεζε γίλεηαη πξνο ηα θάησ, κε ην "?" ε
αλαδήηεζε γίλεηαη πξνο ηα πίζσ.
΢ηελ «Καηάζηαζε Αλαδήηεζεο» ν vi δέρεηαη θαη ην βαζηθφ ζχλνιν θαλνληθψλ εθθξάζεσλ, γηα ην
νπνίν γίλεηαη ιφγνο ζην Κεθάιαην 6.
Σέινο, ζε απηφ ην ζεκείν λα παξαηεξήζνπκε φηη νη δπλαηφηεηεο θαη νη ιεηηνπξγίεο ηνπ vi είλαη πνιχ
πεξηζζφηεξεο απφ απηέο πνπ αλαθέξνληαη ζην παξφλ θεθάιαην. Γηα πεξηζζφηεξεο πιεξνθνξίεο αλαηξέμηε ζην
εγρεηξίδην ρξήζεο ηνπ vi.

203
Παξάξηεκα Β

Β Σν αξρείν /etc/passwd θαη ην /etc/group

Β.1 Σν αξρείν /etc/passwd


Σν αξρείν /etc/passwd είλαη έλα ηδηαίηεξα ζεκαληηθφ αξρείν ζε έλα ζχζηεκα Unix/Linux. Πεξηέρεη φια ηα
ζηνηρεία φισλ ησλ ρξεζηψλ ηνπ ζπζηήκαηνο, πξαγκαηηθψλ θαη εηθνληθψλ (βιέπε Παξάγξαθν 1.3.8). Κάζε
γξακκή ηνπ αξρείνπ αληηζηνηρεί ζε έλαλ ρξήζηε. Ζ θάζε γξακκή έρεη ηε κνξθή:

username:password:UID:GID:ΠιήξεοΌλνκα:ΚαηάινγνοHOME:πξνθαζνξηζκέλν
θέιπθνο

Γηα παξάδεηγκα κηα γξακκή απφ ην παξαπάλσ αξρείν ζα κπνξνχζε λα είλαη:

asidirop:x:1001:2001:Antonis Sidiropoulos,,,:/home/asidirop:/bin/bash

Απηή ε γξακκή νξίδεη ηνλ ρξήζηε κε username asidirop κε ηα παξαθάησ ζηνηρεία:


 Οξίδεηαη φηη γηα ηνλ ζπγθεθξηκέλν ρξήζηε ην UID (user ID) ζα είλαη ην 1001. To UID είλαη έλαο
κνλαδηθφο θσδηθφο αλά ζχζηεκα πνπ αληηζηνηρίδεηαη ζε θάζε ρξήζηε. Δζσηεξηθά ην ζχζηεκα, φηαλ
ρξεηάδεηαη λα απνζεθεχζεη θάπνπ ηελ πιεξνθνξία «πνηνο είλαη ν ρξήζηεο», δελ απνζεθεχεη ην username
αιιά ην UID. Έηζη ζην ζχζηεκα αξρείσλ, φπνπ ρξεηάδεηαη λα απνζεθεπηεί φηη, γηα παξάδεηγκα,
ηδηνθηήηεο ηνπ αξρείνπ είλαη ν asidirop, ζα απνζεθεπηεί ε πιεξνθνξία UID:1001.
 Οξίδεηαη φηη γηα ηνλ ζπγθεθξηκέλν ρξήζηε ην GID (group ID) ζα είλαη ην 2001. Απηφ ζεκαίλεη φηη ν
ρξήζηεο asidirop αλήθεη ζηελ νκάδα κε θσδηθφ 2001. Δπηπιένλ, ε ζπγθεθξηκέλε νκάδα ζα είλαη ε
πξσηεχνπζα νκάδα ηνπ. Γειαδή, αλ ν ρξήζηεο αλήθεη ζε πνιιέο νκάδεο, φηαλ ζα δεκηνπξγήζεη έλα
αξρείν, απηφ ην αξρείν ζα αλήθεη ζηελ νκάδα κε θσδηθφ 1101, εθηφο βέβαηα θαη αλ νξίζεη δηαθνξεηηθά ν
ρξήζηεο.
 ΢ην επφκελν πεδίν νξίδεηαη φηη ην πιήξεο φλνκα ηνπ ρξήζηε είλαη: «Antonis Sidiropoulos». Απηφ ην
πεδίν νλνκάδεηαη θαη GECOS field (General Electric Comprehensive Operating System), επεηδή αξρηθά
ρξεζηκνπνηνχληαλ, γηα λα θξαηάεη πιεξνθνξίεο απαξαίηεηεο, γηα λα ζηείιεη ν ρξήζηεο batch jobs ζε
ζπζηήκαηα mainframes κε ιεηηνπξγηθφ GECOS. Πιένλ δελ πθίζηαηαη απηή ε ρξήζε, αιιά απνζεθεχεηαη
ην πιήξεο φλνκα ηνπ ρξήζηε. ΢ε απηφ ην πεδίν κπνξνχλ λα πεξηιακβάλνληαη πξναηξεηηθά θαη επηπιένλ
πιεξνθνξίεο γηα ηνλ ρξήζηε, φπσο «αξηζκφο γξαθείνπ» θαη νπνηαδήπνηε άιια ζηνηρεία επηθνηλσλίαο
επηζπκεί ν ρξήζηεο.
 ΢ην επφκελν νξίδεηαη πνην είλαη ην home directory ηνπ ρξήζηε.
 Σέινο, νξίδεηαη πνην είλαη ην πξνθαζνξηζκέλν θέιπθνο. Όηαλ ν ρξήζηεο θάλεη ηε δηαδηθαζία εηζφδνπ
(login) ζην ζχζηεκα, εθφζνλ πεξάζεη κε επηηπρία ηνλ έιεγρν ησλ δηαπηζηεπηεξίσλ ηνπ (username,
password), ειέγρεηαη ην ζπγθεθξηκέλν πεδίν απφ ην ζχζηεκα θαη εθηειείηαη ην θέιπθνο πνπ νξίδεηαη εδψ.
΢ε πεξίπησζε ιαλζαζκέλεο θαηαρψξηζεο ζε απηφ ην πεδίν, ν ρξήζηεο δελ ζα κπνξεί λα θάλεη login.
Μάιηζηα, φηαλ «απελεξγνπνηνχκε» ηελ πξφζβαζε ελφο ρξήζηε, ε απελεξγνπνίεζε πξαγκαηνπνηείηαη
βάδνληαο ζε απηφ ην πεδίν σο θέιπθνο ην /bin/nologin.

Σν δεχηεξν πεδίν ζε απηφ ην αξρείν πεξηέρεη πάληα ην “x”. Αξρηθά, ζε απηφ ην πεδίν απνζεθεπφηαλ ν
θσδηθφο ηνπ ρξήζηε (password) ζε θξππηνγξαθεκέλε κνξθή. Όινη νη ρξήζηεο κπνξνχζαλ λα δνπλ ηα
πεξηερφκελα απηνχ ηνπ αξρείνπ, άξα θαη ηνπο θξππηνγξαθεκέλνπο θσδηθνχο. Μέρξη ηε δεθαεηία ηνπ 1990
πεξίπνπ, απηφ ήηαλ αξθεηά αζθαιέο, δηφηη θάπνηνο «θαθφβνπινο» ρξήζηεο κε δεδνκέλνλ ηνλ

205
θξππηνγξαθεκέλν θσδηθφ θαη ρξεζηκνπνηψληαο ηε κέζνδν “brute force” ρξεηαδφηαλ κήλεο ή θαη ρξφληα
ππνινγηζηηθήο ηζρχνο, γηα λα απνθξππηνγξαθήζεη ηνλ πξαγκαηηθφ θσδηθφ. Μεηά ην 1990 θαη κε ηε βειηίσζε
ησλ επεμεξγαζηψλ, απηφο ν ρξφλνο ζπλερψο κεησλφηαλ θαη κε έλαλ ππνινγηζηή ηχπνπ Pentium απαηηνχληαλ
κεξηθέο εκέξεο κφλν γηα λα νινθιεξσζεί ε δηαδηθαζία “brute force” θαη λα γίλεη απνθξππηνγξάθεζε ηνπ
θσδηθνχ ελφο ρξήζηε. ΢πλεπψο, γηα ιφγνπο αζθαιείαο, νη θσδηθνί ησλ ρξεζηψλ δελ ζα έπξεπε λα βξίζθνληαη
ζε απηφ ην αξρείν, αθφκε θαη αλ ήηαλ ζε θξππηνγξαθεκέλε κνξθή. Οξίζηεθε ην αξρείν/etc/shadow λα
πεξηέρεη ηνπο θξππηνγξαθεκέλνπο θσδηθνχο ησλ ρξεζηψλ. Δπηπιένλ, ην αξρείν /etc/shadow δελ είλαη
πξνζβάζηκν απφ ηνπο ρξήζηεο θαη εθαξκφδνληαη βειηησκέλνη αιγφξηζκνη θξππηνγξάθεζεο.

Β.2 Σν αξρείν /etc/group


Σν αξρείν /etc/group πεξηέρεη ηνλ θαζνξηζκφ ησλ νκάδσλ ρξεζηψλ ηνπ ζπζηήκαηνο. Ζ κνξθή ηνπ αξρείνπ
είλαη παξφκνηα κε απηήλ ηνπ/etc/passwd.

groupname:x:GID:ρξήζηεο πνπ αλήθνπλ ζηελ νκάδα

Παξάδεηγκα ην παξαθάησ:

printer:x:5001:klefturi,asidirop,kgiak,psarnik,vassik

νξίδεη φηη:
 Τπάξρεη ε νκάδα κε φλνκα printer.
 Γηα ηελ νκάδα printer αληηζηνηρεί ν κνλαδηθφο θσδηθφο GID=5001.
 Μέιε ηεο νκάδαο είλαη νη ρξήζηεο: klefturi, asidirop, kgiak, psarnik, vassik.

Β.3 Σν πεδίν GECOS


Όπσο αλαθέξζεθε παξαπάλσ, ην πεδίν GECOS πεξηέρεη ην πιήξεο φλνκα ηνπ ρξήζηε θαη επηπιένλ
πιεξνθνξίεο. Τπάξρνπλ ηξία πεδία πιένλ ηνπ νλφκαηνο ηνπ ρξήζηε, ηα νπνία δηαρσξίδνληαη κεηαμχ ηνπο κε
ηνλ ραξαθηήξα «,».

asidirop:x:1001:2001:Antonis Sidiropoulos,Room-
106,1984,asidirop@gmail.com:/home/asidirop:/bin/bash

Οη πιεξνθνξίεο απηέο κπνξνχλ λα ηξνπνπνηεζνχλ θαη απφ ηνλ ίδην ηνλ ρξήζηε ρξεζηκνπνηψληαο ηελ
εληνιή chfn. Όπσο θαίλεηαη ζηηο παξαθάησ εξσηήζεηο πνπ θάλεη ε εληνιή chfn, ην πξψην επηπιένλ πεδίν
αληηζηνηρεί ζηνλ αξηζκφ γξαθείνπ ηνπ ρξήζηε, ην δεχηεξν ζηνλ αξηζκφ ηειεθψλνπ ζην γξαθείν ηνπ ρξήζηε
θαη ην ηξίην ζηνλ αξηζκφ ηειεθψλνπ ηεο νηθίαο ηνπ ρξήζηε. ΢πλήζσο ην ηειεπηαίν απηφ πεδίν
ρξεζηκνπνηείηαη γηα λα θαηαρσξεζνχλ άιια ζηνηρεία επηθνηλσλίαο ηνπ ρξήζηε, φπσο ε δηεχζπλζε
ειεθηξνληθνχ ηαρπδξνκείνπ.

asidirop@asidirop:~/Book$ chfn
Password:
Changing the user information for asidirop
Enter the new value, or press ENTER for the default
Full Name: Antonis Sidiropoulos
Room Number [Room-106]:
Work Phone [1984]:

206
Home Phone [asidirop@gmail.com]:

Όινη νη ππφινηπνη ρξήζηεο (ηνπ ίδηνπ ζπζηήκαηνο) κπνξνχλ κε ηελ εληνιή finger λα δνπλ απηά ηα
ζηνηρεία. Παιηφηεξα, ε ππεξεζία finger ήηαλ δηαζέζηκε θαη απνκαθξπζκέλα, δειαδή θαη απφ απνκαθξπζκέλν
ζχζηεκα κπνξνχζε θάπνηνο λα βξεη πιεξνθνξίεο γηα έλαλ ζπγθεθξηκέλν ρξήζηε. Πιένλ φκσο, δελ
πξνζθέξεηαη ζηα πεξηζζφηεξα ζπζηήκαηα δηφηη κπνξεί λα ρξεζηκνπνηεζεί γηα ζπιινγή πιεξνθνξηψλ ζε
ζρέζε κε ηνπο ρξήζηεο ελφο ζπζηήκαηνο απφ «θαθφβνπινπο» απνκαθξπζκέλνπο ρξήζηεο.

root@asidirop:/home/asidirop# finger asidirop


Login: asidirop Name: Antonis Sidiropoulos
Directory: /home/asidirop Shell: /bin/bash
Office: Room-106, x1984 Home Phone:
asidirop@gmail.com
Mail forwarded to asidirop@it.teithe.gr
No mail.
No Plan.

207
Δπξεηήξην όξσλ

File System ..........................................................53


A
File System Type .................................................53
Absolute Path ...................................................... 57 Fork....................................................................149
Arithmetic mode ................................................ 191
G
ASCII................................................................... 84
atom ................................................................... 120 grep ....................................................................133
Atom .................................................................. 120 group permissions ..............................................100
Groups .................................................................31
B
H
Back Quotes .............................................. 184, 187
Back Reference.................................................. 130 HOME .................................................................67
Basic Regular Expressions ................................ 132 home directory .....................................................55
Block Devices...................................................... 30
I
Boot ................................................................... 149
Boot Loader ....................................................... 149 Init......................................................................149
Bourne Again Shell (bash) ................................ 175 Interpreter ............................................................38
Bourne Shell (sh) ............................................... 175 IO Streams .........................................158, 159, 161
BSD ..................................................................... 27 ISO-8859-1 ..........................................................85
ISO-8859-7 ..........................................................85
C
J
Character Devices................................................ 30
Charsets ............................................................... 84 JF Ossanna ...........................................................27
chmod (command) ............................................. 105
K
CMD .................................................................. 146
Co-operative Operating System........................... 26 Ken Thompson ....................................................27
C-Shell ............................................................... 175 kill (εληνιή) .......................................................151
Current Working Directory (cwd) ....................... 58 L
CWD .................................................................. 146
LANG ................................................................157
D LANGUAGE .....................................................157
Debugging ......................................................... 179 LC_ALL ..............................................................87
Dennis Ritchie ..................................................... 27 locale....................................................................87
Distributed Operating Systems ............................ 26 M
Double Quotes ................................................... 184
man (εληνιή)........................................................41
E MD McIlroy.........................................................27
echo (εληνιή) ..................................................... 183 Microsoft Power Shell .........................................90
Embedded Operating Systems ............................. 26 MS-DOS ..............................................................90
ENV ................................................................... 146 Multics .................................................................27
env (εληνιή) ...................................................... 155 Multi-tasking Operating System ..........................25
Environment Variables .............................. 154, 186 Multi-user Operating System ...............................26
Exec ................................................................... 149 O
execute permission ............................................ 100
export (εληνιή) .................................................. 155 other's permissions.............................................100
expr (εληνιή) ..................................................... 189 P
Extended Regular Expressions .......................... 132
Path ......................................................................57
F PATH .................................................115, 158, 180
File Descriptor ........................................... 158, 159 PDP-11.................................................................27
File Handler ............................................... 158, 159 PDP-7 ..................................................................27

209
Permissions .......................................................... 99 U
PID..................................................................... 146
umask .................................................................107
Pipe ...................................................................... 30
Unics ....................................................................27
Pipelining........................................................... 167
Unics (UNiplexed Information and Computing
PPID .................................................................. 146
Service) ............................................................27
Pre-emptive Operating System ............................ 26
Unix .....................................................................27
Priority ............................................................... 146
User Groups .........................................................31
Proc Directory ................................................... 152
user permissions ................................................100
Process ............................................... 145, 146, 149
Users ....................................................................31
prompt ................................................................. 29
UTF......................................................................86
ps (εληνιή) ......................................................... 146
pstree (εληνιή) ................................................... 148 V
pts ...................................................................... 160 Variables ....................................................180, 183
Q Virtual Machine ...................................................33
Virtualization .......................................................33
Quotes................................................................ 184
W
R
Wildcards .............................................................82
read (εληνιή) ..................................................... 182
Windows Command Prompt................................38
read permission.................................................. 100
write permission ................................................100
Real-time Operating Systems .............................. 26
Redirection ........................................ 158, 159, 161 Α
Regular Expression............................................ 119 άδεηα αλάγλσζεο ...............................................100
Regular Language.............................................. 119 άδεηα εγγξαθήο ..................................................100
Relative Path.................................................. 58, 61 άδεηα εθηέιεζεο .................................................100
root directory ....................................................... 54 άδεηεο άιισλ ......................................................100
S άδεηεο νκάδαο ....................................................100
Άδεηεο πξφζβαζεο ...............................................99
Script Debugging ............................................... 179
άδεηεο ρξήζηε ....................................................100
Script Execution ................................................ 178
Αθχξσζε εληνιήο ................................................47
setgid ................................................................. 101
Αλαθαηεχζπλζε .................................158, 159, 161
setuid ................................................................. 101
Αλάπνδα Δηζαγσγηθά ................................184, 187
shell ..................................................................... 38
Αλαθνξά Πίζσ ..................................................130
Shell ..................................................................... 29
Απφιπηε Γηαδξνκή ..............................................57
Shell Variables .......................................... 180, 183
Απνζθαικάησζε ...............................................179
Signal ................................................................. 150
Απνζθαικάησζε ζελαξίσλ θειχθνπο ..............179
Single Quotes ................................................... 184
Αξηζκεηηθέο Πξάμεηο .................................189, 191
Single-tasking Operating System ........................ 25
Αξρεία δεδνκέλσλ ...............................................30
Single-user Operating System ............................. 26
Αξρεία Δπηθνηλσλίαο ...........................................30
Sockets................................................................. 30
Αξρεία ΢πζθεπψλ ................................................30
Status ................................................................. 146
Αξρείν ..................................................................30
Stderr ......................................................... 158, 159
Stdin........................................................... 158, 159 Β
Stdout......................................................... 158, 159 Βαζηθέο Καλνληθέο Δθθξάζεηο ..........................132
sticky bit ............................................................ 101
String Concatenation ......................................... 186 Γ
Strings Δηζαγσγηθά............................................ 184 Γηαδξνκή .............................................................57
Swap .................................................................. 145 Γηαζσιήλσζε ..............................................30, 167
System V ............................................................. 27 Γηαηχπσζε εληνιψλ.............................................39
T Γηεξγαζία ...................................................145, 149
Γηεξκελεπηήο .......................................................38
Task ................................................................... 145 δηθαησκάησλ κεηαβνιή......................................105
Task Manager .................................................... 145 Γηπιά Δηζαγσγηθά .............................................184
Terminal .............................................................. 37
Tilde..................................................................... 67

210
Δ Ο
Δηθνληθή Μεραλή ................................................ 33 Οκάδεο ρξεζηψλ ..................................................31
Δηθνληθνπνίεζε ................................................... 33
Π
Δηζαγσγηθά .................................................. 93, 184
Δθηέιεζε ΢ελαξίσλ ........................................... 178 Πεξηζπσκέλε .......................................................67
Δθηεηακέλεο Καλνληθέο Δθθξάζεηο .................. 132 πξνηξνπή .............................................................29
Δλζσκαησκέλα Λεηηνπξγηθά ΢πζηήκαηα............ 26
Ρ
Έμνδνο Λαζψλ ........................................... 158, 159
Δξγαζία ............................................................. 145 Ρνέο Δηζφδνπ-Δμφδνπ ........................158, 159, 161
Κ ΢
Καλνληθή Γιψζζα ............................................. 119 ΢ήκα...................................................................150
Καλνληθή Δίζνδνο ..................................... 158, 159 ΢πκβνινζεηξέο Δηζαγσγηθά...............................184
Καλνληθή Έθθξαζε ........................................... 119 ζχλδεζκνο ............................................................30
Καλνληθή Έμνδνο ...................................... 158, 159 ΢πλέλσζε ΢πκβνινζεηξψλ ................................186
Καηαλεκεκέλα Λεηηνπξγηθά ΢πζηήκαηα ............. 26 ΢χλνια θαλνληθψλ εθθξάζεσλ..........................132
θέιπθνο ......................................................... 29, 38 ΢χλνια Υαξαθηήξσλ ...........................................84
Κέιπθνο............................................................... 29 ΢χζηεκα Αξρείσλ ................................................53
θιάζε ραξαθηήξσλ............................................ 122 ΢ρεηηθή Γηαδξνκή ..........................................58, 61
Κπκαηνεηδήο Γξακκή .......................................... 67 Σ
Λ ηειεζηήο αθνινπζίαο .........................................124
Λεηηνπξγηθά ΢πζηήκαηα Πξαγκαηηθνχ Υξφλνπ.. 26 ηειεζηήο ελαιιαγήο ...........................................125
Λεηηνπξγηθφ ΢χζηεκα.......................................... 25 Σειεζηήο Οκαδνπνίεζεο ...................................129
Λεηηνπξγηθφ ΢χζηεκα Μνλήο Δξγαζίαο ............. 25 Σεξκαηηθφ ............................................................37
Λεηηνπξγηθφ ΢χζηεκα Μνλνχ Υξήζηε................ 26 Σνπηθέο Ρπζκίζεηο Γηεξγαζίαο...........................157
Λεηηνπξγηθφ ΢χζηεκα Πνιιαπιψλ Δξγαζηψλ .... 25 Σξέρσλ Καηάινγνο Δξγαζίαο ..............................58
Λεηηνπξγηθφ ΢χζηεκα Πνιιαπιψλ Υξεζηψλ ..... 26 Σχπνο ΢πζηήκαηνο Αξρείσλ ................................53
Μ Φ
κάζθα δηθαησκάησλ .......................................... 107 Φάθεινο ...............................................................30
Μεηαβιεηέο ............................................... 180, 183 Χ
Μεηαβιεηέο Κειχθνπο .............................. 180, 183
Μεηαβιεηέο Πεξηβάιινληνο...................... 154, 186 Υαξαθηήξεο Μπαιαληέξ .....................................82
Μεηαβιεηή Πεξηβάιινληνο LANG ................... 157 Υξήζηεο ...............................................................31
Μεηαβιεηή Πεξηβάιινληνο LANGUAGE ........ 157
Μεηαβιεηή Πεξηβάιινληνο PATH ................... 158
Μνλά Δηζαγσγηθά ............................................ 184

211

Вам также может понравиться