Εισαγωγή στα λειτουργικά συστήματα ii

211

description

Εντολές Κελύφους

Transcript of Εισαγωγή στα λειτουργικά συστήματα ii

Page 1: Εισαγωγή στα λειτουργικά συστήματα ii
Page 2: Εισαγωγή στα λειτουργικά συστήματα ii

ΑΝΣΧΝΖ ΗΓΖΡΟΠΟΤΛΟ Καζεγεηήο Δθαξκνγψλ

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

ςζηήμαηα

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

Δξγαζηεξηαθφο Οδεγφο

Page 3: Εισαγωγή στα λειτουργικά συστήματα ii

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

ςγγπαθή

Αληψλεο ηδεξφπνπινο

Κπιηικόρ αναγνώζηηρ

Μελάο Γαζπγέλεο

ςνηελεζηέρ έκδοζηρ

Γισζζηθή Δπηκέιεηα: Φψηεο Υαηδφγινπ

Γξαθηζηηθή Δπηκέιεηα: Αληψλεο ηδεξφπνπινο

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

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

Page 4: Εισαγωγή στα λειτουργικά συστήματα ii
Page 5: Εισαγωγή στα λειτουργικά συστήματα ii

5

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

Πίλαθαο Πεξηερνκέλσλ ........................................................................................................................ 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

Page 6: Εισαγωγή στα λειτουργικά συστήματα ii

6

Κεθάιαην 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

Page 7: Εισαγωγή στα λειτουργικά συστήματα ii

7

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

Page 8: Εισαγωγή στα λειτουργικά συστήματα ii

8

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

Page 9: Εισαγωγή στα λειτουργικά συστήματα ii

9

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

Page 10: Εισαγωγή στα λειτουργικά συστήματα ii

10

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

ρήκα 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

Page 11: Εισαγωγή στα λειτουργικά συστήματα ii

11

ρήκα 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

Page 12: Εισαγωγή στα λειτουργικά συστήματα ii

12

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

Πίλαθαο 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

Page 13: Εισαγωγή στα λειτουργικά συστήματα ii

13

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

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

ΚΜΔ Κεληξηθή Μνλάδα Δπεμεξγαζίαο

Λ Λεηηνπξγηθφ χζηεκα

Page 14: Εισαγωγή στα λειτουργικά συστήματα ii

14

Page 15: Εισαγωγή στα λειτουργικά συστήματα ii

15

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

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 Τπεξρξήζηεο

Page 16: Εισαγωγή στα λειτουργικά συστήματα ii

16

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

Page 17: Εισαγωγή στα λειτουργικά συστήματα ii

17

πζθεπή Δηζφδνπ-Δμφδνπ Input-Output Device

ρεηηθή Γηαδξνκή Relative Path

Σφκνο Partition

Σακπιέηα Tablet

Σξέρσλ Καηάινγνο Δξγαζίαο Current Working Directory

Τπεξρξήζηεο Superuser

Τπεξεζία Service

Υξνλνζθξαγίδα Timestamp

Page 18: Εισαγωγή στα λειτουργικά συστήματα ii
Page 19: Εισαγωγή στα λειτουργικά συστήματα ii

19

Πξόινγνο

Σν παξφλ βηβιίν γξάθηεθε γηα λα απνηειέζεη θπξίσο έλαλ εξγαζηεξηαθφ νδεγφ γηα ην κάζεκα «Δηζαγσγή

ζηα Λεηηνπξγηθά πζηήκαηα», φπσο απηφ δηδάζθεηαη ζην Σκήκα Μεραληθψλ Πιεξνθνξηθήο ηνπ

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

ελδηαθέξεηαη λα κάζεη ηα βαζηθά ζηνηρεία ηνπ Λεηηνπξγηθνχ πζηήκαηνο UNIX ή Linux.

Αλ θαη ε ζπγγξαθή ηνπ μεθίλεζε αξθεηά ρξφληα πξηλ κε ηε κνξθή απιψλ ζεκεηψζεσλ θαη

δηαθαλεηψλ ζην κάζεκα «Δηζαγσγή ζηα Λεηηνπξγηθά πζηήκαηα», νινθιεξψλεηαη ηψξα ζηα πιαίζηα ηεο

Γξάζεο «Διιεληθά Αθαδεκατθά Ζιεθηξνληθά πγγξάκκαηα θαη Βνεζήκαηα» (Δ.Α.Ζ..Β.). Δπεηδή ζθνπφο

ηεο Γξάζεο είλαη ε εηζαγσγή ηνπ ειεθηξνληθνχ, δηαδξαζηηθνχ, πνιπκεζηθνχ βηβιίνπ ζηελ Αλψηαηε

Δθπαίδεπζε, ην παξφλ εγρεηξίδην δηακνξθψζεθε κε ηέηνηνλ ηξφπν, ψζηε λα εμππεξεηεί ηνλ παξαπάλσ ζθνπφ.

πλεπψο, πξνηείλεηαη ζηνλ αλαγλψζηε λα ρξεζηκνπνηεί ηελ ειεθηξνληθή έθδνζε ε νπνία αμηνπνηεί πιήζνο

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

Page 20: Εισαγωγή στα λειτουργικά συστήματα ii
Page 21: Εισαγωγή στα λειτουργικά συστήματα ii

21

Δπραξηζηίεο

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

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

επραξηζηήζσ ηνλ Μελά Γαζπγέλε ν νπνίνο σο θξηηηθφο αλαγλψζηεο ζπλέβαιε ηα κέγηζηα ζηελ νινθιήξσζε

ηεο ζπγγξαθήο κε εχζηνρεο παξαηεξήζεηο θαη ζρφιηα. Δπίζεο, ηε Βαζηιάληα Κνπκπή ε νπνία ζπκκεηείρε

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

Θεξκέο επραξηζηίεο ζηνλ Φψηε Υαηδφγινπ γηα ηε γισζζηθή επεμεξγαζία.

Αθφκε, ληψζσ ηελ αλάγθε λα επραξηζηήζσ φινπο φζνη ζπκκεηείραλ ηα ηειεπηαία ρξφληα ζηε

δηδαζθαιία ηνπ εξγαζηεξηαθνχ κέξνπο ηνπ καζήκαηνο «Δηζαγσγή ζηα Λεηηνπξγηθά πζηήκαηα», νη νπνίνη

ζπλέβαιαλ ζηε δηακφξθσζε ηεο χιεο θαη ηνπ πιηθνχ γηα ην κάζεκα: Νίθν Φαξξά, Γεκήηξε Κιεθηνχξε,

Βαζηιάληα Κνπκπή, Κψζηα Γηαθνπζηίδε, Θαλάζε Μάξγαξε, Κπξηαθή Κσλζηαληηλίδνπ, ηέθαλν

Καηζαβνχλε θαη Μηράιε αββφπνπιν.

Δπηπιένλ, αλαθεξφκελνο ζηηο επραξηζηίεο, δελ ζα κπνξνχζα λα κελ αλαγλσξίζσ φηη ρσξίο ηε Γξάζε

«Διιεληθά Αθαδεκατθά Ζιεθηξνληθά πγγξάκκαηα θαη Βνεζήκαηα» (Δ.Α.Ζ..Β., ε νπνία πινπνηείηαη απφ

ηνλ .Δ.Α.Β. θαη ην Δ.Μ.Π.), δελ ζα είρα ηε δπλαηφηεηα λα νινθιεξψζσ θαη λα εθδψζσ ην παξφλ βηβιίν.

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

θαη ηελ θφξε κνπ Νηθνιία, απφ ηηο νπνίεο ζηέξεζα πνιιέο νηθνγελεηαθέο ζηηγκέο, πξνθεηκέλνπ λα

νινθιεξσζεί ην παξφλ ζχγγξακκα.

Page 22: Εισαγωγή στα λειτουργικά συστήματα ii
Page 23: Εισαγωγή στα λειτουργικά συστήματα ii

23

Δηζαγσγή

Σν παξφλ βηβιίν γξάθεθε γηα λα απνηειέζεη θπξίσο έλαλ εξγαζηεξηαθφ νδεγφ γηα ην κάζεκα «Δηζαγσγή ζηα

Λεηηνπξγηθά πζηήκαηα», φπσο απηφ δηδάζθεηαη ζην Σκήκα Μεραληθψλ Πιεξνθνξηθήο ηνπ Αιεμάλδξεηνπ

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

βαζηθά ζηνηρεία ηνπ Λεηηνπξγηθνχ πζηήκαηνο UNIX ή Linux.

Σν κάζεκα «Δηζαγσγή ζηα Λεηηνπξγηθά πζηήκαηα» είλαη εηζαγσγηθφ ζην γλσζηηθφ αληηθείκελν ησλ

Λεηηνπξγηθψλ πζηεκάησλ θαη έρεη σο βαζηθφ ζηφρν ηελ θαηαλφεζε ησλ γεληθψλ αξρψλ ησλ Λεηηνπξγηθψλ

πζηεκάησλ κέζσ ηεο ρξήζεο θαη πξνγξακκαηηζκνχ ζην UNIX. ηφρνο ηνπ καζήκαηνο είλαη νη θνηηεηέο λα

κειεηήζνπλ θαη λα γλσξίζνπλ έλα Λεηηνπξγηθφ χζηεκα πνπ εμαξρήο δεκηνπξγήζεθε γηα πξνγξακκαηηζηέο,

θαζψο θαη λα δηαθξίλνπλ ηε θηινζνθία πνπ θξχβεη έλα Λεηηνπξγηθφ χζηεκα «πίζσ» απφ ηα γξαθηθά

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

θαζψο θαη πψο απηφ αιιειεπηδξά κε ην Λεηηνπξγηθφ χζηεκα. θνπφο ηνπ καζήκαηνο είλαη νη θνηηεηέο λα

θαηαλνήζνπλ πψο ιεηηνπξγεί έλα «Λεηηνπξγηθφ χζηεκα» θαη πψο κπνξνχλ λα ην αμηνπνηήζνπλ. Καηά ηε

δηάξθεηα ηνπ καζήκαηνο νη θνηηεηέο έρνπλ ηε δπλαηφηεηα λα γλσξίζνπλ ηα ηζρπξά «φπια» πνπ έρεη έλαο

πξνγξακκαηηζηήο ρξεζηκνπνηψληαο έλα Λεηηνπξγηθφ χζηεκα ζε επίπεδν θειχθνπο θαη λα γλσξίζνπλ ηε

θηινζνθία ηνπ «θάλσ πεξίπινθεο ελέξγεηεο ζπλδπάδνληαο απιέο απηφλνκεο εληνιέο πνπ επηθνηλσλνχλ

κεηαμχ ηνπο».

Με ηε κειέηε ηνπ παξφληνο εξγαζηεξηαθνχ νδεγνχ θαη ηελ επηηπρή νινθιήξσζε ηνπ καζήκαηνο, ν

θνηηεηήο ζα πξέπεη:

λα θαηαλνήζεη ηηο βαζηθέο αξρέο ηνπ Λεηηνπξγηθνχ πζηήκαηνο UNIX θαη ηνπ ηξφπνπ ιεηηνπξγίαο

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

δηεξγαζηψλ θαη ππξήλα.

λα θαηαλνήζεη ηε ζρέζε Δθαξκνγέο-Κέιπθνο-Ππξήλαο,

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

πεξηβάιινληνο

λα θαηαλνήζεη ηε ρξήζε ησλ εηζαγσγηθψλ ("quotes"),

λα κπνξεί λα εθαξκφζεη βαζηθέο εληνιέο δηαρείξηζεο θαη επεμεξγαζίαο αξρείσλ,

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

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

λα θαηαλνήζεη ηελ έλλνηα ησλ δηεξγαζηψλ, ηηο ηδηφηεηέο ηνπο θαη ηα ζήκαηα (signals) θαη λα κπνξεί

λα ηα ρεηξηζηεί επνηθνδνκεηηθά,

λα γλσξίζεη ηνπο ηξφπνπο επηθνηλσλίαο ησλ δηεξγαζηψλ θαη λα κπνξεί λα ζπλζέζεη πεξίπινθεο

εληνιέο κε ζπλδπαζκφ απιψλ εληνιψλ,

λα θαηαλνήζεη ηε θηινζνθία ησλ θίιηξσλ θαη λα κπνξεί λα δεκηνπξγήζεη θίιηξα ή λα ζπλδπάζεη

επνηθνδνκεηηθά ππάξρνληα θίιηξα,

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

Δθθξάζεηο,

λα θαηαλνήζεη ηνλ ηξφπν ρεηξηζκνχ ησλ ζελαξίσλ θαη ησλ γισζζψλ ηχπνπ δηεξκελεπηή (interpreter)

απφ ην Λεηηνπξγηθφ χζηεκα,

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

εληνιψλ θαη ηηο δνκέο επαλάιεςεο.

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

εηζαγσγή ζην UNIX: θαηαλφεζε ηνπ Λεηηνπξγηθνχ πζηήκαηνο UNIX, Πεξηγξαθή ηεο θηινζνθίαο

θαη ηνπ ηξφπνπ ιεηηνπξγίαο ηνπ Λ.., Αξρεία, ρξήζηεο, νκάδεο ρξεζηψλ, δηεξγαζίεο, ππξήλαο,

εθαξκνγέο-θέιπθνο-ππξήλαο: εηζαγσγή ζηε ρξήζε ηνπ θειχθνπο, ρξήζε βαζηθψλ εληνιψλ,

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

επεμεξγαζίαο αξρείσλ,

ζχζηεκα αξρείσλ: πξφζβαζε ζην ζχζηεκα αξρείσλ, δηαδξνκέο, άδεηεο πξφζβαζεο, δηαρείξηζε

αξρείσλ, ζχλδεζκνη, βαζηθνί ηχπνη ζπζηεκάησλ αξρείσλ ηνπ UNIX θαη άιισλ Λεηηνπξγηθψλ

πζηεκάησλ (fat, ntfs, ext, ...), ζπζθεπέο ζην UNIX,

Page 24: Εισαγωγή στα λειτουργικά συστήματα ii

24

θέιπθνο θαη αξρεία: ρξήζε ραξαθηήξσλ κπαιαληέξ,

δηεξγαζίεο: δηαρείξηζε δηεξγαζηψλ, ηδηφηεηεο, ζήκαηα, ην ζχζηεκα /proc,

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

Καλνληθέο Δθθξάζεηο θαη ε ρξήζε ηνπο κέζα απφ εξγαιεία ηνπ UNIX (grep, sed),

πξνγξακκαηηζκφο ζην θέιπθνο: δηεξκελεπηέο εληνιψλ ζην UNIX, έιεγρνο εθηέιεζεο εληνιψλ,

ηειεζηέο εληνιψλ, δνκέο επαλάιεςεο.

Με ηελ επηηπρή νινθιήξσζε ηνπ καζήκαηνο ν θνηηεηήο έρεη απνθηήζεη ηηο παξαθάησ γλψζεηο θαη

δεμηφηεηεο:

Μέζα απφ ηηο εξγαζηεξηαθέο αζθήζεηο έρεη ηελ επρέξεηα λα ρξεζηκνπνηήζεη επνηθνδνκεηηθά έλα

Λεηηνπξγηθφ χζηεκα UNIX θαη κπνξεί λα πξνγξακκαηίδεη ρξεζηκνπνηψληαο γλσζηά εξγαιεία πνπ

ηνπ δίλνληαη απφ ην Λεηηνπξγηθφ χζηεκα.

Καηαλνεί ηηο βαζηθέο αξρέο ιεηηνπξγίαο ελφο Λεηηνπξγηθνχ πζηήκαηνο, ψζηε λα εκβαζχλεη

παξαθάησ ζην κάζεκα «Αξρέο ζρεδίαζεο Λεηηνπξγηθψλ πζηεκάησλ».

Γηεπξχλεη ηηο γλψζεηο ηνπ θαη ηηο ηθαλφηεηέο ηνπ ζε ζρέζε κε ηνπο ηξφπνπο ρξήζεο ππνινγηζηψλ

πέξα απφ ηελ θιαζηθή ρξήζε κέζσ ησλ παξαζπξηθψλ πεξηβαιιφλησλ.

Page 25: Εισαγωγή στα λειτουργικά συστήματα ii

25

Κεθάιαην 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), ηφηε

νλνκάδεηαη Πνιιαπιώλ Δξγαζηώλ. Δάλ επηηξέπεηαη ε εθηέιεζε κφλν ελφο πξνγξάκκαηνο θάζε θνξά, ηφηε

νλνκάδεηαη Μνλήο Δξγαζίαο. Δδψ, πξέπεη λα επηζεκάλνπκε πσο γηα ηελ παξάιιειε εθηέιεζε πξνγξακκάησλ

Page 26: Εισαγωγή στα λειτουργικά συστήματα ii

26

δελ είλαη απαξαίηεην λα δηαζέηεη ην πιηθφ ηνπ ππνινγηζηή πνιινχο επεμεξγαζηέο, νχηε πνιινχο ππξήλεο

επεμεξγαζηψλ. Σα Πνιιαπιώλ Δξγαζηώλ Λεηηνπξγηθά πζηήκαηα θαηαθέξλνπλ λα εθηεινχλ ςεπδν-

παξάιιεια πνιιέο δηεξγαζίεο (ή εξγαζίεο) ζε έλαλ κφλν επεμεξγαζηή. Απηφ επηηπγράλεηαη κε ηελ ελαιιαγή

ησλ δηεξγαζηψλ ζηνλ επεμεξγαζηή - θάζε ιίγν ρξφλν παχεη ε εθηέιεζε κηαο δηεξγαζίαο θαη εθηειείηαη ε

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

αληίζηνηρεο θαηεγνξίεο Λεηηνπξγηθψλ πζηεκάησλ:

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), επεηδή ιεηηνπξγνχλ

Page 27: Εισαγωγή στα λειτουργικά συστήματα ii

27

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

θαηεγνξίαο είλαη:

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

Page 28: Εισαγωγή στα λειτουργικά συστήματα ii

28

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 θ.ά. Όιεο απηέο νη δηαλνκέο δηαθέξνπλ κεηαμχ ηνπο κφλν ζηηο αξρηθέο

ξπζκίζεηο θαη ζηα αξρηθά πξνγξάκκαηα πνπ εγθαζίζηαληαη απηνκάησο. Έρνληαο θάλεη εγθαηάζηαζε έλα

Page 29: Εισαγωγή στα λειτουργικά συστήματα ii

29

“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.

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

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

Page 30: Εισαγωγή στα λειτουργικά συστήματα ii

30

ηελ νπζία, ινηπφλ, ην θέιπθνο είλαη έλα πξφγξακκα πνπ πεξηκέλεη ηνλ ρξήζηε λα πιεθηξνινγήζεη

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

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

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): Πξφθεηηαη γηα αξρεία πνπ αληηζηνηρνχλ ζε έλα θαλάιη επηθνηλσλίαο

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

δηαζσιήλσζεο, πάληα ην έλα ζηέιλεη δεδνκέλα θαη ην δεχηεξν δηαβάδεη δεδνκέλα.

Page 31: Εισαγωγή στα λειτουργικά συστήματα ii

31

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 ηκήκα Μεραληθψλ Πιεξνθνξηθήο, Αιεμάλδξεηνπ ΑΣΔΗ Θεζζαινλίθεο

Page 32: Εισαγωγή στα λειτουργικά συστήματα ii

32

Αλ δψζνπκε ηηο παξαθάησ εληνιέο ζηνλ 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.

Page 33: Εισαγωγή στα λειτουργικά συστήματα ii

33

ρήκα 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. Ζ εηθνληθή κεραλή ζα αλαγλσξίζεη απηφ ην κεγάιν αξρείν σο θπζηθφ δίζθν θαη ζα γξάθεη ηα

δεδνκέλα ηεο εθεί. Πξνθαλψο, γηα λα επηιέμνπκε απηή ηε ιχζε ζα πξέπεη ν ππνινγηζηήο πνπ ζα

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

κλήκε (πεξίπνπ δηπιάζηα απ’ φζε απαηηείηαη γηα ηελ ρξήζε ελφο Λεηηνπξγηθνχ πζηήκαηνο), κεγάιν

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

κπνξνχκε ζε απηφλ λα εγθαηαζηήζνπκε νπνηνδήπνηε Λεηηνπξγηθφ χζηεκα επηζπκνχκε, ρσξίο απηφ λα

Page 34: Εισαγωγή στα λειτουργικά συστήματα ii

34

επεξεάδεη ην θπξίσο Λεηηνπξγηθφ χζηεκα πνπ εθηειείηαη ζηνλ ππνινγηζηή καο. Δπίζεο, κπνξνχκε λα

δεκηνπξγήζνπκε πνιιέο εηθνληθέο κεραλέο γηα πεηξακαηηζκφ (ρήκα 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). Έηζη ζηελ επφκελε επαλεθθίλεζε ηνπ ππνινγηζηή ζα

επαλέιζνπκε ζηελ αξρηθή θαηάζηαζε. Βέβαηα, απηφ πνπ ηψξα πεξηγξάθεηαη σο κεηνλέθηεκα, θάπνηνη

κπνξεί λα ην ζεσξνχλ πιενλέθηεκα (π.ρ. γηα ηελ πεξίπησζε θνηλφρξεζησλ ππνινγηζηψλ) ή κπνξεί λα

αιιάμεη ζηα επφκελα ιίγα ρξφληα ή κήλεο. Θπκίδνπκε φηη νη εμειίμεηο ζην ρψξν ησλ ππνινγηζηψλ θαη ηεο

ηερλνινγίαο είλαη ξαγδαίεο.

Page 35: Εισαγωγή στα λειτουργικά συστήματα ii

35

Αθφκε κηα επηινγή, είλαη ε θαλνληθή εγθαηάζηαζε ελφο ζπζηήκαηνο 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 ]

Page 36: Εισαγωγή στα λειτουργικά συστήματα ii
Page 37: Εισαγωγή στα λειτουργικά συστήματα ii

37

Κεθάιαην 2

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

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

ην ρήκα 2.1 θαίλεηαη θαη πάιη ε ηεξαξρία ζε έλα ζχζηεκα UNIX. Ξεθηλψληαο απφ θάησ πξνο ηα επάλσ,

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

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

Οη ρξήζηεο ρξεζηκνπνηνχλ εθαξκνγέο νη νπνίεο πξνσζνχλ ηηο ιεηηνπξγίεο ηνπο πξνο ηα θάησ. Σν θέιπθνο

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

πξνσζεί ηηο εληνιέο ησλ ρξεζηψλ πξνο ηνλ ππξήλα. Οη εθαξκνγέο πνπ κπνξνχλ λα ρξεζηκνπνηήζνπλ νη

ρξήζηεο κπνξεί λα είλαη είηε γξαθηθέο, δειαδή λα ιεηηνπξγνχλ κέζα απφ γξαθηθφ πεξηβάιινλ (πρ: firefox,

chrome, openOffice θηι.), είηε λα εθηεινχληαη κέζα απφ έλα ηεξκαηηθφ. Σν θέιπθνο είλαη κηα εθαξκνγή

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

Hardware

Kernel

Shells

Applications

Users

ρήκα 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].

Page 38: Εισαγωγή στα λειτουργικά συστήματα ii

38

ρήκα 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

Page 39: Εισαγωγή στα λειτουργικά συστήματα ii

39

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

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

ρξεζηψλ. Απηφ γίλεηαη κε ηελ παξαθάησ αθνινπζία ιεηηνπξγηψλ:

1. Δκθάληζε ηεο πξνηξνπήο (prompt). Δίλαη έλδεημε αλακνλήο ηνπ Λ.. γηα ηελ αλακνλή εηζαγσγήο

εληνιήο. Ζ πξνηξνπή ζπλήζσο είλαη ν ραξαθηήξαο "$", ή κπνξεί λα πεξηέρεη θαη άιιεο πιεξνθνξίεο φπσο

"asidirop@aetos:~$". ην παξάδεηγκα απηφ, ζπκπεξηιακβάλεηαη ζηελ πξνηξνπή ε πιεξνθνξία ηνπ

νλφκαηνο ηξέρνληνο ρξήζηε (asidirop), ηνπ νλφκαηνο ηνπ ππνινγηζηή (aetos) θαη ηνπ ηξέρνληνο θαθέινπ

εξγαζίαο (~) .

2. Λήςε θαη γξακκαηηθή αλάιπζε ηεο ζχληαμεο ηεο εληνιήο,

3. Δθηέιεζε ηεο δηαδηθαζίαο εηζφδνπ θαη κεηαζρεκαηηζκφο ηεο εληνιήο,

4. Αξρηθνπνίεζε ησλ απαηηνχκελσλ ιεηηνπξγηψλ,

5. Αλακνλή γηα νινθιήξσζε ησλ ιεηηνπξγηψλ πνπ είλαη ζε εμέιημε (π.ρ. αλακνλή γηα ηνλ ηεξκαηηζκφ ηνπ

πξνγξάκκαηνο πνπ εθηειείηαη, θαζψο φζν εθηειείηαη έλα πξφγξακκα, «δεζκεχεη» ην ηεξκαηηθφ, δειαδή

δηαβάδεη απφ ην πιεθηξνιφγην θαη ηππψλεη ζηελ νζφλε ηνπ),

6. Δπαλαθνξά ζην βήκα 1.

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

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

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

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

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

είλαη αληίζηνηρα κε ηα νξίζκαηα γηα ηηο ζπλαξηήζεηο (κεζφδνπο), δειαδή δίλνπλ επηπιένλ νδεγίεο ζηελ

εληνιή γηα ην πψο ζα ιεηηνπξγήζεη. ε κηα εληνιή κπνξεί λα ππάξρνπλ ππνρξεσηηθά θαη πξναηξεηηθά

νξίζκαηα.

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

έρνπκε νξίζκαηα πνπ αληηζηνηρνχλ ζε νλφκαηα αξρείσλ θαη νξίζκαηα πνπ αληηζηνηρνχλ ζε ελεξγνπνίεζε

ιεηηνπξγηψλ. Πνιιέο θνξέο ηα ηειεπηαία νλνκάδνληαη ζεκαίεο (flags).

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

Page 40: Εισαγωγή στα λειτουργικά συστήματα ii

40

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.

Page 41: Εισαγωγή στα λειτουργικά συστήματα ii

41

ρήκα 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".

Page 42: Εισαγωγή στα λειτουργικά συστήματα ii

42

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

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

ΝΑΜΔ: φλνκα θαη ζχληνκε πεξηγξαθή ηεο εληνιήο,

SYNOPSIS: ε ζχληαμε ηεο εληνιήο,

DESCRIPTION: αλαιπηηθά ηα νξίζκαηα πνπ κπνξεί λα δερζεί ε εληνιή,

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

AUTHOR: Οη δεκηνπξγνί ηεο εληνιήο θαη ηνπ εγρεηξηδίνπ ρξήζεο,

COPYRIGHT: κε βάζε πνηεο άδεηεο ρξήζεο κπνξεί λα ρξεζηκνπνηεζεί ε εληνιή,

SEE ALSO: άιια εγρεηξίδηα ζηα νπνία κπνξνχλ λα βξεζνχλ ζρεηηθέο πιεξνθνξίεο.

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

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

"SYNOPSIS". ε απηφ ην ηκήκα γηα ηελ εληνιή cat βιέπνπκε ηελ πιεξνθνξία:

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

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

OPTION: καο δίλεη ηελ πιεξνθνξία φηη ζε απηφ ην ζεκείν πξέπεη λα κπνπλ ηα νξίζκαηα ηχπνπ "ζεκαίαο"

("options" ή "flags").

[] : δειψλνπλ πξναηξεηηθφ φξηζκα (δειαδή ηα [OPTIONS] ζηελ πξνεγνχκελε πεξίπησζε είλαη

πξναηξεηηθά.

... : δειψλνπλ φηη κπνξνχκε λα δψζνπκε πνιιά νξίζκαηα ηνπ πξνεγνχκελνπ ηχπνπ.

[FILE]... : ζε απηφ ην ζεκείν κπνξνχκε λα δψζνπκε νλφκαηα αξρείσλ. ηε ζπγθεθξηκέλε πεξίπησζε

πνιιά ή θαη θαλέλα εθφζνλ είλαη πξναηξεηηθφ φξηζκα.

Υξεζηκνπνηψληαο ηηο παξαπάλσ πιεξνθνξίεο θαη βιέπνληαο ζην ηκήκα "DESCRIPTION" πνηεο είλαη

νη δπλαηέο ζεκαίεο θαη ηη ζεκαίλεη ε θαζεκία, απνθηνχκε ζπλνιηθή εηθφλα γηα ηε ρξήζε ηεο εληνιήο. Έηζη γηα

παξάδεηγκα ε εθηέιεζε ηεο cat κε ηα παξαθάησ νξίζκαηα:

Page 43: Εισαγωγή στα λειτουργικά συστήματα ii

43

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 ην νπνίν

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

Page 44: Εισαγωγή στα λειτουργικά συστήματα ii

44

ζεκαίαο θαη ζεκαηνδνηνχληαη κε έλαλ κφλν ραξαθηήξα (πρ. 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 είλαη απνιχησο ηζνδχλακεο σο πξνο ην απνηέιεζκα. Δδψ αμίδεη

λα επηζεκάλνπκε πσο ζπλήζσο ηα νξίζκαηα ηχπνπ ζεκαίαο, φηαλ αθνινπζνχλ κηα παχια, ηφηε είλαη

Page 45: Εισαγωγή στα λειτουργικά συστήματα ii

45

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

εξκελεχνληαη σο κηα ιέμε.

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 δελ κπνξεί

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

Page 46: Εισαγωγή στα λειτουργικά συστήματα ii

46

ην φξηζκα μεθηλάεη κε κηα παχια, ρσξίδεη ηελ ππφινηπε ζπκβνινζεηξά ζε ραξαθηήξεο "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 βιέπνπκε έλα παξάδεηγκα, φπνπ ζε κηα γξακκή έρνπλ δηαηππσζεί δπν εληνιέο.

Γηαρσξηζηήο είλαη ην ειιεληθφ εξσηεκαηηθφ (;). Πξηλ θαη κεηά ην εξσηεκαηηθφ κπνξνχλ λα ππάξρνπλ θελά

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

θέιπθνο εξκελεχεη ην εξσηεκαηηθφ κε κεγαιχηεξε πξνηεξαηφηεηα απφ ηνπο ππφινηπνπο εηδηθνχο ραξαθηήξεο

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

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

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

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

κηα γξακκή κπνξνχλ λα ζπλδπαζηνχλ πεξηζζφηεξεο απφ δπν εληνιέο.

Page 47: Εισαγωγή στα λειτουργικά συστήματα ii

47

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]:

Page 48: Εισαγωγή στα λειτουργικά συστήματα ii

48

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 ζαο είλαη ηεο κνξθήο:

[email protected]

Page 49: Εισαγωγή στα λειτουργικά συστήματα ii

49

όπνπ ην "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 [email protected]

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

ηελ ηαπηφηεηα ηνπ ππνινγηζηή πιεθηξνινγψληαο "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: Απνκαθξπζκέλε ζύλδεζε.

Page 50: Εισαγωγή στα λειτουργικά συστήματα ii

50

Άζθεζε 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 εκθαλίδεη ηα πεξηερόκελα (αξρεία θαη ππνθαηαιόγνπο) ηνπ θαηαιόγνπ (θαθέινπ) ηνλ

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

ιεπηνκέξεηεο γη’ απηό).

Page 51: Εισαγωγή στα λειτουργικά συστήματα ii

51

Με ηα νξίζκαηα ζε κηα εληνιή δίλνπκε νδεγίεο ζηελ εληνιή πώο λα ζπκπεξηθεξζεί. Γηα ηελ 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.

Page 52: Εισαγωγή στα λειτουργικά συστήματα ii
Page 53: Εισαγωγή στα λειτουργικά συστήματα ii

53

Κεθάιαην 3

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

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

ε έλα ζχζηεκα ππνινγηζηή, ζπλήζσο ην ζχζηεκα αξρείσλ πνπ ππνζηεξίδεηαη επηηξέπεη ηε δεκηνπξγία κηαο

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

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

Δπηπιένλ, δε ζα κπνξνχζε λα γίλεη νξγάλσζε θαη νκαδνπνίεζε απηψλ. Έηζη, έλα ζχζηεκα αξρείσλ ηνπ

Λεηηνπξγηθνχ πζηήκαηνο Microsoft Windows κπνξεί λα αλαπαξαζηαζεί φπσο ζην ρήκα 3.1.

My Computer

C:

Program Files

Temp

Test1.txt File2.txt

Windows Users

asidirop dimitris

D:

Data Backups

E: (CD-ROM)X: (Network

drive)

ρήκα 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]

Page 54: Εισαγωγή στα λειτουργικά συστήματα ii

54

Πνιιέο θνξέο γηα ιόγνπο ζπληνκίαο, αληί ηνπ όξνπ «Σύπνο πζηήκαηνο Αξρείσλ», ρξεζηκνπνηείηαη

ν όξνο «ύζηεκα Αξρείσλ». Η δεκηνπξγία ηνπ πζηήκαηνο Αξρείσλ γίλεηαη κε ηε δηαδηθαζία ηεο

«δηακόξθσζεο» (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, εθφζνλ δελ έρεη νξηζηεί

δηαθνξεηηθά.

Page 55: Εισαγωγή στα λειτουργικά συστήματα ii

55

/

home

asidirop

Test1.txt File2.txt

dimitris

Test1.txt File2.txt

tmp boot

vmlinuz

bin SPARE

Data

local Remote_files

…… ……

Backups

media

MOVIE (DVD)

VIDEO_TS

AUDIO_TS

MOVIΕ_Π(DVD2)

VIDEO_TS

AUDIO_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

students

x1112

aanesiad abacharo abliouka

Test1.txt File2.txt

Κ.τ.λ.

x1011 κ.τ.λ.

staff

ektaktoi

asidirop

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

File2.txt

vassik Κ.τ.λ.

It

dad klefturi κ.τ.λ.

bin tmp

Test1.txt File2.txt

Home directory του asidirop

Home directory του vassik

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

Page 56: Εισαγωγή στα λειτουργικά συστήματα ii

56

Ζ δεκηνπξγία θαη ρξήζε ηεο κεζφδνπ κε ηα 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), είλαη εχθνιν, δηφηη εληνπίδνπκε ζηνλ

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

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

Page 57: Εισαγωγή στα λειτουργικά συστήματα ii

57

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

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

Windows.

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

Μηα Γηαδξνκή είλαη ην κνλνπάηη πνπ αθνινπζνχκε απφ ηε ξίδα ηνπ δέληξνπ ("/") κέρξη ην αξρείν ή ην

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

θαηεπζπλφκαζηε. Έηζη, φπσο αλαπαξίζηαηαη ην δέληξν ζην ρήκα 3.4, κε κηα δηαδξνκή κπνξνχκε λα

κεηαθηλεζνχκε κφλν απφ πάλσ πξνο ηα θάησ (αξγφηεξα ζα δνχκε θαη ηνλ έκκεζν ηξφπν γηα κεηαθίλεζε πξνο

ηα επάλσ). Σα ηκήκαηα κηαο Γηαδξνκήο ρσξίδνληαη κεηαμχ ηνπο κε ηνλ ραξαθηήξα "/". Έηζη, ε Γηαδξνκή

πξνο ην αξρείν (1) είλαη ε: /home/staff/ektaktoi/asidirop/Test1.txt, ελψ γηα ην αξρείν (2)

είλαη ε: /tmp/Test1.txt. Ο πξψηνο ραξαθηήξαο "/" ζπκβνιίδεη ηε ξίδα ηνπ δέληξνπ.

/

home

students

x1112

aanesiad abacharo abliouka

Test1.txt File2.txt

Κ.τ.λ.

x1011 κ.τ.λ.

staff

ektaktoi

asidirop

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

File2.txt

vassik Κ.τ.λ.

It

dad klefturi κ.τ.λ.

bin tmp

Test1.txt File2.txt

(2)

(1)

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

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

Δδψ δελ ππάξρεη ν ζπκβνιηζκφο γηα ηε ξίδα ηνπ δέληξνπ, ππάξρεη φκσο ε ζήκαλζε "C:". ηα Λεηηνπξγηθά

ησλ Windows θαη ηνπ DOS, σο δηαρσξηζηήο ησλ ηκεκάησλ ηεο Γηαδξνκήο ρξεζηκνπνηείηαη ν

ραξαθηήξαο "\" (back-slash) θαη φρη ν ραξαθηήξαο "/" (slash). Απηή ε δηαθνξνπνίεζε δεκηνπξγνχζε πάληα

ζχγρπζε θαη ζηνπο ρξήζηεο, αιιά θαη ζηα πξνγξάκκαηα πνπ ιεηηνπξγνχλ θαη ζηα δπν Λεηηνπξγηθά

πζηήκαηα. Οη λεφηεξεο εθδφζεηο φκσο ησλ Windows αλαγλσξίδνπλ σο δηαρσξηζηή ηκεκάησλ κηαο

Γηαδξνκήο θαη ηνλ ραξαθηήξα "/".

Page 58: Εισαγωγή στα λειτουργικά συστήματα ii

58

Μέζα ζε κηα Γηαδξνκή ηα «κνλνπάηηα» ή νη «θόκβνη» πνπ αθνινπζνύκε δηαρσξίδνληαη κε ηνλ

ραξαθηήξα / (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 σο

ηξέρσλ θάθεινο εξγαζίαο.

Page 59: Εισαγωγή στα λειτουργικά συστήματα ii

59

/

home

students

x1112

aanesiad abacharo abliouka

Test1.txt File2.txt

Κ.τ.λ.

x1011 κ.τ.λ.

staff

ektaktoi

asidirop

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

File2.txt

vassik Κ.τ.λ.

It

dad klefturi κ.τ.λ.

bin tmp

Test1.txt File2.txt

(2)

(1)

(3)

(4)

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

Χζηφζν, κε ρεηηθή Γηαδξνκή κπνξνχκε λα νδεγεζνχκε θαη ζε αξρεία ή θαηαιφγνπο πνπ βξίζθνληαη

θαη εθηφο ηνπ home directory καο. Ο ρξήζηεο κπνξεί λα αιιάμεη Σξέρνληα Καηάινγν Δξγαζίαο

ρξεζηκνπνηψληαο ηελ εληνιή cd. Ζ εληνιή cd δέρεηαη σο φξηζκα κηα Γηαδξνκή πξνο έλαλ θαηάινγν

(Απφιπηε ή ρεηηθή) θαη νξίδεη ηνλ λέν θαηάινγν σο ηξέρνληα. Πρ:

cd /tmp

ηελ παξαπάλσ πεξίπησζε, ην φξηζκα ζηελ εληνιή cd είλαη Απφιπηε Γηαδξνκή θαη νδεγεί ζηνλ

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

ν ρξήζηεο asidirop δψζεη ηελ παξαθάησ αθνινπζία εληνιψλ:

cat Test1.txt

cd /tmp

cat Test1.txt

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

αξρείν (2).

Page 60: Εισαγωγή στα λειτουργικά συστήματα ii

60

/

home

students

x1112

aanesiad abacharo abliouka

Test1.txt File2.txt

Κ.τ.λ.

x1011 κ.τ.λ.

bin tmp

Test1.txt File2.txt

(1)

(2)

(3)

(4)

(5)

ρήκα 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).

Page 61: Εισαγωγή στα λειτουργικά συστήματα ii

61

/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), ε Γηαδξνκή πνπ ζα πξέπεη λα

δηαηππψζνπκε θαίλεηαη κε ηα θαθέ βέιε ζην ζρήκα.

Page 62: Εισαγωγή στα λειτουργικά συστήματα ii

62

/

home

students

x1112

aanesiad abacharo

file1 file2

abliouka

Test1.txt File2.txt x1112

Κ.τ.λ.

x1011 κ.τ.λ.

bin tmp

Test1.txt File2.txt

(1)

(2)

(3)

(4)

ρήκα 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) είλαη ε:

Page 63: Εισαγωγή στα λειτουργικά συστήματα ii

63

../abacharo/file1

/

home

students

x1112

aanesiad abacharo

. .. file1 file2

abliouka

. .. Test1.txt File2.txt x1112

Κ.τ.λ.

x1011 κ.τ.λ.

bin tmp

Test1.txt File2.txt

(1)

(2)

(3)

(4)

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

ην ρήκα 3.10, παξνπζηάδεηαη έλα κηθξφηεξν ηκήκα ηνπ ζπζηήκαηνο αξρείσλ, αιιά

αλαπαξηζηψληαη φινη νη θάθεινη "." θαη "..". Δδψ βιέπνπκε φηη ν θάθεινο /home/students πεξηέρεη

ηνλ ππνθάθειν "..", ν νπνίνο «δείρλεη» ζηνλ /home. Δπίζεο, ν θάθεινο /home/students πεξηέρεη ηνλ

ππνθάθειν ".", ν νπνίνο δείρλεη ζηνλ ίδην ηνλ θάθειν /home/students. Όινη νη θάθεινη πεξηέρνπλ

απηνχο ηνπο δπν ππνθαθέινπο, αθφκε θαη ν "/" (ην root directory - ξηδηθφο θάθεινο). Βέβαηα, ζηελ

πεξίπησζε ηνπ ξηδηθνχ θαθέινπ, είλαη πξνθαλέο φηη έηζη θη αιιηψο ν ππνθάθεινο "." δείρλεη ζηνλ ίδην ηνλ

ξηδηθφ θάθειν. Ο ππνθάθεινο ".." φκσο πνπ δείρλεη; Πξνθαλψο δελ κπνξεί λα δείρλεη θάπνπ πην πάλσ απφ

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

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

/

. .. home

. .. students

. .. x1112

. ..

x1011

. ..

bin

. ..

tmp

. .. Test1.txt File2.txt

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

Page 64: Εισαγωγή στα λειτουργικά συστήματα ii

64

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

θάθεινο. Έζησ ην ζχζηεκα αξρείσλ ηνπ ρήκαηνο 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 . Απηό

δηεπθνιύλεη ηνπο ρξήζηεο ώζηε λα αληηιεθζνύλ άκεζα όηη ε δηαδξνκή είλαη πξνο θάθειν θαη

όρη πξνο αξρείν. Από ηελ άιιε είλαη έηνηκε ε ζπκβνινζεηξά λα ζπλελσζεί κε έλα όλνκα

αξρείνπ, όηαλ ηελ ρξεζηκνπνηνύκε κέζα από πξόγξακκα.

Page 65: Εισαγωγή στα λειτουργικά συστήματα ii

65

/

home

students

x1112 x1011

bin tmp

Test1.txt File2.txt

1

2 3 4

5 6 7

8 9

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

ην ρήκα 3.11 θαίλεηαη ε ίδηα ηεξαξρία κε ην πξνεγνχκελν ζρήκα, ρσξίο ηελ πνιππινθφηεηα πνπ

πξνζζέηεη ε αλαπαξάζηαζε ησλ θαθέισλ"." θαη "..". ηνλ Πίλαθα 3.3 παξνπζηάδνπκε κεξηθέο Απφιπηεο θαη

ρεηηθέο Γηαδξνκέο, ζπκπεξηιακβαλνκέλσλ θαη ζπρλψλ ιαζψλ:

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

A/A Γηαδξνκή Σξέρσλ Καηάινγνο

Δξγαζίαο ρόιηα

1 /home/students/x1112 νπνηνζδήπνηε

Δίλαη ε Γηαδξνκή πξνο ηνλ

θάθειν (8) αλεμάξηεηα απφ

ηνλ Σξέρνληα (cwd)

2 /home/students νπνηνζδήπνηε

Δίλαη ε Γηαδξνκή πξνο ηνλ

θάθειν (5) αλεμάξηεηα απφ

ηνλ Σξέρνληα (cwd)

3 /home/students/ νπνηνζδήπνηε

Δίλαη ε Γηαδξνκή πξνο ηνλ

θάθειν (5) αλεμάξηεηα απφ

ηνλ Σξέρνληα (cwd) κε

θαηάιεμε "/".

4 /home/students/x1112/../x1011 νπνηνζδήπνηε

Δίλαη ε Γηαδξνκή πξνο ηνλ

θάθειν (9) αλεμάξηεηα απφ

ηνλ Σξέρνληα (cwd). Γελ είλαη

ε βέιηηζηε δηαδξνκή δηφηη

πεξηέρεη "παξάθακςε", είλαη

φκσο ζσζηή.

5 /tmp/../home νπνηνζδήπνηε

Δίλαη ε Γηαδξνκή πξνο ηνλ

θάθειν (2) αλεμάξηεηα απφ

ηνλ Σξέρνληα (cwd). Γελ είλαη

ε βέιηηζηε Γηαδξνκή, δηφηη

πεξηέρεη "παξάθακςε", είλαη

φκσο ζσζηή.

Page 66: Εισαγωγή στα λειτουργικά συστήματα ii

66

6 /tmp/Test1.txt/../../home νπνηνζδήπνηε

ΛΑΘΟ. Αλ ην

ζηνηρείν Test1.txt δελ ήηαλ

αξρείν αιιά θάθεινο, ε

δηαδξνκή ζα ήηαλ ζσζηή. Δίλαη

φκσο αξρείν, θαη έλα αξρείν

δελ κπνξεί λα είλαη ηκήκα κηαο

δηαδξνκήο. Μπνξεί λα είλαη

κφλν πξννξηζκφο.

7 x1112/../x1011 /home/students

Δίλαη ε Γηαδξνκή πξνο ηνλ

θάθειν (9) ζρεηηθή κε ηνλ

Σξέρνληα (cwd). Γελ είλαη ε

βέιηηζηε δηαδξνκή, δηφηη

πεξηέρεη «παξάθακςε», είλαη

φκσο ζσζηή.

8 students/x1011 /home/students

ΛΑΘΟ. Ξεθηλψληαο απφ ην

θάθειν (5), δελ ππάξρεη κέζα

ζε απηφλ θάθεινο κε ην

φλνκαstudents. Άξα, ε

Γηαδξνκή είλαη ιάζνο.

9 ./x1011 /home/students

Δίλαη ε Γηαδξνκή πξνο ηνλ

θάθειν (9) ζρεηηθή κε ηνλ

Σξέρνληα (cwd). Τπάξρεη ν

πιενλαζκφο ρξήζεο ηνπ "./".

10 home /home/students

ΛΑΘΟ. Ξεθηλψληαο απφ ην

θάθειν (5), δελ ππάξρεη κέζα

ζε απηφλ θάθεινο κε ην

φλνκαhome. Άξα, ε Γηαδξνκή

είλαη ιάζνο. Ζ αλαθνξά πξνο

ηνλ θάθειν (2) πξέπεη λα γίλεη

κε ηε ρξήζε ηνπ "..".

11 tmp/Test1.txt /home/students

ΛΑΘΟ. Ξεθηλψληαο απφ ην

θάθειν (5), δελ ππάξρεη κέζα

ζε απηφλ θάθεινο κε ην

φλνκαtmp. Άξα, ε Γηαδξνκή

είλαη ιάζνο.

12 /tmp/Test1.txt /home/students

Δίλαη ε Γηαδξνκή πξνο ην

αξρείν (6). Δίλαη Απφιπηε

Γηαδξνκή θαη άξα αλεμάξηεηε

απφ ηνλ cwd.

13 /tmp///Test1.txt /home/students

Δίλαη ε Γηαδξνκή πξνο ην

αξρείν (6). Δίλαη Απφιπηε

Γηαδξνκή. Τπάξρεη ν

πιενλαζκφο ρξήζεο πνιιψλ "/"

σο δηαρσξηζηψλ. Απηφ δελ

ελνριεί, θαη κάιηζηα είλαη

πηζαλφ λα πξνθχπηνπλ ηέηνηνπ

ηχπνπ Γηαδξνκέο, φηαλ

θαηαζθεπάδνληαη απφ

πξφγξακκα. Γελ ελνρινύλ ηα

πνιιαπιά "/".

Page 67: Εισαγωγή στα λειτουργικά συστήματα ii

67

14 ././///Test1.txt /tmp

Δίλαη ε Γηαδξνκή πξνο ην

αξρείν (6). Δίλαη ρεηηθή

Γηαδξνκή μεθηλψληαο απφ ην

(4). Τπάξρεη ν πιενλαζκφο

ρξήζεο πνιιψλ "/"θαη πνιιψλ

αλαθνξψλ ζηνλ ηξέρνληα

θάθειν"./". Απηφ δελ ελνριεί,

θαη, φπσο ζηελ πξνεγνχκελε

πεξίπησζε είλαη πηζαλφ λα

πξνθχπηνπλ ηέηνηνπ ηχπνπ

δηαδξνκέο, φηαλ

θαηαζθεπάδνληαη απφ

πξφγξακκα. Γελ ελνρινύλ ηα

πνιιαπιά "./".

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

Γηα ην θέιπθνο o ραξαθηήξαο ~ (tilde ή θπκαηνεηδήο γξακκή ή πεξηζπσκέλε) έρεη εηδηθή ζεκαζία, φηαλ

εκθαλίδεηαη κφλνο ηνπ ή ζηελ αξρή κηαο ζπκβνινζεηξάο πνπ εθθξάδεη δηαδξνκή. ηνλ Πίλαθα

3.4 εκθαλίδνληαη νη πηζαλέο πεξηπηψζεηο θαη ε αληίζηνηρε ζεκαζία ηνπο.

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

πκβνιηζκόο Δμήγεζε

~ Ο ραξαθηήξαο ~, ρσξίο λα αθνινπζείηαη απφ θάηη ζεκαίλεη ην home directory ηνπ

ηξέρνληνο ρξήζηε.

~/ Ο ραξαθηήξαο ~, αθνινπζνχκελνο απφ ηελ "/", ζεκαίλεη ην home directory ηνπ

ηξέρνληνο ρξήζηε.

~/file1.txt

Ο ραξαθηήξαο ~, αθνινπζνχκελνο απφ ηελ "/", ζεκαίλεη ην home directory ηνπ

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

Σν ζπγθεθξηκέλν παξάδεηγκα ζεκαίλεη ην αξρείνfile1.txt κέζα ζην home directory ηνπ

ηξέρνληνο ρξήζηε.

~antonis

Ο ραξαθηήξαο ~, αθνινπζνχκελνο απφ νηηδήπνηε εθηφο απφ "/", ζεκαίλεη ην home

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). Απηό, βέβαηα, δελ είλαη

απαξαίηεην.

Page 68: Εισαγωγή στα λειτουργικά συστήματα ii

68

Σν 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

asidirop

test1.txt file2.txt dir_tmp

file2.txt

others

vassik

test1.txt file2.txt dir2

bin tmp

test1.txt file2.txt

var

usr

spare

file1.txt

21

3 4 5 6

7 89

10 11

12

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

ηελ πξαγκαηηθφηεηα ην θέιπθνο, φηαλ ζε κηα γξακκή εληνιήο δεη ηνλ ραξαθηήξα "~", πξηλ

εθηειέζεη ηελ εληνιή, εξκελεχεη ηνλ ραξαθηήξα απηφλ. Μπνξνχκε λα ρξεζηκνπνηήζνπκε ηελ

εληνιή echo [3], γηα λα επηβεβαηψζνπκε ην παξαπάλσ. Ζ εληνιή echo δέρεηαη σο φξηζκα κηα

ζπκβνινζεηξά θαη απιά ηελ ηππψλεη ζην ηεξκαηηθφ. Δίλαη θάηη αλάινγν ησλ εληνιψλ print ή write πνπ

ππάξρνπλ ζε δηάθνξεο γιψζζεο πξνγξακκαηηζκνχ.

Page 69: Εισαγωγή στα λειτουργικά συστήματα ii

69

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 Δληνιέο Γηαρείξηζεο Φαθέισλ

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

Page 70: Εισαγωγή στα λειτουργικά συστήματα ii

70

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.

Page 71: Εισαγωγή στα λειτουργικά συστήματα ii

71

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 εκθαλίδεη ηα πεξηερφκελα ελφο θαθέινπ (θαη φρη κφλν).

Page 72: Εισαγωγή στα λειτουργικά συστήματα ii

72

Πίλαθαο 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 εάλ ην φξηζκα είλαη θαηάινγνο, ηφηε δελ εκθαλίδεη ηα πεξηερφκελα ηνπ θαηαιφγνπ ην νπνίν είλαη

ε ζπλήζεο ζπκπεξηθνξά, αιιά εκθαλίδεη πιεξνθνξίεο γηα ηνλ ίδην ηνλ θαηάινγν.

-R

(recursive) εκθαλίδεη θαη φινπο ηνπο ππνθαηαιφγνπο θαη ηα πεξηερφκελά ηνπο θαη ηα

πεξηερφκελα απηψλ θαη νπνησλδήπνηε θαηαιφγσλ θάησ απφ ηνλ ηξέρνληα (ή θάησ απφ ηνλ

θάθειν πνπ δφζεθε σο φξηζκα).

Page 73: Εισαγωγή στα λειτουργικά συστήματα ii

73

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".

Page 74: Εισαγωγή στα λειτουργικά συστήματα ii

74

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

ε έλαλ θάθειν κπνξνύλ λα ζπλππάξρνπλ ηα αξρεία .file1 θαη file1. Δίλαη δπν

δηαθνξεηηθά νλόκαηα αξρείσλ. Σν πξώην είλαη θξπθό.

ηα windows θξπθό είλαη έλα αξρείν πνπ έρεη ηελ ηδηόηεηα “hidden”, ε νπνία νξίδεηαη γηα

θάζε αξρείν/θαηάινγν, θαη είλαη εληειώο δηαθνξεηηθή έλλνηα ζε ζρέζε κε ην UNIX.

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

ηόρνο

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

Άζθεζε 1

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

Υξεζηκνπνηψληαο ηελ εληνιή man, ζπκπιεξψζηε ηα θελά ζηνλ παξαθάησ πίλαθα.

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

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

mkdir [νλόκαηα θαηαιόγωλ] Γεκηνπξγεί θαηαιφγνπο.

rmdir [νλόκαηα θαηαιόγωλ] Γηαγξάθεη άδεηνπο θαηαιφγνπο.

cp [-i] [-f] [-r] [πεγή/έο]

[πξννξηζκόο]

Αληηγξάθεη αξρεία ή θαηαιφγνπο απφ ηελ πεγή

ζηνλ πξννξηζκφ.

mv [-i] [-f] [πεγή/έο]

[πξννξηζκόο]

Μεηαθηλεί/κεηνλνκάδεη αξρεία ή θαηαιφγνπο απφ

ηελ πεγή ζηνλ πξννξηζκφ.

rm [-i] [-f] [-r] [νλόκαηα

αξρείωλ ή θαηαιόγωλ] Γηαγξάθεη αξρεία ή θαηαιφγνπο.

cd [όλνκα θαηαιόγνπ] Αιιαγή ηξέρνληνο θαηαιφγνπ.

ls [-l] [-a] [νλόκαηα αξρείωλ

ή θαηαιόγωλ]

Δκθαλίδεη ηα πεξηερφκελα θαηαιφγσλ ή/θαη

πιεξνθνξίεο γηα ηα αξρεία.

pwd

?

cat [νλόκαηα αξρείωλ] ?

more [νλόκαηα αξρείωλ] ?

head [-λνύκεξν] [νλόκαηα

αξρείωλ] ?

tail [-λνύκεξν] [νλόκαηα

αξρείωλ] ?

Page 75: Εισαγωγή στα λειτουργικά συστήματα ii

75

Άζθεζε 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 γηα λα ειέγρεηε θάζε θνξά πνηνο είλαη ν Σξέρσλ

Φάθεινο Δξγαζίαο.

Page 76: Εισαγωγή στα λειτουργικά συστήματα ii

76

Άζθεζε 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) ησλ παξαθάησ εληνιψλ :

Page 77: Εισαγωγή στα λειτουργικά συστήματα ii

77

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

carol eve

bob

fred

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

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

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

Page 78: Εισαγωγή στα λειτουργικά συστήματα ii

78

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.

Page 79: Εισαγωγή στα λειτουργικά συστήματα ii

79

Άζθεζε 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 ]

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

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

Page 80: Εισαγωγή στα λειτουργικά συστήματα ii
Page 81: Εισαγωγή στα λειτουργικά συστήματα ii

81

Κεθάιαην 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 θαη ζα ζπκπιεξψζεη νιφθιεξν ην

φλνκα αξρείνπ.

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

θαηαιφγσλ.

Page 82: Εισαγωγή στα λειτουργικά συστήματα ii

82

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) [] ζπλνςίδνληαη ζηνλ παξαθάησ πίλαθα:

Page 83: Εισαγωγή στα λειτουργικά συστήματα ii

83

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

ύκβνιν Δμήγεζε

* εκαίλεη νπνηνζδήπνηε ζπλδπαζκφο ραξαθηήξσλ νπνηνπδήπνηε κήθνπο (αθφκε θαη

κεδεληθνχ κήθνπο)

? εκαίλεη έλαο αθξηβψο ραξαθηήξαο – νπνηνζδήπνηε ραξαθηήξαο

[xyz] εκαίλεη έλαο αθξηβψο ραξαθηήξαο απφ ην ζχλνιν ησλ ραξαθηήξσλ πνπ αλαγξάθνληαη

κέζα ζηηο αγθχιεο: ("x", "y", "z" )

[^xyz] εκαίλεη έλαο αθξηβψο ραξαθηήξαο – νπνηνζδήπνηε ραξαθηήξαο εθηφο ησλ ("x", "y", "z" ).

Σν ζχκβνιν "^" ακέζσο κεηά ηελ αγθχιε "[" δειψλεη άξλεζε.

[!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 παξνπζηάδνληαη νη πεξηζζφηεξν ζπρλέο ζπληνκεχζεηο:

Page 84: Εισαγωγή στα λειτουργικά συστήματα ii

84

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

ύκβνιν Δμήγεζε

[:alnum:] αιθαξηζκεηηθφο ραξαθηήξαο

[:alpha:] αιθαβεηηθφο ραξαθηήξαο

[:upper:] αιθαβεηηθφο θεθαιαίνο ραξαθηήξαο

[:lower:] αιθαβεηηθφο πεδφο ραξαθηήξαο

[:digit:] ραξαθηήξαο δεθαδηθνχ αξηζκνχ, δειαδή 0-9

[:xdigit:] ραξαθηήξαο δεθαεμαδηθνχ αξηζκνχ, δειαδή 0-9abcdef ή θαη θεθαιαία.

[:space:] ραξαθηήξαο πνπ αληηζηνηρεί ζε δηάζηεκα: θελφ δηάζηεκα (space), ζηεινζέηεο (tab),

αιιαγή γξακκήο (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

Page 85: Εισαγωγή στα λειτουργικά συστήματα ii

85

ηνλ Πίλαθα 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

ρήκαηα), ν ραξαθηήξαο "β" ζα εκθαλίδεηαη σο "â", ελψ ν ραξαθηήξαο "Π" ζαλ "Ð" θ.ν.θ.

Page 86: Εισαγωγή στα λειτουργικά συστήματα ii

86

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

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

Ήηαλ πξνθαλήο ε αλάγθε γηα νξηζκφ ελφο ζπλφινπ ραξαθηήξσλ κε βάζε ην νπνίν δελ ζα ππήξρε

δηθνξνχκελν byte. Έηζη, νξίζηεθαλ ηα multi-byte character sets θαη ε νηθνγέλεηα UTF. ε απηά ηα ζχλνια

ραξαθηήξσλ γηα ηελ αλαπαξάζηαζε ελφο ραξαθηήξα ρξεζηκνπνηνχληαη πάλσ απφ έλα bytes. πλεπψο, νη

δπλαηνί ζπλδπαζκνί είλαη πνιινί θαη ηθαλνί λα αλαπαξαζηήζνπλ πνιινχο ραξαθηήξεο. ην UTF-8 έλαο

Page 87: Εισαγωγή στα λειτουργικά συστήματα ii

87

ραξαθηήξαο θαηαιακβάλεη απφ 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).

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

πξφβιεκα ρεηξηζκνχ ειιεληθψλ γξακκάησλ.

export

LC_ALL=el_GR.UTF-8

Θέηεη σο ηξέρνλ ζχλνιν ραξαθηήξσλ ην UTF-8 θαη κελχκαηα ζηα ειιεληθά.

Μεηά απφ απηφ νη εληνιέο ζα πξνζπαζνχλ λα εκθαλίζνπλ ηα κελχκαηα ζηα

ειιεληθά, πρ. ε εληνιή ls -l, αληί ηεο ιέμεο "total" ζα εκθαλίζεη ηε ιέμε

"ζχλνιν". Δπίζεο, φια ηα κελχκαηα ζθαικάησλ ζα εκθαλίδνληαη ζηα

ειιεληθά (ρήκα 4.3).

export

LC_ALL=en_US.UTF-8 Θέηεη σο ηξέρνλ ζχλνιν ραξαθηήξσλ ην UTF-8 θαη κελχκαηα ζηα αγγιηθά.

export

LC_ALL=el_GR

Θέηεη σο ηξέρνλ ζχλνιν ραξαθηήξσλ ην ISO-8859-7 θαη κελχκαηα ζηα

ειιεληθά.

Page 88: Εισαγωγή στα λειτουργικά συστήματα ii

88

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

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

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

ην ρήκα 4.4 θαίλεηαη κηα ηέηνηα πεξίπησζε. ηελ αξηζηεξή εηθφλα ην ηεξκαηηθφ εκθαλίδεη "ISO-8859-7",

αιιά ην θέιπθνο ρξεζηκνπνηεί ην UTF-8. Θα πξέπεη λα ελεκεξσζεί ε πιεξνθνξία απηή θαη ζηελ εθαξκνγή

ηεξκαηηθνχ.

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

Αληίζηνηρε ξχζκηζε απαηηείηαη λα γίλεη ζε φια ηα πξνγξάκκαηα πξνζνκνίσζεο ηεξκαηηθνχ είηε ζην

Linux, είηε ζηα Windows. Παξάδεηγκα, ην putty.exe πνπ είλαη πξφγξακκα πξνζνκνίσζεο ηεξκαηηθνχ θαη ssh

client, αλ θαη ιεηηνπξγεί ζε Microsoft Windows, απαηηεί αληίζηνηρε ξχζκηζε (ρήκα 4.5).

Page 89: Εισαγωγή στα λειτουργικά συστήματα ii

89

ρήκα 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.

Page 90: Εισαγωγή στα λειτουργικά συστήματα ii

90

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

Page 91: Εισαγωγή στα λειτουργικά συστήματα ii

91

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

είλαη ην παξαθάησ: Έζησ φηη ζε έλαλ θάθειν πεξηέρνληαη ηα αξρεία "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", ηφηε ε ζπκπεξηθνξά ηεο ίδηαο εληνιήο ζα ήηαλ πάιη δηαθνξεηηθή:

Page 92: Εισαγωγή στα λειτουργικά συστήματα ii

92

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", ην νπνίν θαη πξέπεη λα ην αλαθέξνπκε μερσξηζηά.

Page 93: Εισαγωγή στα λειτουργικά συστήματα ii

93

Αλ ρξεζηκνπνηνχζακε ην 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*" κε ηα νλφκαηα αξρείσλ, βάδνληαο,

φκσο, πξηλ απφ ην θαζέλα θαη ηε Γηαδξνκή πνπ είρε ρξεζηκνπνηεζεί. Έηζη ε δηαδξνκή επαλαιακβάλεηαη γηα

θάζε αξρείν.

Page 94: Εισαγωγή στα λειτουργικά συστήματα ii

94

Με ηνλ ίδην ηξφπν ζπκπεξηθέξεηαη ην θέιπθνο θαη φηαλ ρξεζηκνπνηνχληαη ζρεηηθέο δηαδξνκέο. Όπσο

θαίλεηαη ζην παξαθάησ παξάδεηγκα, ε δηαδξνκή "../../" ζα επαλαιεθζεί γηα θάζε αξρείν. Μάιηζηα, ζα

επαλαιεθζεί σο ζρεηηθή δηαδξνκή, φπσο αθξηβψο δηαηππψζεθε ζηελ εληνιή.

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

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

Page 95: Εισαγωγή στα λειτουργικά συστήματα ii

95

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);

Page 96: Εισαγωγή στα λειτουργικά συστήματα ii

96

Άζθεζε 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

│ └── x.1

├── gn.1

├── gneiss.1

└── gnu.1

.

├── doit

├── one

│ └── doit

├── three

│ └── 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

Page 97: Εισαγωγή στα λειτουργικά συστήματα ii

97

Δλαιιαθηηθά, κπνξείηε λα θαηεβάζεηε ην

αξρείν: 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.

Page 98: Εισαγωγή στα λειτουργικά συστήματα ii
Page 99: Εισαγωγή στα λειτουργικά συστήματα ii

99

Κεθάιαην 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.

Page 100: Εισαγωγή στα λειτουργικά συστήματα ii

100

Ο ζπκβνιηζκφο ν νπνίνο αθνινπζείηαη γηα ηελ αλαπαξάζηαζε ησλ αδεηψλ ρξήζεο (κε ηνλ νπνίν

ζπκκνξθψλεηαη θαη ε εληνιή "ls -l") απνηειείηαη απφ ελλέα ραξαθηήξεο. Οπζηαζηηθά απηνί νη ελλέα

ραξαθηήξεο ρσξίδνληαη ζε ηξεηο ηξηάδεο ραξαθηήξσλ. Κάζε ηξηάδα αθνξά θαη δηαθνξεηηθφ “target” ζην νπνίν

αλαθέξεηαη. Έηζη (ρήκα 5.2):

1. Ζ πξψηε ηξηάδα αθνξά ηηο άδεηεο ρξήζεο πνπ έρνπλ νξηζηεί γηα ηνλ ηδηνθηήηε ηνπ αξρείνπ

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

(ζπκβνιίδεηαη σο “group”).

3. Ζ ηξίηε ηξηάδα αθνξά φιεο ηηο ππφινηπεο πεξηπηψζεηο (ζπκβνιίδεηαη σο “others”).

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

– Τεο νκάδαο ηδηνθηεζίαο (group)

– Όιωλ ηωλ ππνινίπωλ (others)

rwx r-x r--

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

Ζ θάζε ηξηάδα απνηειείηαη απφ ηξεηο ραξαθηήξεο, φπσο ζην ρήκα 5.3. Γηα θάζε νκάδα δηθαησκάησλ

(ηξηάδα) νξίδνληαη ηξία δηθαηψκαηα:

Γηθαίσκα αλάγλσζεο (read) πνπ ζπκβνιίδεηαη κε ην “r”.

Γηθαίσκα εγγξαθήο (write) πνπ ζπκβνιίδεηαη κε ην “w”.

Γηθαίσκα εθηέιεζεο (execute) πνπ ζπκβνιίδεηαη κε ην “x”.

24

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

– Δηθαίωκα εγγξαθήο (write “w”)

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

rwx

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

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

Γηθαίσκα αλάγλσζεο (read) ζεκαίλεη φηη ν ρξήζηεο πνπ αλήθεη ζηε ζπγθεθξηκέλε νκάδα

δηθαησκάησλ έρεη ην δηθαίσκα λα δηαβάζεη ηα πεξηερφκελα ηνπ αξρείνπ.

Γηθαίσκα εγγξαθήο (write) ζεκαίλεη φηη ν ρξήζηεο πνπ αλήθεη ζηε ζπγθεθξηκέλε νκάδα

δηθαησκάησλ έρεη ην δηθαίσκα λα κεηαβάιεη ηα πεξηερφκελα ηνπ αξρείνπ.

Γηθαίσκα εθηέιεζεο (execute) ζεκαίλεη φηη ν ρξήζηεο πνπ αλήθεη ζηε ζπγθεθξηκέλε νκάδα

δηθαησκάησλ έρεη ην δηθαίσκα λα εθηειέζεη ην αξρείν, εθφζνλ βέβαηα ην αξρείν είλαη θαηάιιεινπ

ηχπνπ γηα εθηέιεζε (εθηειέζηκν δπαδηθφ ή ζελάξην - script).

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

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

Page 101: Εισαγωγή στα λειτουργικά συστήματα ii

101

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

Page 102: Εισαγωγή στα λειτουργικά συστήματα ii

102

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 ζε δεθαδηθφ

Page 103: Εισαγωγή στα λειτουργικά συστήματα ii

103

ζχζηεκα είλαη επίζεο δχζθνιε, γηα ηελ αλαπαξάζηαζε απηψλ ησλ 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).

Page 104: Εισαγωγή στα λειτουργικά συστήματα ii

104

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

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

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” δίλεη ηε δπλαηφηεηα λα «κεηαβάινπκε» ηα πεξηερφκελα ηνπ θαηαιφγνπ, δειαδή

λα πξνζζέζνπκε ή λα αθαηξέζνπκε γξακκέο ζηνλ πίλαθα.

Page 105: Εισαγωγή στα λειτουργικά συστήματα ii

105

Σν δηθαίσκα “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:

Page 106: Εισαγωγή στα λειτουργικά συστήματα ii

106

Πίλαθαο 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

Page 107: Εισαγωγή στα λειτουργικά συστήματα ii

107

Έζησ ην 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 κε φξηζκα έλαλ νθηαδηθφ αξηζκφ ζέηεη λέα ηηκή ζηε κάζθα δηθαησκάησλ.

Page 108: Εισαγωγή στα λειτουργικά συστήματα ii

108

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).

Page 109: Εισαγωγή στα λειτουργικά συστήματα ii

109

umask 777

0 7 7 7

000 111 111 111

rwx rwx rwx

umask 055

0 0 5 5

000 000 101 101

--- r-x r-x

umask 044

0 0 4 4

000 000 100 100

--- r-- r--

umask 022

0 0 2 2

000 000 020 020

--- -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

Page 110: Εισαγωγή στα λειτουργικά συστήματα ii

110

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

Αξρηθά 0 7 7 7

- 0 7 7 7

= 0 0 0 0

000 000 000 000

--- --- ---

umask 055

Αξρηθά 0 7 7 7

- 0 0 5 5

= 0 7 2 2

000 111 010 010

rwx -w- -w-

umask 044

Αξρηθά 0 7 7 7

- 0 0 4 4

= 0 7 3 3

000 111 011 011

rwx -wx -wx

umask 022

Αξρηθά 0 7 7 7

- 0 0 2 2

= 0 7 5 5

000 111 101 101

rwx r-x r-x

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

Page 111: Εισαγωγή στα λειτουργικά συστήματα ii

111

Ο θαηάινγνο dir3 παίξλεη ηα δηθαηψκαηα “w” θαη “x” ζηελ νκάδα θαη ζηνπο ππνινίπνπο, ελψ

ην file3 είρε κφλν ην δηθαίσκα “w”. ε απηήλ ηελ πεξίπησζε βιέπνπκε ηε δηαθνξά ηεο επίδξαζεο ρξήζεο

ηεο ηηκήο (055) κε ηελ ηηκή (044), θάηη ην νπνίν δελ ίζρπε ζηελ πεξίπησζε ησλ θαηαιφγσλ. Σέινο, ε ηηκή

(022) δίλεη δηαθνξεηηθά δηθαηψκαηα ζηνλ θαηάινγν dir4 απ’ φηη ζην αξρείν file4.

Απαηηείηαη πξνζνρή ζηελ εθηίκεζε ηεο επίδξαζεο κηαο ηηκήο ηεο umask ζηηο πεξηπηψζεηο ησλ

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

κπνξνχλ λα ππνινγηζηνχλ θάλνληαο κηα απιή αθαίξεζε ζην νθηαδηθφ ζχζηεκα ηεο ηηκήο ηεο umask απφ ηελ

ηηκή 777 (ρήκα 5.8).

Αληηζέησο φκσο, ζηελ πεξίπησζε ησλ αξρείσλ, ε αθαίξεζε απφ ην (666) δελ ζα δψζεη ζε φιεο ηηο

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

καο δίλεη ζην ζσζηφ απνηέιεζκα.

umask 777

Αξρηθά 0 6 6 6

- 0 7 7 7

= - 1 1 1

??? ??? ??? ???

??? ??? ???

umask 055

Αξρηθά 0 6 6 6

- 0 0 5 5

= 0 6 1 1

000 110 001 001

rw- --x --x

umask 044

Αξρηθά 0 6 6 6

- 0 0 4 4

= 0 6 2 2

000 110 010 010

rw- -w- -w-

umask 022

Αξρηθά 0 6 6 6

- 0 0 2 2

= 0 6 4 4

000 110 100 100

rw- r-- r--

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

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

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

Page 112: Εισαγωγή στα λειτουργικά συστήματα ii

112

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

ηελ εθπαίδεπζε θαη ηελ εκπεηξία φινη νη παξαθάησ ππνινγηζκνί πξαγκαηνπνηνχληαη ζρεδφλ απηφκαηα θαη

αζπλαίζζεηα.

umask 777 (γηα θαηαιόγνπο)

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

- --- rwx rwx rwx

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

000 000 000 000

0 0 0

umask 777 (γηα αξρεία)

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

- --- rwx rwx rwx

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

000 000 000 000

0 0 0

umask 055 (γηα θαηαιόγνπο)

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

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

= --- rwx -w- -w-

000 111 010 010

7 2 2

umask 055 (γηα αξρεία)

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

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

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

000 110 010 010

6 2 2

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

Page 113: Εισαγωγή στα λειτουργικά συστήματα ii

113

umask 044 (γηα θαηαιόγνπο)

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

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

= --- rwx -wx -wx

000 111 011 011

7 3 3

umask 044 (γηα αξρεία)

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

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

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

000 110 010 010

6 2 2

umask 022 (γηα θαηαιόγνπο)

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

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

= --- rwx r-x r-x

000 111 101 101

7 5 5

umask 022 (γηα αξρεία)

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

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

= --- rw- r-- r--

000 110 100 100

6 4 4

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

Page 114: Εισαγωγή στα λειτουργικά συστήματα ii

114

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. Μπνξείηε λα ηελ εθηειέζεηε;

Page 115: Εισαγωγή στα λειτουργικά συστήματα ii

115

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

Page 116: Εισαγωγή στα λειτουργικά συστήματα ii

116

Όπνπ 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.

Page 117: Εισαγωγή στα λειτουργικά συστήματα ii

117

[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 ]

Page 118: Εισαγωγή στα λειτουργικά συστήματα ii
Page 119: Εισαγωγή στα λειτουργικά συστήματα ii

119

Κεθάιαην 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: Καλνληθέο Δθθξάζεηο.

Page 120: Εισαγωγή στα λειτουργικά συστήματα ii

120

Έλα 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". Δζσηεξηθά, ην φπνην ζχζηεκα ειέγρνπ, πξνζπαζεί λα ηαηξηάμεη ηελ θαλνληθή

Page 121: Εισαγωγή στα λειτουργικά συστήματα ii

121

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

ζεκείν ή κέρξη λα εμαληιεζνχλ φινη νη δπλαηνί ζπλδπαζκνί.

ρήκα 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), αλαδεηνχκε ηελ πην απιή πεξίπησζε, ηελ θαλνληθή έθθξαζε ".". Όπσο θαίλεηαη

θαη ζην ζρήκα, ε "." ζα ηαηξηάμεη ζηνλ πξψην δπλαηφ ραξαθηήξα.

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

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

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

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

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

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

Page 122: Εισαγωγή στα λειτουργικά συστήματα ii

122

ρήκα 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" ).

[^xyz] ζεκαίλεη έλαο αθξηβψο ραξαθηήξαο – νπνηνζδήπνηε ραξαθηήξαο εθηφο ησλ ("x", "y", "z" ).

Σν ζχκβνιν "^" ακέζσο κεηά ηελ αγθχιε "[" δειψλεη άξλεζε.

[abcdxyz]

[a-dxyz]

[a-dx-z]

Δάλ νη ραξαθηήξεο ηνπ ζπλφινπ πνπ δειψλνπκε είλαη ζπλερφκελνη ζηνλ πίλαθα

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

ηα πξνεγνχκελα είλαη ηζνδχλακα.

[^a-dxyz]

Μπνξεί λα γίλεη ζπλδπαζκφο ηνπ εχξνπο ("-") κε ηελ άξλεζε. Σν πξνεγνχκελν ζεκαίλεη

έλαο νπνηνζδήπνηε ραξαθηήξαο, αιιά φρη θάπνηνο απφ ηνπο ("a", "b", "c", "d", "x", "y",

"z").

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

Σα πξνθαζνξηζκέλα ζχλνια ραξαθηήξσλ κπνξνχλ λα ρξεζηκνπνηεζνχλ ζε κηα θιάζε φπσο νπνηνδήπνηε

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

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

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

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

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

Page 123: Εισαγωγή στα λειτουργικά συστήματα ii

123

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

ζχλνιν θαη ηνπο ραξαθηήξεο "," θαη "+". Ζ ρξήζε ησλ πξνθαζνξηζκέλσλ ζπλφισλ πξνηηκάηαη, φπνπ είλαη

βέβαηα εθηθηή, δηφηη αθνινπζεί ηνπο θαλφλεο ηνπ ζπλφινπ ραξαθηήξσλ (charset) πνπ ρξεζηκνπνηείηαη θάζε

θνξά. Παξάδεηγκα ην [[:upper:]] ζα δνπιέςεη ζσζηά ζε φιεο ηηο γιψζζεο θαη γηα φια ηα γξάκκαηα, είηε

Αγγιηθά, είηε Διιεληθά, είηε Κπξηιιηθά, είηε ... Κηλέδηθα. Αλ ν πξνγξακκαηηζηήο κηαο εθαξκνγήο δελ

επηζπκεί λα ρξεζηκνπνηήζεη ην [[:upper:]], αιιά ην [A-ZA-Χ], ηφηε θαιχπηεη κφλν δπν γιψζζεο (Αγγιηθά-

Διιεληθά) θαη βέβαηα ε θαλνληθή έθθξαζε (θαη ην πξφγξακκα πνπ ζα ηελ πεξηέρεη) ζα πξέπεη λα είλαη

γξακκέλε κε ηε ζσζηή θσδηθνπνίεζε ραξαθηήξσλ.

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

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

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

6.2.5 Σν atom άγθπξα

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

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

ηκήκα ηεο ζπκβνινζεηξάο εηζφδνπ.

Πίλαθαο 6.2: Οη πεξηζζόηεξν ζπρλέο άγθπξεο.

ύκβνιν Δμήγεζε

^ εκαίλεη αξρή ζπκβνινζεηξάο.

$ εκαίλεη ηέινο ζπκβνινζεηξάο.

\< εκαίλεη αξρή ιέμεο. Οη ιέμεηο νξηνζεηνχληαη απφ ηα θελά θαη ηα ζεκεία ζηίμεο.

\> εκαίλεη ηέινο ιέμεο.

ηνλ Πίλαθα 6.2 βιέπνπκε ηε ζεκαζία ηνπ θάζε ζπκβφινπ, ελψ ζην ρήκα 6.9 κε ηα θφθθηλα βέιε

θαίλνληαη ηα ζεκεία πνπ κπνξεί λα ηαηξηάμεη ε θάζε άγθπξα κέζα ζηε ζπκβνινζεηξά "One line of text.". Ζ

αξρή ιέμεο ( \<) ζην ζπγθεθξηκέλν παξάδεηγκα ηαηξηάδεη θαη ζηελ αξρή ζπκβνινζεηξάο. Δάλ πξηλ απφ ηελ

πξψηε ιέμε ππήξρε θάπνην θελφ δηάζηεκα, ηφηε ε αξρή ιέμεο δελ ζα ηαπηηδφηαλ κε ηελ αξρή ζπκβνινζεηξάο.

Δπίζεο παξαηεξνχκε φηη ην ηέινο ιέμεο δελ ηαπηίδεηαη κε ην ηέινο ζπκβνινζεηξάο, επεηδή ππάξρεη ν

ραξαθηήξαο "." ακέζσο κεηά ηε ιέμε θαη πξηλ απφ ην ηέινο.

Page 124: Εισαγωγή στα λειτουργικά συστήματα ii

124

ρήκα 6.9: Παξάδεηγκα ζέζεσλ αγθπξώλ.

6.3 Σειεζηέο

6.3.1 Ο ηειεζηήο αθνινπζίαο

ηελ Παξάγξαθν 6.2.2 παξνπζηάζηεθε ν ηειεζηήο αθνινπζίαο. Θπκίδνπκε φηη ν ηειεζηήο αθνινπζίαο

ζπκβνιίδεηαη κε ηελ απνπζία θάπνηνπ ζπκβφινπ. Όηαλ, δειαδή, ζε κηα θαλνληθή έθθξαζε ππάξρνπλ δπν

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

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

atom ".". Δδψ ζα πξέπεη λα παξαηεξήζνπκε φηη, φζν κεγαιψλνπλ νη θαλνληθέο εθθξάζεηο θαη φζν γίλνληαη

πην γεληθέο (ην atom "." δεκηνπξγεί κηα γεληθφηεηα), ηφηε θαη ηα βήκαηα θαη επνκέλσο ν ρξφλνο ειέγρνπ ηεο

θαλνληθήο έθθξαζεο απμάλεηαη.

ρήκα 6.10: Παξάδεηγκα RegExp: "Α.Σ", String: "CHARACTER".

Μεξηθά παξαδείγκαηα κε ηνλ ηειεζηή αθνινπζίαο παξνπζηάδνληαη ζηνλ Πίλαθα 6.3.

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

Καλνληθή Έθθξαζε Δμήγεζε

test Αλαδήηεζε ηνπ "t", λα αθνινπζεί ην "e", λα αθνινπζεί ην "s", λα αθνινπζεί

ην "t" (νπζηαζηηθά ε ιέμε "test").

x[0-9A-F][0-9A-F]

Αλαδήηεζε ηνπ "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). Αο ζεκεησζεί φηη δελ ππάξρεη κε θαλέλαλ ηξφπν

ζπζρέηηζε ησλ δπν ηειεπηαίσλ ςεθίσλ, δειαδή ηαηξηάδεη ε ζπκβνινζεηξά

"x66" αιιά θαη ε "x6E". Οη δπν θιάζεηο ραξαθηήξσλ πνπ νξίζακε, αλ θαη

ίδηεο, κπνξνχλ λα ηαηξηάδνπλ ζε δηαθνξεηηθά ςεθία.

^[0-9] Αλαδήηεζε ηεο αξρήο ζπκβνινζεηξάο θαη έπεηηα έλα αξηζκεηηθφ ςεθίν.

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

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

Page 125: Εισαγωγή στα λειτουργικά συστήματα ii

125

^[0-9]$

Αλαδήηεζε ηεο αξρήο ζπκβνινζεηξάο, έπεηηα έλα αξηζκεηηθφ ςεθίν θαη λα

αθνινπζεί ην ηέινο ζπκβνινζεηξάο. Οπζηαζηηθά, ζα ηαηξηάμεη ζε

ζπκβνινζεηξέο πνπ απνηεινχληαη απφ έλαλ κφλν αξηζκεηηθφ ραξαθηήξα.

^$

Αλαδήηεζε ηεο αξρήο ζπκβνινζεηξάο θαη λα αθνινπζεί ην ηέινο

ζπκβνινζεηξάο. Οπζηαζηηθά ζα ηαηξηάμεη ζε ζπκβνινζεηξέο πνπ είλαη θελέο,

δειαδή έρνπλ κήθνο 0 ςεθία. Πξνζνρή, ε θελή ζπκβνινζεηξά (empty string)

είλαη θάηη δηαθνξεηηθφ απφ κηα ηηκή NULL γηα κηα ζπκβνινζεηξά ζε κηα

γιψζζα πξνγξακκαηηζκνχ.

^.$

Αλαδήηεζε ηεο αξρήο ζπκβνινζεηξάο, έπεηηα έλαλ νπνηνλδήπνηε ραξαθηήξα

θαη λα αθνινπζεί ην ηέινο ζπκβνινζεηξάο. Οπζηαζηηθά ζα ηαηξηάμεη ζε

ζπκβνινζεηξέο πνπ απνηεινχληαη απφ έλαλ κφλν ραξαθηήξα, νπνηνλδήπνηε

ραξαθηήξα, αθφκε θαη ην θελφ δηάζηεκα (space).

0[0-9]0

Αλαδήηεζε ηνπ "0", έπεηηα έλα νπνηνδήπνηε αξηζκεηηθφ ςεθίν θαη λα

αθνινπζεί πάιη ην "0". Θα ηαηξηάμεη ζε 3ςήθηνπο αξηζκνχο πνπ μεθηλνχλ θαη

ηειεηψλνπλ ζε "0", αιιά φρη κφλν. Θα ηαηξηάμεη ζηε ζπκβνινζεηξά "050"

αιιά θαη ζηε ζπκβνινζεηξά "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.

Page 126: Εισαγωγή στα λειτουργικά συστήματα ii

126

Πίλαθαο 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"

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

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

Page 127: Εισαγωγή στα λειτουργικά συστήματα ii

127

ρήκα 6.12: Γελδξνεηδήο αλαπαξάζηαζε ησλ δπλαηώλ ζπλδπαζκώλ-ειέγρσλ ηνπ παξαδείγκαηνο από ην Γηαδξαζηηθό

ρήκα 6.11.

Η ρξήζε ησλ ηειεζηώλ επαλάιεςεο απμάλεη ηδηαίηεξα ηνλ ρξόλν ειέγρνπ. Γηα απηό, ζα πξέπεη λα

γίλεηαη πξνζεθηηθή «θαηαζθεπή» κηαο θαλνληθήο έθθξαζεο, ώζηε λα κελ δεκηνπξγεί άρξεζηνπο

ζπλδπαζκνύο, ηδίσο εάλ πξόθεηηαη λα ειεγρζεί ζε κεγάιν όγθν δεδνκέλσλ (πρ. log files).

Πίλαθαο 6.6: Παξαδείγκαηα κε ηειεζηέο επαλάιεςεο.

Καλνληθή

Έθθξαζε Δμήγεζε Ιζνδύλακν Σαηξηάδεη ζε

Α{3}

Σν πξνεγνχκελν atom

(ην Α) αθξηβψο 3

θνξέο. ΑAA

ΑAA, BAAABBB,

XYZAAAAAAATT

B{2,4} Σν B απφ 2 έσο 4

θνξέο BB|BBB|BBBB

BB, XYBBBBBZX,

QWEBBBBBBBBBB

ΑΒ{1,3}

Σν B απφ 1 έσο 3

θνξέο. Πξνζνρή, κφλν

ην "Β", φρη θαη ην Α. AB|ABB|ABBB ABB, ABBBBABB

Page 128: Εισαγωγή στα λειτουργικά συστήματα ii

128

A{1,3}B

To A απφ 1 έσο 3

θνξέο θαη κεηά ην Β

κηα θνξά. AB|AAB|AAAB

ABBB,

BAABBBBABBB

A{1,3}B{1,3}

To A απφ 1 έσο 3

θνξέο θαη κεηά ην B

απφ 1 έσο 3 θνξέο.

AB|ABB|ABBB|AAB|AABB|

AABBB|AAAB|AAABB|AAABBB

ABBB,

CXZAABBBBBABZX

ΑΒ{4,}C

To A κηα θνξά, κεηά

ην Β 4 θνξέο ή

πεξηζζφηεξεο θαη κεηά

ην C.

ΑΒBBBC|ABBBBBC|ABBBBBBC|...

...

ABBBBBBBBBBBBBBBBBBBBBBC|...

ABBBBC,

CXZAABBBBBBCCB

B,

CBABBBBBBCABBB

BBZX

[ΑΒ]{2,3}

Ζ θιάζε ραξαθηήξσλ

[ΑΒ] απφ δπν έσο

ηξεηο θνξέο. [AB][AB]|[AB][AB][AB]

ABB, ABA,

XYZABXYZ,

ZAXBBBXX

^.{2,3}$

Αλαδήηεζε αξρήο

ζπκβνινζεηξάο, λα

αθνινπζνχλ απφ δπν

έσο ηξεηο νπνηνηδήπνηε

ραξαθηήξεο.

Οπζηαζηηθά, ζα

ηαηξηάμεη ζε

ζπκβνινζεηξέο πνπ

έρνπλ κήθνο δπν ή

ηξία.

^..$|^...$ QWE, 8A0,

WE, $#A, -

[01]{3} Αλαδήηεζε ηνπ 0 ή 1

ηξεηο θνξέο. [01][01][01]

010, 98201122,

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 πνηνο είλαη ν ζσζηφο θαη κνλαδηθφο ηξφπνο λα ην πεηχρνπκε απηφ.

Page 129: Εισαγωγή στα λειτουργικά συστήματα ii

129

Πίλαθαο 6.7: Παξαδείγκαηα κε ηειεζηέο επαλάιεςεο.

Καλνληθή Έθθξαζε Δμήγεζε Ιζνδύλακν Σαηξηάδεη ζε

Α*B Σν Α κεδέλ ή πεξηζζφηεξεο

θνξέο θαη κεηά ην Β. B|AB|AAB|AAAB|...

ΑAAΒ, BAAΒBBB,

XYZΒAAΒATT, DBD

Α+Β Σν Α κηα ή πεξηζζφηεξεο θνξέο

θαη κεηά ην Β. AB|AAB|AAAB|...

ΑAAΒ, BAAΒBBB,

XYZBAAΒATT

BΑ?Β Σν B, λα αθνινπζεί ην Α κηα ή

θακία θνξά θαη κεηά ην Β. ΒΒ|ΒAB

ΒΑΒ, ΑΒΒXCZ,

XYAΒBABAAB

B.?Β Σν B, λα αθνινπζεί ην Α κηα ή

θακία θνξά θαη κεηά ην Β. ΒΒ|ΒAB

ΒΑΒ, ΑΒΒXCZ,

XYAΒBABAAB

B.*Β Σν B, λα αθνινπζεί ην Α κηα ή

θακία θνξά θαη κεηά ην Β. ΒΒ|ΒAB

ΒΑΒ, ΑΒΒXCZ,

XYAΒBABAAB

^B.*Β Σν B, λα αθνινπζεί ην Α κηα ή

θακία θνξά θαη κεηά ην Β. ΒΒ|ΒAB

ΒΑΒ, ΑΒΒXCZ,

XYAΒBABAAB

^B.*Β$ Σν B, λα αθνινπζεί ην Α κηα ή

θακία θνξά θαη κεηά ην Β. ΒΒ|ΒAB

ΒΑΒ, ΑΒΒXCZ,

XYAΒBABAAB

[0-9]+,?[0-9]* Σν B, λα αθνινπζεί ην Α κηα ή

θακία θνξά θαη κεηά ην Β. ΒΒ|ΒAB

ΒΑΒ, ΑΒΒXCZ,

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.

Page 130: Εισαγωγή στα λειτουργικά συστήματα ii

130

Πίλαθαο 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: Παξαδείγκαηα κε Αλαθνξά πίζσ.

Καλνληθή Έθθξαζε Δμήγεζε Παξαδείγκαηα

(.)\1

Αλαδήηεζε ελφο νπνηνπδήπνηε ραξαθηήξα θαη

απνζήθεπζή ηνπ ζηνλ 1ν απνηακηεπηή θαη λα

αθνινπζείηαη απφ ην ίδην.

AA, BAAAB,

XYZ++AS))AT

([0-9])[0-9]*\1

Αλαδήηεζε ελφο νπνηνπδήπνηε αξηζκεηηθνχ

ραξαθηήξα θαη απνζήθεπζή ηνπ ζηνλ

1ναπνηακηεπηή, λα αθνινπζνχλ νπνηνηδήπνηε θαη

νζνηδήπνηε αξηζκεηηθνί ραξαθηήξεο θαη λα

αθνινπζεί απηφ πνπ απνζεθεχηεθε ζηνλ

απνηακηεπηή \1.

55, 3258765,

XYZ++AS))AT,

435231, asdd22tf,

sdf45drr5, a5as5235

([0-9]{3})\1

Αλαδήηεζε ηξηψλ αξηζκεηηθψλ ραξαθηήξσλ θαη

απνζήθεπζή ηνπο ζηνλ 1ν απνηακηεπηή θαη λα

αθνινπζνχληαη απφ ηνπο ίδηνπο.

346346, 123123,

51231237

Page 131: Εισαγωγή στα λειτουργικά συστήματα ii

131

([0-9]{3})\1[Α-

Ε]*\1

Αλαδήηεζε ηξηψλ αξηζκεηηθψλ ραξαθηήξσλ θαη

απνζήθεπζή ηνπο ζηνλ 1ν απνηακηεπηή. Να

αθνινπζνχληαη απφ ηνπο ίδηνπο. Έπεηηα λα

ππάξρνπλ πξναηξεηηθά θεθαιαία γξάκκαηα θαη

ηέινο πάιη νη ίδηνη ηξεηο αξηζκεηηθνί ραξαθηήξεο.

346346346,

STAR987987TEST987,

123123ΣΡ123END

(.)(.).{2}\2\1

Αλαδήηεζε νπνηνπδήπνηε ραξαθηήξα θαη

απνζήθεπζή ηνπ ζηνλ "\1". Έπεηηα νπνηνζδήπνηε

ραξαθηήξαο θαη απνζήθεπζή ηνπ ζηνλ "\2". Έπεηηα

νπνηνηδήπνηε δπν ραξαθηήξεο. Έπεηηα ν "\2" θαη

ηέινο ν "\1".

ΑΒΥΤΒΑ, RΕΡ98ΡΔW

(.)(.)(.).*\3\2\1

Αλαδήηεζε νπνησλδήπνηε ηξηψλ ραξαθηήξσλ θαη

απνζήθεπζή ηνπο ζε ηξεηο απνηακηεπηέο "\1", "\2",

"\3". Έπεηηα, νπνηνζδήπνηε ζπλδπαζκφο

ραξαθηήξσλ θαη ηέινο νη ηξεηο κε αληίζηξνθε

ζεηξά.

NΙΨΟΝ...ΟΦΗΝ

6.3.6 Δηδηθνί ραξαθηήξεο θαη ν ραξαθηήξαο «\»

Ο ραξαθηήξαο «\» (backslash) ρξεζηκνπνηείηαη είηε γηα λα απνδψζεη εηδηθή ζεκαζία ζηνλ ραξαθηήξα πνπ

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

έθθξαζε, αλ πξέπεη λα ζπκπεξηιεθζεί ν ραξαθηήξαο "*" θαη φρη ν ηειεζηήο "*", ζα πξέπεη λα αθπξσζεί ε

εηδηθή ηνπ ζεκαζία κε ην "\". Άξα, * ζεκαίλεη ηειεζηήο επαλάιεςεο, ελψ ην \* ζεκαίλεη ν ραξαθηήξαο "*".

Απφ ηελ άιιε κεξηά, ην "\" ρξεζηκνπνηείηαη θαη γηα λα πξνζδψζεη εηδηθή ζεκαζία ζηνλ ραξαθηήξα

πνπ αθνινπζεί φπσο νη πεξηπηψζεηο \<, \1, \2, ... θ.ά.

ε απηφ ην ζεκείν ζα πξέπεη λα παξαηεξεζεί πσο θάπνηνη ραξαθηήξεο απνθηνχλ ή ράλνπλ εηδηθή

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

γηα ηνλ "^" φηη ζεκαίλεη αξρή ζπκβνινζεηξάο. Δπίζεο, ζεκαίλεη άξλεζε, φηαλ εκθαλίδεηαη κέζα ζε θιάζε

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

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

νπνηνδήπνηε άιιν ζεκείν, είλαη απιά ν ραξαθηήξαο "^". Αληίζηνηρα, κέζα ζε θιάζε ραξαθηήξσλ ζεκαίλεη

άξλεζε κφλν φηαλ βξίζθεηαη ακέζσο κεηά ην άγθηζηξν πνπ αλνίγεη. Παξάδεηγκα [^A] ζεκαίλεη έλαο

νπνηνζδήπνηε ραξαθηήξαο εθηφο απφ ηνλ "Α", ελψ [A^] ζεκαίλεη ν ραξαθηήξαο "Α" ή ν "^".

Πίλαθαο 6.10: Πίλαθαο εηδηθώλ ραξαθηήξσλ.

Χαξαθηήξαο Δμήγεζε

* Σειεζηήο επαλάιεςεο. Μεδέλ ή πεξηζζφηεξεο θνξέο.

+ Σειεζηήο επαλάιεςεο. Μηα ή πεξηζζφηεξεο θνξέο.

? Σειεζηήο επαλάιεςεο. Μεδέλ ή κηα θνξά.

[ Έλαξμε θιάζεο ραξαθηήξσλ.

] Σέινο θιάζεο ραξαθηήξσλ κόλν όηαλ βξίζθεηαη κεηά από [. Γηαθνξεηηθά, ν απιφο

ραξαθηήξαο ]

{ Έλαξμε ηειεζηή επαλάιεςεο.

} Σέινο ηειεζηή επαλάιεςεο κόλν όηαλ βξίζθεηαη κεηά από {. Γηαθνξεηηθά, ν απιφο

ραξαθηήξαο } .

() Οκαδνπνίεζε.

| Σειεζηήο ελαιιαγήο (OR).

Page 132: Εισαγωγή στα λειτουργικά συστήματα ii

132

^

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

έθθξαζεο.

εκαίλεη άξλεζε φηαλ βξίζθεηαη ζηελ αξρή ηεο θιάζεο ραξαθηήξσλ, δειαδή

ακέζσο κεηά ην "[".

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

$

εκαίλεη ηέινο ζπκβνινζεηξάο φηαλ βξίζθεηαη ζην ηέινο ηεο θαλνληθήο

έθθξαζεο.

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

- εκαίλεη εχξνο (απφ-έσο) φηαλ βξίζθεηαη κέζα ζε θιάζε ραξαθηήξσλ.

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

.

εκαίλεη ν απιφο ραξαθηήξαο "." φηαλ βξίζθεηαη κέζα ζε θιάζε ραξαθηήξσλ.

εκαίλεη ην atom ".", δειαδή νπνηνζδήπνηε ραξαθηήξα, φηαλ βξίζθεηαη ζε

νπνηαδήπνηε άιιε ζέζε.

Μέζα ζε κηα θιάζε ραξαθηήξσλ, (ζρεδφλ) φινη νη εηδηθνί ραξαθηήξεο ράλνπλ ηελ

εηδηθή ζεκαζία ηνπο. πρ: [{}*()/+*?|.] ζεκαίλεη έλαο ραξαθηήξαο απφ

ηνπο {}*()/+*?|.

ε φιεο ηηο πξνεγνχκελεο πεξηπηψζεηο, εαλ ζέινπκε λα αλαηξέζνπκε ηελ εηδηθή ζεκαζία ελφο

ραξαθηήξα, ρξεζηκνπνηνχκε ηνλ ραξαθηήξα "\". Δπίζεο, ν ραξαθηήξαο "\" ζε πνιιέο πεξηπηψζεηο πξνζδίδεη

εηδηθή ζεκαζία ζηνλ ραξαθηήξα πνπ αθνινπζεί. Απηφ ζπλεζίδεηαη ζηηο πεξηζζφηεξεο γιψζζεο

πξνγξακκαηηζκνχ. Γηα παξάδεηγκα, ζηελ C θαη ζηελ Java είλαη ραξαθηεξηζηηθή ε ρξήζε ηνπ \n ην νπνίν

ζεκαίλεη αιιαγή γξακκήο (new line). Ο ίδηνο θαλφλαο επεθηείλεηαη θαη ζηηο θαλνληθέο εθθξάζεηο, κε

δηαθνξεηηθά βέβαηα ζχκβνια. ηνλ Πίλαθα 6.11παξνπζηάδνληαη κεξηθέο πεξηπηψζεηο ρξήζεηο ηνπ "\" ζηηο

Καλνληθέο Δθθξάζεηο.

Πίλαθαο 6.11: Πίλαθαο εηδηθώλ ραξαθηήξσλ κε ην "\".

Χαξαθηήξαο Δμήγεζε

\1 .. \2 Αλαθνξά πίζσ (back reference).

\<, \> Άγθπξα (anchor).

\w πληφκεπζε γηα ην [a-zA-Z0-9_] (word). Υξεζηκνπνηείηαη ρσξίο ηα [],

παξάδεηγκα: \<\w\w\> ζα ηαηξηάμεη ζηηο ιέμεηο κε δπν γξάκκαηα.

\d πληφκεπζε γηα ην [0-9] (digit). Υξεζηκνπνηείηαη ρσξίο ηα [],

παξάδεηγκα: \<\d\d\> ζα ηαηξηάμεη ζηνπο αξηζκνχο κε δπν ςεθία.

\s πληφκεπζε γηα ην θελφ δηάζηεκα (space).

\W, \D, \S Άξλεζε ησλ παξαπάλσ.

6.4 ύλνια θαλνληθώλ εθθξάζεσλ

Τπάξρνπλ δηάθνξα χλνια Καλνληθψλ Δθθξάζεσλ θαη φρη ζε φια ζπκβαηά κεηαμχ ηνπο. Σα δπν βαζηθφηεξα

χλνια Καλνληθψλ Δθθξάζεσλ είλαη απηά πνπ νξίδνληαη απφ ην πξφηππν ηεο IEEE POSIX θαη είλαη ηα:

Βαζηθέο Καλνληθέο Δθθξάζεηο (Basic Regular Expressions) θαη ζπκβνιίδεηαη σο BRE. Δθηεηακέλεο Καλνληθέο Δθθξάζεηο (Extended Regular Expressions) θαη ζπκβνιίδεηαη σο ERE.

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

ζηνπο ζπκβνιηζκνχο πνπ αλαθέξνληαη ζηνλ Πίλαθα 6.12. Οη ηειεζηέο επαλάιεςεο ?, + θαη { } θαζψο θαη ε

Page 133: Εισαγωγή στα λειτουργικά συστήματα ii

133

νκαδνπνίεζε θαη ε ελαιιαγή απαηηνχλ ηνλ ραξαθηήξα "\". ηνλ Πίλαθα 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.

Page 134: Εισαγωγή στα λειτουργικά συστήματα ii

134

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

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, δείηε ην Παξάξηεκα Β.

Page 135: Εισαγωγή στα λειτουργικά συστήματα ii

135

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 δελ εκθαλίδεη θαλέλα απνηέιεζκα. Γηαηί;

Page 136: Εισαγωγή στα λειτουργικά συστήματα ii

136

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. Απηή ε ελέξγεηα απέρεη θαηά πνιχ απφ ηελ ελέξγεηα πνπ ζα εθηειεζηεί ρξεζηκνπνηψληαο ηα εηζαγσγηθά.

Page 137: Εισαγωγή στα λειτουργικά συστήματα ii

137

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

Απηφ ην ρήκα

είλαη Γηαδξαζηηθφ.

Αλαηξέμηε ζηελ

ειεθηξνληθή

έθδνζε.

Page 138: Εισαγωγή στα λειτουργικά συστήματα ii

138

Άζθεζε 2

ρήκα 6.14: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο.

Δμάζθεζε ζην ηεξκαηηθό

Γεκηνπξγήζηε κέζα απφ έλα ηεξκαηηθφ ην αξρείν “telephones” ρξεζηκνπνηψληαο ηνλ vi. Υξεζηκνπνηήζηε

ηελ εληνιή egrep, γηα λα βξείηε ηηο γξακκέο πνπ αληηζηνηρνχλ ζηηο παξαπάλσ εξσηήζεηο. Γηα ηηο εξσηήζεηο 5

θαη 7 ρξεζηκνπνηήζηε ηε ζεκαία -v ηεο grep, ψζηε λα απινπνηήζεηε ηελ θαλνληθή έθθξαζε.

Άζθεζε 3

ρήκα 6.15: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο.

Απηφ ην ρήκα

είλαη Γηαδξαζηηθφ.

Αλαηξέμηε ζηελ

ειεθηξνληθή

έθδνζε.

Απηφ ην ρήκα

είλαη Γηαδξαζηηθφ.

Αλαηξέμηε ζηελ

ειεθηξνληθή

έθδνζε.

Page 139: Εισαγωγή στα λειτουργικά συστήματα ii

139

Πεηξακαηηζηείηε θαη δνθηκάζηε ηηο παξαθάησ θαλνληθέο εθθξάζεηο. Βξείηε ζε ηη αληηζηνηρεί ε θάζε

κηα:

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

Page 140: Εισαγωγή στα λειτουργικά συστήματα ii

140

ρήκα 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

Απηφ ην ρήκα

είλαη Γηαδξαζηηθφ.

Αλαηξέμηε ζηελ

ειεθηξνληθή

έθδνζε.

Page 141: Εισαγωγή στα λειτουργικά συστήματα ii

141

-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).

Page 142: Εισαγωγή στα λειτουργικά συστήματα ii

142

ρήκα 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”. Πξνζνρή, ζηε

δεχηεξε εληνιή δελ μαλανξίδεηαη φλνκα αξρείνπ.

Απηφ ην ρήκα

είλαη Γηαδξαζηηθφ.

Αλαηξέμηε ζηελ

ειεθηξνληθή

έθδνζε.

Page 143: Εισαγωγή στα λειτουργικά συστήματα ii

143

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 ]

Page 144: Εισαγωγή στα λειτουργικά συστήματα ii
Page 145: Εισαγωγή στα λειτουργικά συστήματα ii

145

Κεθάιαην 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 (δειαδή

ζηνλ δίζθν).

Page 146: Εισαγωγή στα λειτουργικά συστήματα ii

146

Created Terminated

Waiting Blocked

Running

Swapped out and Waiting

Swapped out and Blocked

Main Memory

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] ρξεζηκνπνηείηαη γηα λα δεη ν ρξήζηεο ηηο δηεξγαζίεο πνπ εθηεινχληαη ή γηα λα δεη

πιεξνθνξίεο γη’ απηέο.

Page 147: Εισαγωγή στα λειτουργικά συστήματα ii

147

Ζ ζχληαμε ηεο εληνιήο 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. Σν απνηέιεζκα είλαη ην ίδην, αιιά δηαθέξεη σο πξνο ηηο ζηήιεο πνπ

ρξεζηκνπνηνχληαη ζηελ εθηχπσζε.

Page 148: Εισαγωγή στα λειτουργικά συστήματα ii

148

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

Page 149: Εισαγωγή στα λειτουργικά συστήματα ii

149

¦ +-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). Όια ηα ππφινηπα ζηνηρεία

ησλ δπν δηεξγαζηψλ παξακέλνπλ ίδηα, δειαδή ηδηνθηήηεο, ηξέρνλ θαηάινγνο εξγαζίαο, κεηαβιεηέο

πεξηβάιινληνο, αθφκε θαη ε πνξεία εθηέιεζεο.

Page 150: Εισαγωγή στα λειτουργικά συστήματα ii

150

Ο δεχηεξνο ηξφπνο είλαη κε ηε δηαδηθαζία 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 θαίλεηαη ε αληηζηνηρία ζεκάησλ θαη ησλ αληίζηνηρσλ θσδηθψλ.

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

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

Page 151: Εισαγωγή στα λειτουργικά συστήματα ii

151

Πίλαθαο 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

SIGVTALRM Signal raised by timer counting virtual time: "virtual timer

expired" 26

SIGXCPU CPU time limit exceeded 24

SIGXFSZ File size limit exceeded 25

7.2.1 Η εληνιή kill

Μπνξεί ν ρξήζηεο (ή κηα δηεξγαζία) λα ζηείιεη έλα ζήκα ζε κηα δηεξγαζία κε ηελ εληνιή kill [1]. Όηαλ ε

απνζηνιή ηνπ ζήκαηνο γίλεηαη κέζα απφ πξφγξακκα, ηφηε κπνξεί λα γίλεη κε ηελ θιήζε ζπζηήκαηνο (system

call) kill, ε νπνία είλαη αληίζηνηρε κε ηελ εληνιή. Παξφηη ην φλνκα παξαπιαλεί, ε εληνιή kill ΓΔΝ

«ΚΟΣΧΝΔΙ» κηα δηεξγαζία, αιιά ζηέιλεη έλα ζήκα ζε απηήλ.

Page 152: Εισαγωγή στα λειτουργικά συστήματα ii

152

Κάπνηα ζήκαηα έρεη λφεκα λα ηα ζηείιεη ν ρξήζηεο ζε κηα δηεξγαζία, ελψ θάπνηα άιια φρη. Απηά ηα

δεχηεξα ρξεζηκνπνηνχληαη γηα εζσηεξηθνχο ζθνπνχο απφ ην ιεηηνπξγηθφ ζχζηεκα.

Σα πεξηζζφηεξν ζπρλά ρξεζηκνπνηνχκελα ζήκαηα είλαη:

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

Page 153: Εισαγωγή στα λειτουργικά συστήματα ii

153

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 ζηελ νπζία δηαβάδεη απηέο ηηο πιεξνθνξίεο θαη ηηο εκθαλίδεη κε κνξθή πνπ νξίδεηαη απφ ηα

νξίζκαηα πνπ δίλεη ν ρξήζηεο.

Page 154: Εισαγωγή στα λειτουργικά συστήματα ii

154

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).

Page 155: Εισαγωγή στα λειτουργικά συστήματα ii

155

γηα λα δψζεη κηα δηεξγαζία πιεξνθνξίεο ζε θάπνηα ζπγαηξηθή ηεο (πρ:

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

Page 156: Εισαγωγή στα λειτουργικά συστήματα ii

156

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

εληνιή 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 ην απνηέιεζκα δελ εκθαλίδεηαη

"ζηνηρηζκέλν", παξφια απηά πεξηέρνληαη φιεο νη πιεξνθνξίεο.

Page 157: Εισαγωγή στα λειτουργικά συστήματα ii

157

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.

Page 158: Εισαγωγή στα λειτουργικά συστήματα ii

158

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 ηνπ αξρείνπ. Με απηφλ ηνλ ηξφπν

βήκα-βήκα ζα θηάζεη θάπνηα ζηηγκή ζην ηέινο ηνπ αξρείνπ.

Page 159: Εισαγωγή στα λειτουργικά συστήματα ii

159

Βιέπνληαο ηνλ θάθειν 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 ηα δπν παξαθάησ είλαη ηζνδχλακα:

Page 160: Εισαγωγή στα λειτουργικά συστήματα ii

160

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, φπσο παξνπζηάδεηαη ζην

Page 161: Εισαγωγή στα λειτουργικά συστήματα ii

161

ρήκα 7.3. Παξαηεξήζηε φηη ζην ζρήκα (θαη ζε θάζε επφκελν ζρήκα) αλαπαξηζηψληαη κε δηαθνξεηηθά βέιε

νη ξνέο θαλνληθήο εμφδνπ θαη εμφδνπ ιαζψλ.

Program

stdinstdout

stderrShell

Term

inal

(re

ad)

Term

inal

(w

rite

)

ρήκα 7.3: Μηα δηεξγαζία θιεξνλνκεί από ηε γνληθή ηεο ηηο ξνέο εηζόδνπ-εμόδνπ.

ην Γηαδξαζηηθφ ρήκα 7.4 εκθαλίδνληαη ηέζζεξα παξαδείγκαηα εληνιψλ γηα ηελ θαηαλφεζε ηνπ

ηξφπνπ ιεηηνπξγίαο ησλ ξνψλ εηζφδνπ-εμφδνπ θαη ηνπ ηεξκαηηθνχ. ηα δπν πξψηα γηα ιφγνπο απινπνίεζεο

δελ πεξηιακβάλεηαη ε δηαδηθαζία ηνπ θειχθνπο fork-exec, ελψ πεξηιακβάλεηαη ζηα δπν επφκελα. ην

παξαθάησ δηαδξαζηηθφ ζρήκα επηιέμηε έλα απφ ηα ηέζζεξα παξαδείγκαηα (θαηά πξνηίκεζε κε ηε ζεηξά), γηα

λα δείηε ηα βήκαηα πνπ ζπκβαίλνπλ ζε ζρέζε κε ηηο ξνέο εηζφδνπ-εμφδνπ, φηαλ εθηειείηαη κηα εληνιή.

ρήκα 7.4: Η δηαδηθαζία δεκηνπξγίαο ησλ ξνώλ εηζόδνπ-εμόδνπ θαηά ηελ εθηέιεζε κηαο εληνιήο.

7.4.1 Αλαθαηεύζπλζε (Redirection)

Ο ρξήζηεο κπνξεί λα δψζεη δηάθνξεο νδεγίεο πξνο ην θέιπθνο, ψζηε λα αιιάμεη ηηο πξνθαζνξηζκέλεο ξνέο

εηζφδνπ-εμφδνπ. Έηζη, ρξεζηκνπνηψληαο ην ζχκβνιν > νξίδεηαη αιιαγή ηεο θαλνληθήο εμφδνπ. Μεηά απφ ην

ζχκβνιν > πξέπεη λα αθνινπζεί φλνκα αξρείνπ. Έηζη, ε θαλνληθή έμνδνο ηεο εληνιήο ζα αλαθαηεπζπλζεί ζην

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

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

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

Page 162: Εισαγωγή στα λειτουργικά συστήματα ii

162

έμνδφο ηεο ζα απνζεθεπηεί ζην αξρείν file1. ην ρήκα 7.5 παξνπζηάδνληαη ζρεκαηηθά νη ξνέο εηζφδνπ-

εμφδνπ ηνπ παξαδείγκαηνο.

asidirop@aetos:~$ ls -l > file1

asidirop@aetos:~$

ls -l

stdinstdout

Shell

Terminal (read)

Terminal (write)

stderr

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:~$

Page 163: Εισαγωγή στα λειτουργικά συστήματα ii

163

ls -l

stdinstdout

Shell

Terminal (read)

Terminal (write)

stderr

file2

ρήκα 7.6: Αιιαγή ηεο εμόδνπ ιαζώλ πξνο αξρείν.

Πίλαθαο 7.3: Λίζηα κε ηα ζύκβνια αλαθαηεύζπλζεο.

ύκβνιν Πεξηγξαθή

>file

1> file Άιιαμε ην stdout, ψζηε λα «γξάθεη» ζην αξρείν file θαη φρη ζην πξνθαζνξηζκέλν. Σν file,

αλ ππάξρεη, ζα δηαγξαθεί, αλ δελ ππάξρεη ζα δεκηνπξγεζεί.

>>file

1>> file

Άιιαμε ην stdout, ψζηε λα «γξάθεη» ζην αξρείν file θαη φρη ζην πξνθαζνξηζκέλν. Σν file,

αλ ππάξρεη, ΓΔΝ ζα δηαγξαθεί, αλ δελ ππάξρεη ζα δεκηνπξγεζεί. Σα δεδνκέλα απφ ηελ

εληνιή ζα γίλνπλ append ζην file.

2> file Άιιαμε ην stderr, ψζηε λα «γξάθεη» ζην αξρείν file θαη φρη ζην πξνθαζνξηζκέλν. Σν file,

αλ ππάξρεη, ζα δηαγξαθεί, αλ δελ ππάξρεη ζα δεκηνπξγεζεί.

2>> file

Άιιαμε ην stderr, ψζηε λα «γξάθεη» ζην αξρείν file θαη φρη ζην πξνθαζνξηζκέλν. Σν file,

αλ ππάξρεη, ΓΔΝ ζα δηαγξαθεί, αλ δελ ππάξρεη ζα δεκηνπξγεζεί. Σα δεδνκέλα απφ ηελ

εληνιή ζα γίλνπλ append ζην file.

< file Άιιαμε ην stdin, ψζηε λα «δηαβάδεη» απφ ην αξρείν file θαη φρη απφ ην πξνθαζνξηζκέλν

(ηεξκαηηθφ). Αλ δελ ππάξρεη ην file, ηφηε ζα πάξνπκε ζθάικα.

<< STRING

Άιιαμε, ψζηε ην stdin λα «δηαβάδεη» απφ ην θέιπθνο. Σν θέιπθνο ζα πεξηκέλεη λα

πιεθηξνινγήζνπκε δεδνκέλα, κέρξη λα πιεθηξνινγήζνπκε ηε γξακκή STRING. Σφηε, φ,ηη

πιεθηξνινγήζακε ζα ην ζηείιεη ζην stdin ηεο δηεξγαζίαο.

1>&2 ηείιε ηελ έμνδν απφ ην 1 (stdout) ζην 2 (stderr). ηε γεληθή πεξίπησζε, x>&y, ζηείιε ην x

ζην y.

Δάλ ε εληνιή (δηεξγαζία) ζηείιεη δεδνκέλα θαη ζηελ θαλνληθή έμνδν, αιιά θαη ζηελ έμνδν ιαζψλ,

ηφηε ην θάζε ηη ζα απνζεθεπηεί ή ζα εκθαληζηεί ζηε ξνή πνπ ηνπ αληηζηνηρεί.

Page 164: Εισαγωγή στα λειτουργικά συστήματα ii

164

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:~$

ls -l

stdinstdout

Shell

Terminal (read)

Terminal

(write)

stderr

file2

file1

ρήκα 7.7: Αιιαγή ηεο θαλνληθήο εμόδνπ θαη ηεο εμόδνπ ιαζώλ πξνο δηαθνξεηηθά αξρεία.

Page 165: Εισαγωγή στα λειτουργικά συστήματα ii

165

ηελ ηειεπηαία γξακκή ηνπ Πίλαθα 7.3 αλαθέξεηαη ε δπλαηφηεηα αλαθαηεχζπλζεο κηαο ξνήο ζε κηα

άιιε. Με ηελ παξαθάησ εληνιή αλαθαηεπζχλεηαη ε έμνδνο ιαζψλ ζηελ θαλνληθή έμνδν (ρήκα 7.8). Απφ ην

απνηέιεζκα δελ είλαη πξνθαλέο ηη ζπλέβε, δηφηη θαη νη δπν ξνέο έηζη θη αιιηψο αληηζηνηρνχλ ζην ηεξκαηηθφ.

Όκσο απηφ πνπ ζπλέβε εζσηεξηθά είλαη λα δηαγξαθεί ε ζέζε 2 ηνπ πίλαθα κε ηα αλνηρηά αξρεία θαη λα

αληηθαηαζηαζεί ην πεξηερφκελφ ηεο κε φ,ηη πεξηέρεη ε ζέζε 1 (θαλνληθή έμνδνο).

asidirop@aetos:~$ ls /foo 2>&1

ls: cannot access /foo: No such file or directory

asidirop@aetos:~$

ls -l

stdinstdout

Shell

Terminal (read)

Terminal (write)

stderr

ρήκα 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

........

Page 166: Εισαγωγή στα λειτουργικά συστήματα ii

166

ls -l

stdinstdout

Shell

Terminal (read)

Terminal

(write)

stderr

file1

ρήκα 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).

ls -l

stdinstdout

Shell

Terminal (read)

Terminal

(write)

stderr

file1

ρήκα 7.10: Αιιαγή ηεο εμόδνπ ιαζώλ πξνο ηελ θαλνληθή έμνδν θαη ηεο θαλνληθήο εμόδνπ πξνο αξρείν.

Page 167: Εισαγωγή στα λειτουργικά συστήματα ii

167

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

A

Shell

Terminal (read)

Terminal (write)

BC

ρήκα 7.11: Βαζηθή κνξθή δηαζσιήλσζεο.

Δδψ πξέπεη λα παξαηεξεζεί φηη κε ηε δηαζσιήλσζε (|) αιιάδεη κφλν ε θαλνληθή έμνδνο ηεο εληνιήο

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

παξακέλεη φπσο ήηαλ, δειαδή απηφ πνπ θιεξνλνκήζεθε απφ ην γνληθφ θέιπθνο, δειαδή ην ηεξκαηηθφ.

Αο δνχκε κεξηθά παξαδείγκαηα. Έζησ ε απιή πεξίπησζε:

asidirop@aetos:~$ ls | wc

7 7 42

asidirop@aetos:~$

Page 168: Εισαγωγή στα λειτουργικά συστήματα ii

168

Όπσο θαίλεηαη ζην ρήκα 7.12, ην θέιπθνο δεκηνπξγεί δπν ζπγαηξηθέο δηεξγαζίεο, ηελ ls θαη ηελ wc.

Γεκηνπξγείηαη έλα pipe ζην νπνίν γξάθεη ε ls θαη απφ ην νπνίν δηαβάδεη ε wc. Ζ εληνιή ls ζα γξάςεη ζην pipe

ηε ιίζηα κε ηα νλφκαηα ησλ αξρείσλ. Ζ wc ζα δηαβάζεη απηή ηε ιίζηα απφ ηελ θαλνληθή ηεο είζνδν. Ζ

ιεηηνπξγία ηεο wc είλαη λα κεηξά γξακκέο, ιέμεηο, ραξαθηήξεο. Έηζη ζα ηα κεηξήζεη (απηά πνπ ζα δηαβάζεη

απφ ηελ είζνδφ ηεο) θαη ζα ηππψζεη ζηελ θαλνληθή έμνδν (δειαδή ζην ηεξκαηηθφ) ηνπο ηξεηο αξηζκνχο.

ls

Shell

Terminal (read)

Terminal (write)

wc

BAKS

dbii_bin

soft

DBII

File1

test

tests

7 7 42

ρήκα 7.12: Παξάδεηγκα δηαζσιήλσζεο κε ls θαη wc.

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

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

ηέηνην ηξφπν ψζηε ε πξψηε λα δψζεη κήλπκα ζθάικαηνο:

asidirop@aetos:~$ ls /foo | wc

access /foo: No such file or directory

0 0 0

asidirop@aetos:~$

ls /foo

Shell

Terminal (read)

Terminal (write)

wc

Cannot access /foo: No such file or directory

0 0 0

ρήκα 7.13: Παξάδεηγκα δηαζσιήλσζεο κε ls θαη wc (πεξίπησζε ιάζνπο).

Page 169: Εισαγωγή στα λειτουργικά συστήματα ii

169

Απηφ πνπ ζπκβαίλεη είλαη λα εκθαληζηεί ζην ηεξκαηηθφ κήλπκα ζθάικαηνο θαη ε εληνιή 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) πνπ εθηεινχληαη ζην κεράλεκα?

Page 170: Εισαγωγή στα λειτουργικά συστήματα ii

170

Άζθεζε 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 & ζην ηέινο κηαο εληνιήο δειώλεη ζην θέιπθνο λα εθηειέζεη ηελ εληνιή, θαη λα ηε βάιεη λα

εθηειείηαη ζην παξαζθήλην (δειαδή ε εληνιή δελ ζα κπνξεί λα δηαβάζεη από ην ηεξκαηηθό, αλ ην

ζειήζεη). Σν ηεξκαηηθό παξακέλεη ζηνλ έιεγρν ηνπ θειύθνπο.

Page 171: Εισαγωγή στα λειτουργικά συστήματα ii

171

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

Page 172: Εισαγωγή στα λειτουργικά συστήματα ii

172

ηνπ (ζηέιλεη ζε φια ηα 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) φπσο ην

θέιπθνο, γηα λα ην αληηιεθζνχκε.

Πιεθηξνινγήζηε θείκελν. Πφηε ζα ζηακαηήζεη λα δηαβάδεη ε δηεξγαζία;

Page 173: Εισαγωγή στα λειτουργικά συστήματα ii

173

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

ηξόπν κε ηνλ νπνίν ζα δηάβαδε δεδνκέλα από έλα αξρείν. Αλ κέζα από έλα πξόγξακκα ζέιακε λα

δηαβάζνπκε όια ηα πεξηερόκελα ελόο αξρείνπ, ζα δηαβάδακε 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 κεηξάεη ην κέγεζνο ηνπ

κελχκαηνο ζθάικαηνο;

Page 174: Εισαγωγή στα λειτουργικά συστήματα ii

174

Άζθεζε 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 ]

Page 175: Εισαγωγή στα λειτουργικά συστήματα ii

175

Κεθάιαην 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.

Page 176: Εισαγωγή στα λειτουργικά συστήματα ii

176

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

ζην 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 γηα αλάγλσζε θαη

ζα δηαβάδεη απφ εθεί γξακκή-γξακκή. Κάζε γξακκή αληηζηνηρεί ζε κηα εληνιή. πλεπψο, κεηά ηελ αλάγλσζε

κηαο γξακκήο, ην θέιπθνο εθηειεί ηελ εληνιή πνπ πεξηέρεηαη ζε απηήλ. Έηζη, είλαη ην ίδην κε ην λα έγξαθε ν

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

αξρείν.

Page 177: Εισαγωγή στα λειτουργικά συστήματα ii

177

Όηαλ έλα αξρείν πεξηέρεη 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

Page 178: Εισαγωγή στα λειτουργικά συστήματα ii

178

Άξα, αλ ε πξψηε γξακκή ηνπ αξρείνπ 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), ην θέιπθνο εκθαλίδεη ην κήλπκα ζθάικαηνο.

Page 179: Εισαγωγή στα λειτουργικά συστήματα ii

179

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

Page 180: Εισαγωγή στα λειτουργικά συστήματα ii

180

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) θαη δελ κπνξεί ν ρξήζηεο

λα θαζνξίζεη θάπνηνλ δηαθνξεηηθφ ηχπν.

Page 181: Εισαγωγή στα λειτουργικά συστήματα ii

181

Χο νλόκαηα κεηαβιεηώλ ν ρξήζηεο κπνξεί λα ζέζεη νπνηνλδήπνηε ζπλδπαζκό γξακκάησλ θαη

αξηζκώλ (αξρίδνληαο από γξάκκα), ελώ από ηνπο εηδηθνύο ραξαθηήξεο ν κόλνο πνπ κπνξεί λα

ρξεζηκνπνηείηαη κε αζθάιεηα είλαη ε ππνγξάκκηζε “_”. Γελ επηηξέπνληαη θελά θαη άιινη εηδηθνί

ραξαθηήξεο πνπ κπνξεί λα έρνπλ θάπνηα εηδηθή ζεκαζία γηα ην θέιπθνο (π.ρ. $ \ # ; θ.ν.θ.).

Σν θέιπθνο sh (θαη ην bash) ρεηξίδεηαη ηηο κεηαβιεηέο πεξηβάιινληνο κε ηνλ ίδην ηξφπν πνπ ρεηξίδεηαη

ηηο κεηαβιεηέο ηνπ shell. Γηα λα δηαρσξίδνληαη εχθνια, ζπλεζίδεηαη λα ρξεζηκνπνηνχληαη γηα ηηο κεηαβιεηέο

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

Οη κεηαβιεηέο ηνπ θειύθνπο απνζεθεύνληαη ζηε κλήκε πνπ ρξεζηκνπνηεί ην ίδην ην shell, είλαη

ηνπηθέο θαη δελ θιεξνδνηνύληαη από ηηο δηεξγαζίεο ζηηο ζπγαηξηθέο.

Οη κεηαβιεηέο πεξηβάιινληνο απνζεθεύνληαη από ηνλ ππξήλα ζην ρώξν κλήκεο πνπ

δηαηεξνύληαη ηα δηάθνξα ζηνηρεία ησλ δηεξγαζηώλ θαη θιεξνδνηνύληαη από ηηο δηεξγαζίεο ζηηο

ζπγαηξηθέο ηνπο.

Ο νξηζκφο κηαο κεηαβιεηήο γίλεηαη κε ηελ αξρηθνπνίεζε ηεο:

a=5

Με ην παξαπάλσ νξίδεηαη ε κεηαβιεηή κε φλνκα a θαη απνζεθεχεηαη ε ηηκή 5 σο αιθαξηζκεηηθφ

(string). Απφιπηα ηζνδχλακν κε ην πξνεγνχκελν είλαη θαη ην:

a="5"

Ππιν και μεηά ηον σαπακηήπα "=" δεν ππέπει να ςπάπσοςν κενά.

Δάλ ζηελ ηηκή πξνο εθρώξεζε πεξηέρνληαη εηδηθνί ραξαθηήξεο (πρ: space * ; < > | θ.ν.θ.) ηόηε

πξέπεη λα ρξεζηκνπνηεζνύλ εηζαγσγηθά (κνλά ή δηπιά) ή λα αλαηξεζεί ε εηδηθή ζεκαζία απηώλ

ησλ ραξαθηήξσλ κε ην \ (αλάπνδε θάζεηνο - back slash).

8.2.1 θάικαηα θαηά ηελ εθρώξεζε

ηελ πεξίπησζε πνπ πξνζπαζεί ν ρξήζηεο λα θάλεη εθρψξεζε αιιά ρξεζηκνπνηεζνχλ κε ιάζνο ηξφπν ηα

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

asidirop@dellpc:~$ a=5 Β # Δθρώξεζε 1

Page 182: Εισαγωγή στα λειτουργικά συστήματα ii

182

Β: 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 εθρσξεί ζε κηα κεηαβιεηή νηηδήπνηε εηζάγεηαη απφ ηελ θαλνληθή είζνδν (ζπλήζσο ην

ηεξκαηηθφ), αθνινπζνχκελν απφ κηα αιιαγή γξακκήο, δειαδή δηαβάδεη απφ ην ηεξκαηηθφ κηα γξακκή.

Page 183: Εισαγωγή στα λειτουργικά συστήματα ii

183

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) πνπ αθνινπζεί σο

όλνκα κεηαβιεηήο θαη λα ηελ αληηθαηαζηήζεη κε ηελ ηηκή ηεο.

Page 184: Εισαγωγή στα λειτουργικά συστήματα ii

184

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). Θα πξέπεη πξηλ απφ θάζε εκθάληζε εηδηθνχ

ραξαθηήξα λα ρξεζηκνπνηείηαη ε αλάπνδε θάζεηνο (ηειεπηαία εληνιή). Απηή ε κέζνδνο, βέβαηα, δελ είλαη

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

Page 185: Εισαγωγή στα λειτουργικά συστήματα ii

185

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) ή

ελαιιαθηηθά λα ρξεζηκνπνηεζνχλ κνλά εηζαγσγηθά:

Page 186: Εισαγωγή στα λειτουργικά συστήματα ii

186

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$

Page 187: Εισαγωγή στα λειτουργικά συστήματα ii

187

ην παξαπάλσ παξάδεηγκα ην θέιπθνο απνηπγράλεη λα ηππψζεη ηε κεηαβιεηή $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, ηφηε ε κεηαβιεηή ζα πεξηέρεη απηφ πνπ

Page 188: Εισαγωγή στα λειτουργικά συστήματα ii

188

έζηεηιε ε εληνιή ζηελ θαλνληθή έμνδν ηελ ψξα ηεο αλάζεζεο. Πξνθαλψο, φζεο θνξέο θαη λα εκθαλίζνπκε ηε

κεηαβιεηή ζα πεξηέρεη ηελ ψξα θαηά ηε ζηηγκή ηεο αλάζεζεο θαη φρη ηελ ψξα θαηά ηε ζηηγκή ηεο ρξήζεο.

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

Δπηπιένλ, κέζα ζηα αλάπνδα εηζαγσγηθά κπνξεί λα ζπκπεξηιεθζεί νπνηνζδήπνηε ζπλδπαζκφο

εληνιψλ κε δηαζσιήλσζε, αλαθαηεχζπλζε θαη νηηδήπνηε άιιν ζα κπνξνχζε λα γξαθηεί ζηε γξακκή

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

(δηεξγαζία), ην νπνίν είλαη ππεχζπλν λα εθηειέζεη ηηο εληνιέο πνπ πεξηθιείνληαη ζηα εηζαγσγηθά. Ζ θαλνληθή

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

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

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$

Page 189: Εισαγωγή στα λειτουργικά συστήματα ii

189

Υξεηάδεηαη ηδηαίηεξε πξνζνρή! Όηαλ ζε έλα θέιπθνο ρξεζηκνπνηνύληαη δπλαηόηεηεο ηνπ 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 απαηηεί θάζε ηειεζηήο θαη ηειεζηένο λα απνηειεί

δηαθνξεηηθφ φξηζκα ζηελ εληνιή.

Page 190: Εισαγωγή στα λειτουργικά συστήματα ii

190

Δθφζνλ ε 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

Page 191: Εισαγωγή στα λειτουργικά συστήματα ii

191

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). Όκσο αλ είρακε βάιεη ηνλ

Page 192: Εισαγωγή στα λειτουργικά συστήματα ii

192

ραξαθηήξα $ πξηλ απφ ηε κεηαβιεηή 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)). Πξνζνρή, ζε απηήλ

ηελ πεξίπησζε δελ ρξεζηκνπνηείηαη ν ραξαθηήξαο $ πξηλ απφ ηηο παξελζέζεηο.

Page 193: Εισαγωγή στα λειτουργικά συστήματα ii

193

Πίλαθαο 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 (ζα εκθαλίδεη ηα

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

ησλ θξπθψλ αξρείσλ, ην πιήζνο ησλ θξπθψλ θαηαιφγσλ.

Page 194: Εισαγωγή στα λειτουργικά συστήματα ii

194

Άζθεζε 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;

Page 195: Εισαγωγή στα λειτουργικά συστήματα ii

195

Άζθεζε 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'

Page 196: Εισαγωγή στα λειτουργικά συστήματα ii

196

Άζθεζε 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"

Page 197: Εισαγωγή στα λειτουργικά συστήματα ii

197

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

Page 198: Εισαγωγή στα λειτουργικά συστήματα ii
Page 199: Εισαγωγή στα λειτουργικά συστήματα ii

199

Παξάξηεκα Α

Α Ο επεμεξγαζηήο θεηκέλνπ 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 Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη ν θέξζνξαο κεηαθέξεηαη ακέζσο κεηά απφ ηελ

ηξέρνπζα ζέζε.

Page 200: Εισαγωγή στα λειτουργικά συστήματα ii

200

I

Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη ν θέξζνξαο κεηαθέξεηαη ζηελ αξρή ηεο

ηξέρνπζαο γξακκήο. Αλ ππάξρνπλ ζηεινζέηεο ζηελ αξρή ηεο γξακκήο, ν θέξζνξαο ζα

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

A Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη ν θέξζνξαο κεηαθέξεηαη ζην ηέινο ηεο ηξέρνπζαο

γξακκήο κεηά απφ ηνλ ηειεπηαίν ραξαθηήξα.

o Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη λέα γξακκή. Γίλεηαη εηζαγσγή λέαο γξακκήο κεηά

απφ ηελ ηξέρνπζα θαη ν θέξζνξαο κεηαθέξεηαη ζε απηήλ ηε γξακκή.

Ο Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη λέα γξακκή. Γίλεηαη εηζαγσγή λέαο γξακκήο πξηλ

απφ ηελ ηξέρνπζα θαη ν θέξζνξαο κεηαθέξεηαη ζε απηήλ ηε γξακκή.

ηνλ Πίλαθα Α.2 βιέπνπκε ηηο πεξηζζφηεξν ζπρλέο εληνιέο γηα ηνλ ρεηξηζκφ ηεο επεμεξγαζίαο,

δειαδή εληνιέο γηα αληηγξαθή-επηθφιιεζε, αλαίξεζε, επαλάιεςε θηι.

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

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

νινθιεξσζεί ε πιεθηξνιφγεζή ηεο.

Πίλαθαο Α.2: Βαζηθέο Δληνιέο Δπεμεξγαζίαο.

Δληνιή Λεηηνπξγία

u Αλαίξεζε (undo).

. Δπαλάιεςε ηειεπηαίαο εληνιήο (redo).

dd Γηαγξαθή ηεο ηξέρνπζαο γξακκήο θαη αληηγξαθή ηεο ζηελ πξνζσξηλή κλήκε (buffer ή

clipboard).

Ndd

Δπαλάιεςε ηεο εληνιήο Γηαγξαθήο Ν θνξέο. Οπζηαζηηθά δηαγξαθή Ν γξακκψλ

μεθηλψληαο απφ ηελ ηξέρνπζα. Οη γξακκέο ζα αληηγξαθνχλ ζηελ πξνζσξηλή κλήκε (buffer

ή clipboard).

dw Γηαγξαθή ηεο ηξέρνπζαο ιέμεο θαη αληηγξαθή ηεο ζηελ πξνζσξηλή κλήκε (buffer ή

clipboard).

Νdw Γηαγξαθή Ν ιέμεσλ μεθηλψληαο απφ ηελ ηξέρνπζα ιέμε θαη αληηγξαθή ηνπο ζηελ

πξνζσξηλή κλήκε (buffer ή clipboard).

D Γηαγξαθή απφ ην ζεκείν ηνπ θέξζνξα κέρξη ην ηέινο γξακκήο θαη αληηγξαθή απηψλ πνπ

δηαγξάθεθαλ ζηελ πξνζσξηλή κλήκε (buffer ή clipboard).

ND Γηαγξαθή απφ ην ζεκείν ηνπ θέξζνξα θαη ησλ επφκελσλ Ν-1 γξακκψλ θαη αληηγξαθή

απηψλ πνπ δηαγξάθεθαλ ζηελ πξνζσξηλή κλήκε (buffer ή clipboard).

yy Αληηγξαθή ηεο ηξέρνπζαο γξακκήο ζηελ πξνζσξηλή κλήκε (buffer ή clipboard).

Νyy Αληηγξαθή Ν γξακκψλ (μεθηλψληαο απφ ηελ ηξέρνπζα γξακκή) ζηελ πξνζσξηλή κλήκε

(buffer ή clipboard).

yw Αληηγξαθή Ν γξακκψλ (μεθηλψληαο απφ ηελ ηξέρνπζα γξακκή) ζηελ πξνζσξηλή κλήκε

(buffer ή clipboard).

Νyw Αληηγξαθή Ν ιέμεσλ μεθηλψληαο απφ ηελ ηξέρνπζα ιέμε ζηελ πξνζσξηλή κλήκε (buffer ή

clipboard).

Τ Αληηγξαθή απφ ην ζεκείν ηνπ θέξζνξα κέρξη ην ηέινο γξακκήο ζηελ πξνζσξηλή κλήκε

(buffer ή clipboard).

Τ Αληηγξαθή απφ ην ζεκείν ηνπ θέξζνξα θαη ησλ επφκελσλ Ν-1 γξακκψλ ζηελ πξνζσξηλή

κλήκε (buffer ή clipboard).

Page 201: Εισαγωγή στα λειτουργικά συστήματα ii

201

P

Δπηθφιιεζε ησλ πεξηερνκέλσλ ηεο πξνζσξηλήο κλήκεο πξηλ ηνλ θέξζνξα. Αλ ε πξνζσξηλή

κλήκε πεξηέρεη νιφθιεξεο γξακκέο, ηφηε γίλεηαη εηζαγσγή γξακκψλ πξηλ ηελ ηξέρνπζα

γξακκή.

p

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

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

ηξέρνπζα γξακκή.

x Γηαγξαθή ηνπ ραξαθηήξα πνπ βξίζθεηαη θάησ απφ ηνλ θέξζνξα θαη αληηγξαθή ηνπ ζηελ

πξνζσξηλή κλήκε.

Nx Γηαγξαθή ηνπ ραξαθηήξα πνπ βξίζθεηαη θάησ απφ ηνλ θέξζνξα θαη ησλ επφκελσλ Ν-1 (ηεο

ηξέρνπζαο γξακκήο) θαη αληηγξαθή ηνπο ζηελ πξνζσξηλή κλήκε.

cw

Αληηθαηάζηαζε ηεο ηξέρνπζαο ιέμεο. Γηαγξάθεηαη ε ηξέρνπζα ιέμε θαη κπαίλνπκε ζε

«Καηάζηαζε Δηζαγσγήο Κεηκέλνπ» γηα ηελ πιεθηξνιφγεζε. Θα πξέπεη λα παηεζεί ην

πιήθηξν Esc γηα ηέινο αληηθαηάζηαζεο.

Ncw

Αληηθαηάζηαζε ηεο ηξέρνπζαο ιέμεο θαη ησλ Ν-1 επφκελσλ ιέμεσλ. Γηαγξάθνληαη νη Ν

ιέμεηο θαη κπαίλνπκε ζε «Καηάζηαζε Δηζαγσγήο Κεηκέλνπ» γηα ηελ πιεθηξνιφγεζε. Θα

πξέπεη λα παηεζεί ην πιήθηξν Esc γηα ηέινο αληηθαηάζηαζεο.

r Αληηθαηάζηαζε ηνπ ηξέρνληνο ραξαθηήξα (πνπ βξίζθεηαη θάησ απφ ηνλ θέξζνξα). Ακέζσο

κεηά ην "r" ζα πξέπεη λα παηήζνπκε ηνλ ραξαθηήξα αληηθαηαζηάηε.

Νr

Αληηθαηάζηαζε ηνπ ηξέρνληνο ραξαθηήξα (πνπ βξίζθεηαη θάησ απφ ηνλ θέξζνξα) θαη ησλ

Ν-1 επφκελσλ. Ακέζσο κεηά ην "r" ζα πξέπεη λα παηήζνπκε ηνλ ραξαθηήξα

αληηθαηαζηάηε. Θα γίλνπλ Ν αληηθαηαζηάζεηο.

~ Μεηαηξνπή ηνπ ηξέρνληνο ραξαθηήξα (πνπ βξίζθεηαη θάησ απφ ηνλ θέξζνξα) απφ πεδφ ζε

θεθαιαίν ή ην αληίζηξνθν.

Ν~ Μεηαηξνπή ηνπ ηξέρνληνο ραξαθηήξα θαη ησλ Ν-1 επφκελσλ απφ πεδνχο ζε θεθαιαίνπο ή

ην αληίζηξνθν.

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

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

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

κνλνςήθηνο, δηςήθηνο ή νπνηνπδήπνηε κεγέζνπο. Παξάδεηγκα, αλ παηήζνπκε "16p", ζα γίλεη 16 θνξέο ε

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

"12~", ζα κεηαηξαπνχλ 12 ραξαθηήξεο απφ πεδνί ζε θεθαιαίνπο (ή ην αληίζηξνθν).

ηελ «Καηάζηαζε Δηζαγσγήο Δληνιψλ», άιιεο εληνιέο αληηζηνηρνχλ ζε πεδά γξάκκαηα θαη άιιεο ζε

θεθαιαία. Παξάδεηγκα, είλαη δηαθνξεηηθή ε εληνιή "i" απφ ηελ εληνιή "I". Γηα απηφ απαηηείηαη πξνζνρή ζηε

ρξήζε ηνπ "Caps Lock" θαη θαιφ είλαη λα είλαη πάληα απελεξγνπνηεκέλν.

Δπίζεο, ν vi, δελ θαηαιαβαίλεη εληνιέο ζηα ειιεληθά. Παξάδεηγκα, αλ έρνπκε επηιεγκέλν ην ειιεληθφ

πιεθηξνιφγην, ηφηε ην πιήθηξν "i" ζε θαηάζηαζε Δληνιψλ ζα αληηζηνηρεί ζηνλ ραξαθηήξα "η" (γηψηα κηθξφ),

ην νπνίν γηα ηνλ vi δελ είλαη εληνιή. Τπάξρεη, βέβαηα, ε δπλαηφηεηα λα ξπζκηζηεί ν vi, ψζηε λα θαηαιαβαίλεη

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

ιεηηνπξγία θαη δελ πεξηγξάθνληαη ζην παξφλ.

Τπάξρνπλ πάξα πνιιέο εληνιέο κεηαθίλεζεο. Θπκεζείηε πσο, φηαλ δεκηνπξγήζεθε ν vi δελ ππήξραλ

πνληίθηα. Δπίζεο, φια ηα πιεθηξνιφγηα δελ είραλ πιήθηξα κεηαθίλεζεο (βειάθηα) ή θαη αλ είραλ, δελ ήηαλ

φια ζπκβαηά κεηαμχ ηνπο. ηνλ Πίλαθα Α.3 αλαθέξνπκε κεξηθέο κφλν απφ ηηο εληνιέο κεηαθίλεζεο.

Page 202: Εισαγωγή στα λειτουργικά συστήματα ii

202

Πίλαθαο Α.3: Δληνιέο Μεηαθίλεζεο ζε "Καηάζηαζε Δληνιώλ".

Δληνιή Λεηηνπξγία

h,j,k,l Μεηαθίλεζε αξηζηεξά (←), θάησ (↓), επάλσ (↑), δεμηά (→). Δίλαη αληίζηνηρα κε ηα

πιήθηξα κεηαθίλεζεο ηα νπνία δνπιεχνπλ θαη απηά ζε φιεο ηηο λέεο εθδφζεηο ηνπ vi.

^ Μεηαθίλεζε ζηελ αξρή γξακκήο.

$ Μεηαθίλεζε ζην ηέινο γξακκήο.

G Μεηαθίλεζε ζηελ ηειεπηαία γξακκή ηνπ αξρείνπ.

NG Μεηαθίλεζε ζηε N-νζηή γξακκή ηνπ αξρείνπ (πρ 5G ζηελ 5ε γξακκή).

w Μεηαθίλεζε ζηελ επφκελε ιέμε, ζπκπεξηιακβάλνληαο σο ιέμε θαη ηα ζεκεία ζηίμεο.

W Μεηαθίλεζε ζηελ επφκελε ιέμε, αγλνψληαο ηα ζεκεία ζηίμεο.

e,Δ Μεηαθίλεζε ην ηέινο ηεο ιέμεο, ζπκπεξηιακβάλνληαο ή φρη ηα ζεκεία ζηίμεο.

b,B Μεηαθίλεζε ζηελ πξνεγνχκελε ιέμε ζπκπεξηιακβάλνληαο ή φρη ηα ζεκεία ζηίμεο.

Ζ Μεηαθίλεζε ζηελ πξψηε γξακκή πνπ θαίλεηαη ζηελ νζφλε (κπνξεί λα είλαη ε πξψηε

γξακκή ηνπ αξρείνπ ή φρη).

% Μεηαθίλεζε ζηελ παξέλζεζε ( "(", ")" ) ή αγθχιε( "[", "]" ) ή άγθηζηξν ( "{", "}" ) πνπ

ηαηξηάδεη.

(, ) Μεηαθίλεζε ζηελ πξνεγνχκελε ή επφκελε πξφηαζε.

{, } Μεηαθίλεζε ζηελ αξρή ηεο ηξέρνπζαο ή ηεο επφκελεο παξαγξάθνπ.

Όια ηα παξαπάλσ κπνξνχλ λα ζπλδπαζηνχλ κε ηελ επαλάιεςε εληνιήο, πρ: "3}" ζα κεηαθέξεη ηνλ

θέξζνξα 3 παξαγξάθνπο κεηά. Δπίζεο, κπνξνχλ λα ζπλδπαζηνχλ κε ηηο εληνιέο δηαγξαθήο ή αληηγξαθήο.

Παξάδεηγκα, έρνληαο ηνλ θέξζνξα ζε έλα άγθηζηξν πνπ αλνίγεη ({), αλ παηήζνπκε "d%", ζα δηαγξάςεη κέρξη

ην άγθηζηξν πνπ θιείλεη. Αλ ζε κηα παξάγξαθν παηήζνπκε "3y}", ζα αληηγξάςεη ηηο επφκελεο 3

παξαγξάθνπο.

Καηάζηαζε Εληνιώλ

(command mode)

Καηάζηαζε Εηζαγωγήο

(insert mode)

Esc

I, i, A, a, o, O

Καηάζηαζε Αλαδήηεζεο

(search mode)

Καηάζηαζε Γξακκήο

Εληνιώλ

(command line mode)

Γξακκή εληνιώλ

θειύθνπο

(shell command mode)

:Enter or Esc

/,?Enter or Esc

!

ρήκα Α.1: Οη θαηαζηάζεηο ιεηηνπξγίαο ηνπ vi.

Δθηφο απφ ηηο δπν βαζηθέο θαηαζηάζεηο ιεηηνπξγίαο πνπ πεξηγξάςακε (Δηζαγσγήο θαη Δληνιψλ),

ππάξρνπλ θαη άιιεο θαηαζηάζεηο ιεηηνπξγίαο. Κάπνηεο εληνιέο είηε κπνξεί λα είλαη πεξίπινθεο είηε πνιχ

Page 203: Εισαγωγή στα λειτουργικά συστήματα ii

203

ζεκαληηθέο, νπφηε θαη πξέπεη λα ηηο βιέπνπκε θαζψο ηηο πιεθηξνινγνχκε. Έηζη, ππάξρεη ε «Καηάζηαζε

Γξακκήο Δληνιψλ». ε απηήλ ηελ θαηάζηαζε κπνξνχκε λα κεηαβνχκε παηψληαο ηελ εληνιή ":" φηαλ

βξηζθφκαζηε ζε «Καηάζηαζε Δληνιψλ». Σφηε ζηελ ηειεπηαία γξακκή ηνπ ηεξκαηηθνχ εκθαλίδεηαη ν

ραξαθηήξαο ":" θαη αλακέλεη λα πιεθηξνινγεζεί εληνιή. Οη εληνιέο ζε «Καηάζηαζε Γξακκήο Δληνιψλ»

είλαη δηαθνξεηηθέο απφ ηηο εληνιέο ζε «Καηάζηαζε Δληνιψλ».

ε απηήλ ηελ θαηάζηαζε, νη δπν πνιχ ζεκαληηθέο εληνιέο είλαη ε εληνιή γηα απνζήθεπζε ηνπ

αξρείνπ θαη γηα ηεξκαηηζκφ ηνπ πξνγξάκκαηνο.

Πίλαθαο Α.4: Δληνιέο ζε "Καηάζηαζε Γξακκήο Δληνιώλ".

Δληνιή Λεηηνπξγία

:w Απνζήθεπζε ηνπ αξρείνπ (write).

:w

filename

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

"Απνζήθεπζε Χο" ή "Save As". Σν φλνκα αξρείνπ κπνξεί λα είλαη κφλν φλνκα,

νπφηε θαη ζα απνζεθεπηεί ζηνλ ηξέρνληα θάθειν ή δηαδξνκή (απφιπηε ή ζρεηηθή)

πξνο φλνκα αξρείνπ. Παξαδείγκαηα: :w file.txt ή :w /tmp/file2.txt ή :w ../file3.txt

:q

Έμνδνο απφ ην πξφγξακκα (quit). ηελ πεξίπησζε πνπ δελ έρεη απνζεθεπηεί ε

ηειεπηαία ηξνπνπνίεζε ηνπ αξρείνπ, ζα εκθαληζηεί κήλπκα πξνεηδνπνίεζεο θαη δελ

ζα εθηειεζηεί ε ιεηηνπξγία εμφδνπ.

:q! Έμνδνο απφ ην πξφγξακκα αγλνψληαο ηπρφλ πξνεηδνπνίεζε. Θα ηεξκαηίζεη ηνλ vi

αθφκε θαη αλ δελ έρεη απνζεθεπηεί ε ηειεπηαία έθδνζε ηνπ αξρείνπ.

:w!

Απνζήθεπζε ηνπ αξρείνπ θαη αγλφεζε πξνεηδνπνίεζεο. πλήζσο πξνθχπηεη

πξνεηδνπνίεζε γηα κεηαβνιή ελφο αξρείνπ πνπ έρεη νξηζηεί "κφλν γηα αλάγλσζε"

(read-only).

:wq Απνζήθεπζε ηνπ αξρείνπ θαη κεηά έμνδνο.

Απφ ηελ «Καηάζηαζε γξακκήο εληνιψλ» βγαίλνπκε απηφκαηα κε ηελ εθηέιεζε ηεο εληνιήο, δειαδή

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

εληνιήο, αιιά ηειηθά δελ επηζπκνχκε ηελ εθηέιεζή ηεο, κπνξνχκε λα παηήζνπκε "Esc", νπφηε θαη

αθπξψλεηαη ε εληνιή θαη επηζηξέθνπκε ζε «Καηάζηαζε Δληνιψλ».

ηελ Καηάζηαζε Γξακκήο Δληνιψλ, ν vi δέρεηαη θαη φιεο ζρεδφλ ηηο εληνιέο ηνπ πξνγξάκκαηνο sed.

Όληαο ζε «Καηάζηαζε Γξακκήο Δληνιψλ», κπνξνχκε λα πιεθηξνινγήζνπκε ηνλ ραξαθηήξα "!" θαη

κεηά κηα εληνιή ηνπ θειχθνπο. Παξάδεηγκα:!ls -l. Ο vi ζα εθηειέζεη έλα θέιπθνο θαη κέζα ζε απηφ ηελ

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

"Enter" γηα επηζηξνθή ζηνλ vi θαη ζηελ «Καηάζηαζε Δληνιψλ».

Απφ «Καηάζηαζε Δληνιψλ» παηψληαο ην πιήθηξν «/» ή ην "?" κπαίλνπκε ζε «Καηάζηαζε

Αλαδήηεζεο» (Search Mode). Δδψ, πξέπεη λα πιεθηξνινγήζνπκε ην θείκελν γηα αλαδήηεζε. Με ηελ

νινθιήξσζε ηεο πιεθηξνιφγεζεο (παηψληαο Enter) κεηαθέξεηαη ν θέξζνξαο ζηελ πξψηε εκθάληζε ηνπ

θεηκέλνπ πνπ αλαδεηήζακε. Με ηελ εληνιή “n” κεηαθεξφκαζηε ζηελ επφκελε εκθάληζε. Με ηελ εληνιή «Ν»

κεηαθεξφκαζηε ζηελ πξνεγνχκελε εκθάληζε. Με ην "/" ε αλαδήηεζε γίλεηαη πξνο ηα θάησ, κε ην "?" ε

αλαδήηεζε γίλεηαη πξνο ηα πίζσ.

ηελ «Καηάζηαζε Αλαδήηεζεο» ν vi δέρεηαη θαη ην βαζηθφ ζχλνιν θαλνληθψλ εθθξάζεσλ, γηα ην

νπνίν γίλεηαη ιφγνο ζην Κεθάιαην 6.

Σέινο, ζε απηφ ην ζεκείν λα παξαηεξήζνπκε φηη νη δπλαηφηεηεο θαη νη ιεηηνπξγίεο ηνπ vi είλαη πνιχ

πεξηζζφηεξεο απφ απηέο πνπ αλαθέξνληαη ζην παξφλ θεθάιαην. Γηα πεξηζζφηεξεο πιεξνθνξίεο αλαηξέμηε ζην

εγρεηξίδην ρξήζεο ηνπ vi.

Page 204: Εισαγωγή στα λειτουργικά συστήματα ii
Page 205: Εισαγωγή στα λειτουργικά συστήματα ii

205

Παξάξηεκα Β

Β Σν αξρείν /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

πεξίπνπ, απηφ ήηαλ αξθεηά αζθαιέο, δηφηη θάπνηνο «θαθφβνπινο» ρξήζηεο κε δεδνκέλνλ ηνλ

Page 206: Εισαγωγή στα λειτουργικά συστήματα ii

206

θξππηνγξαθεκέλν θσδηθφ θαη ρξεζηκνπνηψληαο ηε κέζνδν “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,[email protected]:/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]:

Page 207: Εισαγωγή στα λειτουργικά συστήματα ii

207

Home Phone [[email protected]]:

Όινη νη ππφινηπνη ρξήζηεο (ηνπ ίδηνπ ζπζηήκαηνο) κπνξνχλ κε ηελ εληνιή 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:

[email protected]

Mail forwarded to [email protected]

No mail.

No Plan.

Page 208: Εισαγωγή στα λειτουργικά συστήματα ii
Page 209: Εισαγωγή στα λειτουργικά συστήματα ii

209

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

A

Absolute Path ...................................................... 57

Arithmetic mode ................................................ 191

ASCII ................................................................... 84

atom ................................................................... 120

Atom .................................................................. 120

B

Back Quotes .............................................. 184, 187

Back Reference .................................................. 130

Basic Regular Expressions ................................ 132

Block Devices ...................................................... 30

Boot ................................................................... 149

Boot Loader ....................................................... 149

Bourne Again Shell (bash) ................................ 175

Bourne Shell (sh) ............................................... 175

BSD ..................................................................... 27

C

Character Devices ................................................ 30

Charsets ............................................................... 84

chmod (command) ............................................. 105

CMD .................................................................. 146

Co-operative Operating System........................... 26

C-Shell ............................................................... 175

Current Working Directory (cwd) ....................... 58

CWD .................................................................. 146

D

Debugging ......................................................... 179

Dennis Ritchie ..................................................... 27

Distributed Operating Systems ............................ 26

Double Quotes ................................................... 184

E

echo (εληνιή) ..................................................... 183

Embedded Operating Systems ............................. 26

ENV ................................................................... 146

env (εληνιή) ...................................................... 155

Environment Variables .............................. 154, 186

Exec ................................................................... 149

execute permission ............................................ 100

export (εληνιή) .................................................. 155

expr (εληνιή) ..................................................... 189

Extended Regular Expressions .......................... 132

F

File Descriptor ........................................... 158, 159

File Handler ............................................... 158, 159

File System ..........................................................53

File System Type .................................................53

Fork ....................................................................149

G

grep ....................................................................133

group permissions ..............................................100

Groups .................................................................31

H

HOME .................................................................67

home directory .....................................................55

I

Init ......................................................................149

Interpreter ............................................................38

IO Streams ......................................... 158, 159, 161

ISO-8859-1 ..........................................................85

ISO-8859-7 ..........................................................85

J

JF Ossanna ...........................................................27

K

Ken Thompson ....................................................27

kill (εληνιή) .......................................................151

L

LANG ................................................................157

LANGUAGE .....................................................157

LC_ALL ..............................................................87

locale ....................................................................87

M

man (εληνιή)........................................................41

MD McIlroy .........................................................27

Microsoft Power Shell .........................................90

MS-DOS ..............................................................90

Multics .................................................................27

Multi-tasking Operating System ..........................25

Multi-user Operating System ...............................26

O

other's permissions .............................................100

P

Path ......................................................................57

PATH ................................................. 115, 158, 180

PDP-11.................................................................27

PDP-7 ..................................................................27

Page 210: Εισαγωγή στα λειτουργικά συστήματα ii

210

Permissions .......................................................... 99

PID..................................................................... 146

Pipe ...................................................................... 30

Pipelining ........................................................... 167

PPID .................................................................. 146

Pre-emptive Operating System ............................ 26

Priority ............................................................... 146

Proc Directory ................................................... 152

Process ............................................... 145, 146, 149

prompt ................................................................. 29

ps (εληνιή) ......................................................... 146

pstree (εληνιή) ................................................... 148

pts ...................................................................... 160

Q

Quotes ................................................................ 184

R

read (εληνιή) ..................................................... 182

read permission .................................................. 100

Real-time Operating Systems .............................. 26

Redirection ........................................ 158, 159, 161

Regular Expression ............................................ 119

Regular Language .............................................. 119

Relative Path .................................................. 58, 61

root directory ....................................................... 54

S

Script Debugging ............................................... 179

Script Execution ................................................ 178

setgid ................................................................. 101

setuid ................................................................. 101

shell ..................................................................... 38

Shell ..................................................................... 29

Shell Variables .......................................... 180, 183

Signal ................................................................. 150

Single Quotes ................................................... 184

Single-tasking Operating System ........................ 25

Single-user Operating System ............................. 26

Sockets ................................................................. 30

Status ................................................................. 146

Stderr ......................................................... 158, 159

Stdin........................................................... 158, 159

Stdout ......................................................... 158, 159

sticky bit ............................................................ 101

String Concatenation ......................................... 186

Strings Δηζαγσγηθά ............................................ 184

Swap .................................................................. 145

System V ............................................................. 27

T

Task ................................................................... 145

Task Manager .................................................... 145

Terminal .............................................................. 37

Tilde ..................................................................... 67

U

umask .................................................................107

Unics ....................................................................27

Unics (UNiplexed Information and Computing

Service) ............................................................27

Unix .....................................................................27

User Groups .........................................................31

user permissions ................................................100

Users ....................................................................31

UTF ......................................................................86

V

Variables .................................................... 180, 183

Virtual Machine ...................................................33

Virtualization .......................................................33

W

Wildcards .............................................................82

Windows Command Prompt................................38

write permission ................................................100

Α

άδεηα αλάγλσζεο ...............................................100

άδεηα εγγξαθήο ..................................................100

άδεηα εθηέιεζεο .................................................100

άδεηεο άιισλ ......................................................100

άδεηεο νκάδαο ....................................................100

Άδεηεο πξφζβαζεο ...............................................99

άδεηεο ρξήζηε ....................................................100

Αθχξσζε εληνιήο ................................................47

Αλαθαηεχζπλζε ................................. 158, 159, 161

Αλάπνδα Δηζαγσγηθά ................................ 184, 187

Αλαθνξά Πίζσ ..................................................130

Απφιπηε Γηαδξνκή ..............................................57

Απνζθαικάησζε ...............................................179

Απνζθαικάησζε ζελαξίσλ θειχθνπο ..............179

Αξηζκεηηθέο Πξάμεηο ................................. 189, 191

Αξρεία δεδνκέλσλ ...............................................30

Αξρεία Δπηθνηλσλίαο ...........................................30

Αξρεία πζθεπψλ ................................................30

Αξρείν ..................................................................30

Β

Βαζηθέο Καλνληθέο Δθθξάζεηο ..........................132

Γ

Γηαδξνκή .............................................................57

Γηαζσιήλσζε .............................................. 30, 167

Γηαηχπσζε εληνιψλ.............................................39

Γηεξγαζία ................................................... 145, 149

Γηεξκελεπηήο .......................................................38

δηθαησκάησλ κεηαβνιή ......................................105

Γηπιά Δηζαγσγηθά .............................................184

Page 211: Εισαγωγή στα λειτουργικά συστήματα ii

211

Δ

Δηθνληθή Μεραλή ................................................ 33

Δηθνληθνπνίεζε ................................................... 33

Δηζαγσγηθά .................................................. 93, 184

Δθηέιεζε ελαξίσλ ........................................... 178

Δθηεηακέλεο Καλνληθέο Δθθξάζεηο .................. 132

Δλζσκαησκέλα Λεηηνπξγηθά πζηήκαηα ............ 26

Έμνδνο Λαζψλ ........................................... 158, 159

Δξγαζία ............................................................. 145

Κ

Καλνληθή Γιψζζα ............................................. 119

Καλνληθή Δίζνδνο ..................................... 158, 159

Καλνληθή Έθθξαζε ........................................... 119

Καλνληθή Έμνδνο ...................................... 158, 159

Καηαλεκεκέλα Λεηηνπξγηθά πζηήκαηα ............. 26

θέιπθνο ......................................................... 29, 38

Κέιπθνο ............................................................... 29

θιάζε ραξαθηήξσλ ............................................ 122

Κπκαηνεηδήο Γξακκή .......................................... 67

Λ

Λεηηνπξγηθά πζηήκαηα Πξαγκαηηθνχ Υξφλνπ .. 26

Λεηηνπξγηθφ χζηεκα .......................................... 25

Λεηηνπξγηθφ χζηεκα Μνλήο Δξγαζίαο ............. 25

Λεηηνπξγηθφ χζηεκα Μνλνχ Υξήζηε................ 26

Λεηηνπξγηθφ χζηεκα Πνιιαπιψλ Δξγαζηψλ .... 25

Λεηηνπξγηθφ χζηεκα Πνιιαπιψλ Υξεζηψλ ..... 26

Μ

κάζθα δηθαησκάησλ .......................................... 107

Μεηαβιεηέο ............................................... 180, 183

Μεηαβιεηέο Κειχθνπο .............................. 180, 183

Μεηαβιεηέο Πεξηβάιινληνο ...................... 154, 186

Μεηαβιεηή Πεξηβάιινληνο LANG ................... 157

Μεηαβιεηή Πεξηβάιινληνο LANGUAGE ........ 157

Μεηαβιεηή Πεξηβάιινληνο PATH ................... 158

Μνλά Δηζαγσγηθά ............................................ 184

Ο

Οκάδεο ρξεζηψλ ..................................................31

Π

Πεξηζπσκέλε .......................................................67

πξνηξνπή .............................................................29

Ρ

Ρνέο Δηζφδνπ-Δμφδνπ ........................ 158, 159, 161

ήκα...................................................................150

πκβνινζεηξέο Δηζαγσγηθά ...............................184

ζχλδεζκνο ............................................................30

πλέλσζε πκβνινζεηξψλ ................................186

χλνια θαλνληθψλ εθθξάζεσλ..........................132

χλνια Υαξαθηήξσλ ...........................................84

χζηεκα Αξρείσλ ................................................53

ρεηηθή Γηαδξνκή .......................................... 58, 61

Σ

ηειεζηήο αθνινπζίαο .........................................124

ηειεζηήο ελαιιαγήο ...........................................125

Σειεζηήο Οκαδνπνίεζεο ...................................129

Σεξκαηηθφ ............................................................37

Σνπηθέο Ρπζκίζεηο Γηεξγαζίαο ...........................157

Σξέρσλ Καηάινγνο Δξγαζίαο ..............................58

Σχπνο πζηήκαηνο Αξρείσλ ................................53

Φ

Φάθεινο ...............................................................30

Χ

Υαξαθηήξεο Μπαιαληέξ .....................................82

Υξήζηεο ...............................................................31