Академический Документы
Профессиональный Документы
Культура Документы
Καζεγεηήο Δθαξκνγψλ
Δξγαζηεξηαθφο Οδεγφο
Δηζαγσγή ζηα Λεηηνπξγηθά πζηήκαηα
ςγγπαθή
Αληψλεο ηδεξφπνπινο
Κπιηικόρ αναγνώζηηρ
Μελάο Γαζπγέλεο
ςνηελεζηέρ έκδοζηρ
Γισζζηθή Δπηκέιεηα: Φψηεο Υαηδφγινπ
Γξαθηζηηθή Δπηκέιεηα: Αληψλεο ηδεξφπνπινο
Σερληθή Δπεμεξγαζία: Βαζηιάληα Κνπκπή, Αληψλεο ηδεξφπνπινο
ISBN: 978-960-603-108-3
Σν παξφλ έξγν αδεηνδνηείηαη ππφ ηνπο φξνπο ηεο άδεηαο Creative Commons Αλαθνξά Γεκηνπξγνχ - Με
Δκπνξηθή Υξήζε - Όρη Παξάγσγα Έξγα 3.0. Γηα λα δείηε έλα αληίγξαθν ηεο άδεηαο απηήο επηζθεθηείηε ηνλ
ηζηφηνπν https://creativecommons.org/licenses/by-nc-nd/3.0/gr/
5
Κεθάιαην 2.......................................................................................................................................... 37
2 Δηζαγσγή ζηε ρξήζε ηνπ θειύθνπο θαη ζύληαμε εληνιώλ .......................................... 37
2.1 Υξήζε Κειχθνπο - Σεξκαηηθφ .......................................................................................................37
2.1.1 Σεξκαηηθφ .......................................................................................................................................37
2.2 Σν θέιπθνο (shell) ..........................................................................................................................38
2.3 Γηαηχπσζε εληνιψλ .......................................................................................................................39
2.3.1 Ζ πξψηε κνπ εληνιή .......................................................................................................................40
2.3.2 Ζ εληνιή man .................................................................................................................................41
2.3.3 Γηαθνξνπνίεζε εκαηψλ θαη Αξρείσλ...........................................................................................43
2.3.4 Πηζαλά ζθάικαηα θαηά ηε δηαηχπσζε εληνιψλ ............................................................................45
2.3.5 Γηαρσξηζκφο εληνιψλ.....................................................................................................................46
2.3.6 Αθχξσζε εληνιήο ...........................................................................................................................47
2.4 Αζθήζεηο γηα εμάζθεζε..................................................................................................................47
2.5 Αλαθνξέο ........................................................................................................................................51
Κεθάιαην 3.......................................................................................................................................... 53
3 Δηζαγσγή ζην ύζηεκα Αξρείσλ ................................................................................... 53
3.1 Οξγάλσζε ηνπ πζηήκαηνο Αξρείσλ .............................................................................................53
3.2 Πεξηνξηζκνί - θαλφλεο γηα έλα χζηεκα Αξρείσλ .........................................................................56
3.3 Γηαδξνκέο .......................................................................................................................................56
3.3.1 Απφιπηεο Γηαδξνκέο ......................................................................................................................56
3.3.2 ρεηηθέο Γηαδξνκέο ........................................................................................................................58
3.4 Μεηαθίλεζε πξνο ηα επάλσ κε ρεηηθή Γηαδξνκή ........................................................................61
3.4.1 Ο θάθεινο HOME ησλ ρξεζηψλ ....................................................................................................67
3.5 Σχπνη αξρείσλ.................................................................................................................................69
3.5.1 Δληνιέο Γηαρείξηζεο Φαθέισλ .......................................................................................................69
3.5.2 Δληνιέο Γηαρείξηζεο Φαθέισλ θαη Αξρείσλ ..................................................................................70
3.5.3 Κξπθά αξρεία .................................................................................................................................73
3.6 Αζθήζεηο γηα εμάζθεζε..................................................................................................................74
3.7 Αλαθνξέο ........................................................................................................................................79
Κεθάιαην 4.......................................................................................................................................... 81
4 Γνπιεύνληαο κε πνιιά αξρεία ρξεζηκνπνηώληαο ραξαθηήξεο κπαιαληέξ (wildcards).
81
4.1 Απηφκαηε ζπκπιήξσζε νλνκάησλ αξρείσλ (filename auto-completion) ......................................81
4.2 Υαξαθηήξεο Μπαιαληέξ (Wildcards) ............................................................................................82
4.2.1 χλνια Υαξαθηήξσλ (Charsets) ....................................................................................................84
4.2.2 χλνια Υαξαθηήξσλ θαη Wildcards ..............................................................................................87
6
4.3 Παξαδείγκαηα Υξήζεο Μπαιαληέξ ...............................................................................................89
4.3.1 Μπαιαληέξ θαη Δηζαγσγηθά ...........................................................................................................93
4.3.2 Μπαιαληέξ θαη Γηαδξνκέο .............................................................................................................93
4.4 Αζθήζεηο γηα εμάζθεζε..................................................................................................................94
4.5 Αλαθνξέο ........................................................................................................................................97
Κεθάιαην 5.......................................................................................................................................... 99
5 Άδεηεο πξόζβαζεο θαη αζθάιεηα αξρείσλ ..................................................................... 99
5.1 Άδεηεο πξφζβαζεο ..........................................................................................................................99
5.1.1 Δπηπιένλ δηθαηψκαηα ...................................................................................................................101
5.1.2 Απνζήθεπζε δηθαησκάησλ ...........................................................................................................102
5.2 εκαζία δηθαησκάησλ ..................................................................................................................103
5.2.1 Δζσηεξηθή δνκή πζηήκαηνο Αξρείσλ ........................................................................................104
5.3 Οξηζκφο θαη κεηαβνιή δηθαησκάησλ............................................................................................105
5.3.1 Πξνθαζνξηζκέλα δηθαηψκαηα θαη ε umask ..................................................................................107
5.4 Αζθήζεηο γηα εμάζθεζε................................................................................................................114
5.5 Αλαθνξέο ......................................................................................................................................116
7
6.8 Αλαθνξέο ......................................................................................................................................143
8
8.4.2 Αξηζκεηηθέο Πξάμεηο κε ρξήζε ηεο αξηζκεηηθήο θαηάζηαζεο (arithmetic mode) ηνπ bash ........191
8.5 Αζθήζεηο γηα εμάζθεζε................................................................................................................193
9
Πίλαθαο ρεκάησλ
10
ρήκα 5.7: Παξάδεηγκα umask. .......................................................................................................................109
ρήκα 5.8: Παξάδεηγκα ππνινγηζκνχ επίδξαζεο ηεο umask ζηε δεκηνπξγία θαηαιφγσλ. .............................110
ρήκα 5.9: Παξάδεηγκα ιάζνπο ππνινγηζκψλ επίδξαζεο ηεο umask ζηε δεκηνπξγία αξρείσλ. .....................111
ρήκα 5.10(α): Παξάδεηγκα ζσζηψλ ππνινγηζκψλ επίδξαζεο ηεο umask ζηε δεκηνπξγία αξρείσλ θαη
θαηαιφγσλ. ................................................................................................................................................112
ρήκα 5.10(β): Παξάδεηγκα ζσζηψλ ππνινγηζκψλ επίδξαζεο ηεο umask ζηε δεκηνπξγία αξρείσλ θαη
θαηαιφγσλ. ................................................................................................................................................113
ρήκα 6.1: Καλνληθέο Δθθξάζεηο. ...................................................................................................................119
ρήκα 6.2: Σν ζχλνιν ησλ atoms. ....................................................................................................................120
ρήκα 6.3: Σν ζχλνιν ησλ ηειεζηέσλ. ............................................................................................................120
ρήκα 6.4: Παξάδεηγκα RegExp: "L", String: "HELLO". ...............................................................................121
ρήκα 6.5: Παξάδεηγκα RegExp: "K", String: "HELLO"................................................................................121
ρήκα 6.6: Παξάδεηγκα RegExp: "K", String: "HELLO"................................................................................121
ρήκα 6.7: Παξάδεηγκα RegExp: ".", String: "HELLO". ................................................................................122
ρήκα 6.8: Παξάδεηγκα RegExp: "E." θαη "O.", String: "HELLO". ................................................................122
ρήκα 6.9: Παξάδεηγκα ζέζεσλ αγθπξψλ. .......................................................................................................124
ρήκα 6.10: Παξάδεηγκα RegExp: "Α.Σ", String: "CHARACTER". ..............................................................124
ρήκα 6.11: Παξάδεηγκα RegExp: "BC*D", String: "ABBCCCDD" .............................................................126
ρήκα 6.12: Γελδξνεηδήο αλαπαξάζηαζε ησλ δπλαηψλ ζπλδπαζκψλ-ειέγρσλ ηνπ παξαδείγκαηνο απφ ην
Γηαδξαζηηθφ ρήκα 6.11. ..........................................................................................................................127
ρήκα 6.13: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο. ...........................................................................137
ρήκα 6.14: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο. ...........................................................................138
ρήκα 6.15: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο. ...........................................................................138
ρήκα 6.16: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο. ...........................................................................140
ρήκα 6.17: Γηαδξαζηηθή άζθεζε κε θαλνληθέο εθθξάζεηο. ...........................................................................142
ρήκα 7.1: Σππηθέο Καηαζηάζεηο Γηεξγαζηψλ .................................................................................................146
ρήκα 7.2: Ζ δηαδηθαζία εθηέιεζεο εληνιψλ απφ ην θέιπθνο. .......................................................................150
ρήκα 7.3: Μηα δηεξγαζία θιεξνλνκεί απφ ηε γνληθή ηεο ηηο ξνέο εηζφδνπ-εμφδνπ. ......................................161
ρήκα 7.4: Ζ δηαδηθαζία δεκηνπξγίαο ησλ ξνψλ εηζφδνπ-εμφδνπ θαηά ηελ εθηέιεζε κηαο εληνιήο. .............161
ρήκα 7.5: Αιιαγή ηεο θαλνληθήο εμφδνπ πξνο αξρείν. ..................................................................................162
ρήκα 7.6: Αιιαγή ηεο εμφδνπ ιαζψλ πξνο αξρείν. ........................................................................................163
ρήκα 7.7: Αιιαγή ηεο θαλνληθήο εμφδνπ θαη ηεο εμφδνπ ιαζψλ πξνο δηαθνξεηηθά αξρεία. .........................164
ρήκα 7.8: Αιιαγή ηεο εμφδνπ ιαζψλ πξνο ηελ θαλνληθή έμνδν. ...................................................................165
ρήκα 7.9: Αιιαγή ηεο θαλνληθήο εμφδνπ πξνο αξρείν θαη ηεο εμφδνπ ιαζψλ πξνο ηελ θαλνληθή έμνδν. ....166
ρήκα 7.10: Αιιαγή ηεο εμφδνπ ιαζψλ πξνο ηελ θαλνληθή έμνδν θαη ηεο θαλνληθήο εμφδνπ πξνο αξρείν. ..166
ρήκα 7.11: Βαζηθή κνξθή δηαζσιήλσζεο. ....................................................................................................167
ρήκα 7.12: Παξάδεηγκα δηαζσιήλσζεο κε ls θαη wc. ...................................................................................168
ρήκα 7.13: Παξάδεηγκα δηαζσιήλσζεο κε ls θαη wc (πεξίπησζε ιάζνπο). ..................................................168
ρήκα 8.1: Ηεξάξρεζε ζηα ηκήκαηα ηνπ Unix. ................................................................................................175
ρήκα Α.1: Οη θαηαζηάζεηο ιεηηνπξγίαο ηνπ vi. ..............................................................................................202
11
Πίλαθαο Πηλάθσλ
12
Πίλαθαο πληνκεύζεσλ-Αθξσλύκηα
13
14
Πίλαθαο Μεηάθξαζεο Όξσλ
15
System Call Κιήζε πζηήκαηνο
Tablet Σακπιέηα
Timestamp Υξνλνζθξαγίδα
User Account Λνγαξηαζκφο Υξήζηε
Virtual Machine Δηθνληθή Μεραλή
Virtualization Δηθνληθνπνίεζε
WorkAround Πξφρεηξν Μπάισκα
Έμππλν Κηλεηφ Smart Phone
Αλάπνδα Δηζαγσγηθά Back Quotes
Αλαθνξά Πίζσ Back Reference
Απφιπηε Γηαδξνκή Absolute Path
Απνηακηεπηήο Buffer
Γηαδξνκή Path
Γηεξγαζία Process
Γηεξκελεπηήο Interpreter
Γηπιά Δηζαγσγηθά Double Quotes
εγρεηξίδην ρξήζεο manual page
Δηθνληθή Μεραλή Virtual Machine
Δηθνληθνπνίεζε Virtualization
Δηζαγσγηθά Quotes
Δλζσκαησκέλα Λεηηνπξγηθά πζηήκαηα Embedded Operating Systems
Κέιπθνο Shell
Καλνληθή Έθθξαζε Regular Expression
Καηαλεκεκέλα Λεηηνπξγηθά πζηήκαηα Distributed Operating Systems
Καηαλεκεκέλνο Τπνινγηζκφο Distributed Computing
θελφ δηάζηεκα space
Κεληξηθή Μνλάδα Δπεμεξγαζίαο Central Processing Unit
Κιήζε πζηήκαηνο System Call
ΚΜΔ CPU
Λεηηνπξγηθά πζηήκαηα Πξαγκαηηθνχ Real Time Operating Systems
Υξφλνπ
Λεηηνπξγηθφ χζηεκα Operating System
Λνγαξηαζκφο Υξήζηε User Account
Μνλά Δηζαγσγηθά Single Quotes
Μνλψλ Δξγαζηψλ Single-tasking
Μνξθνπνίεζε Format
Πνιιαπιψλ Δξγαζηψλ Multi-tasking
Πξφρεηξν Μπάισκα WorkAround
Πξνηξνπή Prompt
Ρηδηθφο Καηάινγνο Root Directory
ήκα Signal
χλδεζκνο Link
πλέλσζε πκβνινζεηξψλ String Concatenation
16
πζθεπή Δηζφδνπ-Δμφδνπ Input-Output Device
ρεηηθή Γηαδξνκή Relative Path
Σφκνο Partition
Σακπιέηα Tablet
Σξέρσλ Καηάινγνο Δξγαζίαο Current Working Directory
Τπεξρξήζηεο Superuser
Τπεξεζία Service
Υξνλνζθξαγίδα Timestamp
17
Πξόινγνο
Σν παξφλ βηβιίν γξάθηεθε γηα λα απνηειέζεη θπξίσο έλαλ εξγαζηεξηαθφ νδεγφ γηα ην κάζεκα «Δηζαγσγή
ζηα Λεηηνπξγηθά πζηήκαηα», φπσο απηφ δηδάζθεηαη ζην Σκήκα Μεραληθψλ Πιεξνθνξηθήο ηνπ
Αιεμάλδξεηνπ ΣΔΗ Θεζζαινλίθεο. Πξνθαλψο, φκσο, κπνξεί λα ην ρξεζηκνπνηήζεη νπνηνζδήπνηε
ελδηαθέξεηαη λα κάζεη ηα βαζηθά ζηνηρεία ηνπ Λεηηνπξγηθνχ πζηήκαηνο UNIX ή Linux.
Αλ θαη ε ζπγγξαθή ηνπ μεθίλεζε αξθεηά ρξφληα πξηλ κε ηε κνξθή απιψλ ζεκεηψζεσλ θαη
δηαθαλεηψλ ζην κάζεκα «Δηζαγσγή ζηα Λεηηνπξγηθά πζηήκαηα», νινθιεξψλεηαη ηψξα ζηα πιαίζηα ηεο
Γξάζεο «Διιεληθά Αθαδεκατθά Ζιεθηξνληθά πγγξάκκαηα θαη Βνεζήκαηα» (Δ.Α.Ζ..Β.). Δπεηδή ζθνπφο
ηεο Γξάζεο είλαη ε εηζαγσγή ηνπ ειεθηξνληθνχ, δηαδξαζηηθνχ, πνιπκεζηθνχ βηβιίνπ ζηελ Αλψηαηε
Δθπαίδεπζε, ην παξφλ εγρεηξίδην δηακνξθψζεθε κε ηέηνηνλ ηξφπν, ψζηε λα εμππεξεηεί ηνλ παξαπάλσ ζθνπφ.
πλεπψο, πξνηείλεηαη ζηνλ αλαγλψζηε λα ρξεζηκνπνηεί ηελ ειεθηξνληθή έθδνζε ε νπνία αμηνπνηεί πιήζνο
δηαδξαζηηθψλ ζηνηρείσλ θαη κέζσλ γηα ηελ θαιχηεξε θαηαλφεζε θαη εκπέδσζε ηνπ πεξηερνκέλνπ ηνπ.
19
Δπραξηζηίεο
Ζ ζπγγξαθή ηνπ παξφληνο βηβιίνπ δελ ζα νινθιεξσλφηαλ ρσξίο ηε ζπκπαξάζηαζε κεξηθψλ αλζξψπσλ πνπ
παξείραλ ακέξηζηε βνήζεηα ζε δηάθνξα ζηάδηα ηεο πξνζπάζεηαο. Πξψηνλ απφ φινπο, ινηπφλ, ζα ήζεια λα
επραξηζηήζσ ηνλ Μελά Γαζπγέλε ν νπνίνο σο θξηηηθφο αλαγλψζηεο ζπλέβαιε ηα κέγηζηα ζηελ νινθιήξσζε
ηεο ζπγγξαθήο κε εχζηνρεο παξαηεξήζεηο θαη ζρφιηα. Δπίζεο, ηε Βαζηιάληα Κνπκπή ε νπνία ζπκκεηείρε
ελεξγά ζηε δηακφξθσζε ηνπ ηειηθνχ θεηκέλνπ, αιιά θαη ζηε δηδαζθαιία ηνπ ζρεηηθνχ καζήκαηνο ζηελ ηάμε.
Θεξκέο επραξηζηίεο ζηνλ Φψηε Υαηδφγινπ γηα ηε γισζζηθή επεμεξγαζία.
Αθφκε, ληψζσ ηελ αλάγθε λα επραξηζηήζσ φινπο φζνη ζπκκεηείραλ ηα ηειεπηαία ρξφληα ζηε
δηδαζθαιία ηνπ εξγαζηεξηαθνχ κέξνπο ηνπ καζήκαηνο «Δηζαγσγή ζηα Λεηηνπξγηθά πζηήκαηα», νη νπνίνη
ζπλέβαιαλ ζηε δηακφξθσζε ηεο χιεο θαη ηνπ πιηθνχ γηα ην κάζεκα: Νίθν Φαξξά, Γεκήηξε Κιεθηνχξε,
Βαζηιάληα Κνπκπή, Κψζηα Γηαθνπζηίδε, Θαλάζε Μάξγαξε, Κπξηαθή Κσλζηαληηλίδνπ, ηέθαλν
Καηζαβνχλε θαη Μηράιε αββφπνπιν.
Δπηπιένλ, αλαθεξφκελνο ζηηο επραξηζηίεο, δελ ζα κπνξνχζα λα κελ αλαγλσξίζσ φηη ρσξίο ηε Γξάζε
«Διιεληθά Αθαδεκατθά Ζιεθηξνληθά πγγξάκκαηα θαη Βνεζήκαηα» (Δ.Α.Ζ..Β., ε νπνία πινπνηείηαη απφ
ηνλ .Δ.Α.Β. θαη ην Δ.Μ.Π.), δελ ζα είρα ηε δπλαηφηεηα λα νινθιεξψζσ θαη λα εθδψζσ ην παξφλ βηβιίν.
Σέινο, πεξηζζφηεξν απφ φινπο ζα ήζεια λα επραξηζηήζσ ηελ νηθνγέλεηά κνπ, ηε ζχδπγφ κνπ Σδνχιηα
θαη ηελ θφξε κνπ Νηθνιία, απφ ηηο νπνίεο ζηέξεζα πνιιέο νηθνγελεηαθέο ζηηγκέο, πξνθεηκέλνπ λα
νινθιεξσζεί ην παξφλ ζχγγξακκα.
21
Δηζαγσγή
Σν παξφλ βηβιίν γξάθεθε γηα λα απνηειέζεη θπξίσο έλαλ εξγαζηεξηαθφ νδεγφ γηα ην κάζεκα «Δηζαγσγή ζηα
Λεηηνπξγηθά πζηήκαηα», φπσο απηφ δηδάζθεηαη ζην Σκήκα Μεραληθψλ Πιεξνθνξηθήο ηνπ Αιεμάλδξεηνπ
ΣΔΗ Θεζζαινλίθεο. Πξνθαλψο, φκσο, κπνξεί λα ην ρξεζηκνπνηήζεη νπνηνζδήπνηε ελδηαθέξεηαη λα κάζεη ηα
βαζηθά ζηνηρεία ηνπ Λεηηνπξγηθνχ πζηήκαηνο UNIX ή Linux.
Σν κάζεκα «Δηζαγσγή ζηα Λεηηνπξγηθά πζηήκαηα» είλαη εηζαγσγηθφ ζην γλσζηηθφ αληηθείκελν ησλ
Λεηηνπξγηθψλ πζηεκάησλ θαη έρεη σο βαζηθφ ζηφρν ηελ θαηαλφεζε ησλ γεληθψλ αξρψλ ησλ Λεηηνπξγηθψλ
πζηεκάησλ κέζσ ηεο ρξήζεο θαη πξνγξακκαηηζκνχ ζην UNIX. ηφρνο ηνπ καζήκαηνο είλαη νη θνηηεηέο λα
κειεηήζνπλ θαη λα γλσξίζνπλ έλα Λεηηνπξγηθφ χζηεκα πνπ εμαξρήο δεκηνπξγήζεθε γηα πξνγξακκαηηζηέο,
θαζψο θαη λα δηαθξίλνπλ ηε θηινζνθία πνπ θξχβεη έλα Λεηηνπξγηθφ χζηεκα «πίζσ» απφ ηα γξαθηθά
πεξηβάιινληα. ην κάζεκα θαινχληαη λα θαηαλνήζνπλ θαη λα εμεηάζνπλ ηνλ ηξφπν ρξήζεο ελφο θειχθνπο
θαζψο θαη πψο απηφ αιιειεπηδξά κε ην Λεηηνπξγηθφ χζηεκα. θνπφο ηνπ καζήκαηνο είλαη νη θνηηεηέο λα
θαηαλνήζνπλ πψο ιεηηνπξγεί έλα «Λεηηνπξγηθφ χζηεκα» θαη πψο κπνξνχλ λα ην αμηνπνηήζνπλ. Καηά ηε
δηάξθεηα ηνπ καζήκαηνο νη θνηηεηέο έρνπλ ηε δπλαηφηεηα λα γλσξίζνπλ ηα ηζρπξά «φπια» πνπ έρεη έλαο
πξνγξακκαηηζηήο ρξεζηκνπνηψληαο έλα Λεηηνπξγηθφ χζηεκα ζε επίπεδν θειχθνπο θαη λα γλσξίζνπλ ηε
θηινζνθία ηνπ «θάλσ πεξίπινθεο ελέξγεηεο ζπλδπάδνληαο απιέο απηφλνκεο εληνιέο πνπ επηθνηλσλνχλ
κεηαμχ ηνπο».
Με ηε κειέηε ηνπ παξφληνο εξγαζηεξηαθνχ νδεγνχ θαη ηελ επηηπρή νινθιήξσζε ηνπ καζήκαηνο, ν
θνηηεηήο ζα πξέπεη:
λα θαηαλνήζεη ηηο βαζηθέο αξρέο ηνπ Λεηηνπξγηθνχ πζηήκαηνο UNIX θαη ηνπ ηξφπνπ ιεηηνπξγίαο
ηνπ Λεηηνπξγηθνχ πζηήκαηνο ζε ζρέζε κε ηε δηαρείξηζε αξρείσλ, ρξεζηψλ, νκάδσλ ρξεζηψλ,
δηεξγαζηψλ θαη ππξήλα.
λα θαηαλνήζεη ηε ζρέζε Δθαξκνγέο-Κέιπθνο-Ππξήλαο,
λα είλαη ζε ζέζε λα ρξεζηκνπνηεί ζην θέιπθνο βαζηθέο εληνιέο, κεηαβιεηέο θειχθνπο, κεηαβιεηέο
πεξηβάιινληνο
λα θαηαλνήζεη ηε ρξήζε ησλ εηζαγσγηθψλ ("quotes"),
λα κπνξεί λα εθαξκφζεη βαζηθέο εληνιέο δηαρείξηζεο θαη επεμεξγαζίαο αξρείσλ,
λα θαηαλνήζεη ηε θηινζνθία ιεηηνπξγίαο ησλ ζπζηεκάησλ αξρείσλ,
λα ρξεζηκνπνηεί ηνπο ραξαθηήξεο κπαιαληέξ,
λα θαηαλνήζεη ηελ έλλνηα ησλ δηεξγαζηψλ, ηηο ηδηφηεηέο ηνπο θαη ηα ζήκαηα (signals) θαη λα κπνξεί
λα ηα ρεηξηζηεί επνηθνδνκεηηθά,
λα γλσξίζεη ηνπο ηξφπνπο επηθνηλσλίαο ησλ δηεξγαζηψλ θαη λα κπνξεί λα ζπλζέζεη πεξίπινθεο
εληνιέο κε ζπλδπαζκφ απιψλ εληνιψλ,
λα θαηαλνήζεη ηε θηινζνθία ησλ θίιηξσλ θαη λα κπνξεί λα δεκηνπξγήζεη θίιηξα ή λα ζπλδπάζεη
επνηθνδνκεηηθά ππάξρνληα θίιηξα,
λα θαηαλνήζεη ηε ρξήζε ησλ Καλνληθψλ Δθθξάζεσλ θαη λα κπνξεί λα δεκηνπξγεί Καλνληθέο
Δθθξάζεηο,
λα θαηαλνήζεη ηνλ ηξφπν ρεηξηζκνχ ησλ ζελαξίσλ θαη ησλ γισζζψλ ηχπνπ δηεξκελεπηή (interpreter)
απφ ην Λεηηνπξγηθφ χζηεκα,
λα γλσξίζεη ηηο δπλαηφηεηεο ηνπ θειχθνπο ζε ζρέζε κε ηνλ έιεγρν εθηέιεζεο εληνιψλ, ηνπο ηειεζηέο
εληνιψλ θαη ηηο δνκέο επαλάιεςεο.
23
θέιπθνο θαη αξρεία: ρξήζε ραξαθηήξσλ κπαιαληέξ,
δηεξγαζίεο: δηαρείξηζε δηεξγαζηψλ, ηδηφηεηεο, ζήκαηα, ην ζχζηεκα /proc,
επηθνηλσλία δηεξγαζηψλ: δηαζσιήλσζε θαη αλαθαηεχζπλζε, ρξήζε θαη πξνγξακκαηηζκφο θίιηξσλ,
Καλνληθέο Δθθξάζεηο θαη ε ρξήζε ηνπο κέζα απφ εξγαιεία ηνπ UNIX (grep, sed),
πξνγξακκαηηζκφο ζην θέιπθνο: δηεξκελεπηέο εληνιψλ ζην UNIX, έιεγρνο εθηέιεζεο εληνιψλ,
ηειεζηέο εληνιψλ, δνκέο επαλάιεςεο.
Με ηελ επηηπρή νινθιήξσζε ηνπ καζήκαηνο ν θνηηεηήο έρεη απνθηήζεη ηηο παξαθάησ γλψζεηο θαη
δεμηφηεηεο:
Μέζα απφ ηηο εξγαζηεξηαθέο αζθήζεηο έρεη ηελ επρέξεηα λα ρξεζηκνπνηήζεη επνηθνδνκεηηθά έλα
Λεηηνπξγηθφ χζηεκα UNIX θαη κπνξεί λα πξνγξακκαηίδεη ρξεζηκνπνηψληαο γλσζηά εξγαιεία πνπ
ηνπ δίλνληαη απφ ην Λεηηνπξγηθφ χζηεκα.
Καηαλνεί ηηο βαζηθέο αξρέο ιεηηνπξγίαο ελφο Λεηηνπξγηθνχ πζηήκαηνο, ψζηε λα εκβαζχλεη
παξαθάησ ζην κάζεκα «Αξρέο ζρεδίαζεο Λεηηνπξγηθψλ πζηεκάησλ».
Γηεπξχλεη ηηο γλψζεηο ηνπ θαη ηηο ηθαλφηεηέο ηνπ ζε ζρέζε κε ηνπο ηξφπνπο ρξήζεο ππνινγηζηψλ
πέξα απφ ηελ θιαζηθή ρξήζε κέζσ ησλ παξαζπξηθψλ πεξηβαιιφλησλ.
24
Κεθάιαην 1
Δάλ έλα Λεηηνπξγηθφ χζηεκα επηηξέπεη ηελ παξάιιειε εθηέιεζε πνιιψλ πξνγξακκάησλ (tasks), ηφηε
νλνκάδεηαη Πνιιαπιώλ Δξγαζηώλ. Δάλ επηηξέπεηαη ε εθηέιεζε κφλν ελφο πξνγξάκκαηνο θάζε θνξά, ηφηε
νλνκάδεηαη Μνλήο Δξγαζίαο. Δδψ, πξέπεη λα επηζεκάλνπκε πσο γηα ηελ παξάιιειε εθηέιεζε πξνγξακκάησλ
25
δελ είλαη απαξαίηεην λα δηαζέηεη ην πιηθφ ηνπ ππνινγηζηή πνιινχο επεμεξγαζηέο, νχηε πνιινχο ππξήλεο
επεμεξγαζηψλ. Σα Πνιιαπιώλ Δξγαζηώλ Λεηηνπξγηθά πζηήκαηα θαηαθέξλνπλ λα εθηεινχλ ςεπδν-
παξάιιεια πνιιέο δηεξγαζίεο (ή εξγαζίεο) ζε έλαλ κφλν επεμεξγαζηή. Απηφ επηηπγράλεηαη κε ηελ ελαιιαγή
ησλ δηεξγαζηψλ ζηνλ επεμεξγαζηή - θάζε ιίγν ρξφλν παχεη ε εθηέιεζε κηαο δηεξγαζίαο θαη εθηειείηαη ε
επφκελε. Γηα ην πψο επηηπγράλεηαη απηφ, ππάξρνπλ δπν βαζηθέο πνιηηηθέο, νη νπνίεο νξίδνπλ θαη ηηο
αληίζηνηρεο θαηεγνξίεο Λεηηνπξγηθψλ πζηεκάησλ:
pre-emptive: ρσξίδεηαη ν «ρξφλνο» ζε θνκκάηηα (time slots) θαη ην Λεηηνπξγηθφ χζηεκα δίλεη ζε θάζε
δηεξγαζία έλα θνκκάηη ρξφλνπ. ε απηήλ ηελ θαηεγνξία αλήθνπλ φιεο νη παξαιιαγέο ηνπ UNIX θαη νη
λεψηεξεο εθδφζεηο ησλ MS Windows.
co-operative: κηα δηεξγαζία (πξφγξακκα) θαηαιακβάλεη ηε CPU, θαη φηαλ απνθαζίζεη ε ίδηα (π.ρ. φζν
ρξφλν πεξηκέλεη λα δηαβάζεη θάηη απφ ηνλ δίζθν) παξαρσξεί ηνλ επεμεξγαζηή ζε επφκελε δηεξγαζία. ε
απηήλ ηελ θαηεγνξία αλήθαλ νη εθδφζεηο ησλ MS Windows πξηλ απφ ηα Windows95.
Σα Λεηηνπξγηθά πζηήκαηα πνπ είλαη πνιιαπιώλ ρξεζηώλ επηηξέπνπλ ηε ρξήζε ηνπ ππνινγηζηή απφ πνιινχο
ρξήζηεο ζπγρξφλσο. Σέηνηα παξαδείγκαηα είλαη φιεο νη παξαιιαγέο ηνπ 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 είλαη κνλνύ ρξήζηε θαη κνλήο εξγαζίαο. Πιένλ, ηα
πεξηζζφηεξα κνληέξλα Λεηηνπξγηθά πζηήκαηα είλαη θαη πνιιαπιώλ εξγαζηώλ θαη πνιιαπιώλ ρξεζηώλ.
Έλα θαηαλεκεκέλν Λεηηνπξγηθφ χζηεκα δηαρεηξίδεηαη έλα ζχλνιν απφ ππνινγηζηέο θαη δίλεη ηελ αίζζεζε
ζηνπο ρξήζηεο φηη πξφθεηηαη γηα έλαλ ππνινγηζηή. Ζ αλάπηπμε ησλ δηθηχσλ θαη πιένλ ηνπ ζχλλεθνπ (cloud)
έρνπλ δψζεη ψζεζε ζηνλ Καηαλεκεκέλν Τπνινγηζκφ (Distributed Computing). Όηαλ έλα ζχλνιν απφ
ππνινγηζηέο εξγάδνληαη ζε ζπλεξγαζία ηφηε ιέκε φηη απνηεινχλ έλα Καηαλεκεκέλν χζηεκα.
Έλα Λεηηνπξγηθφ χζηεκα Πξαγκαηηθνχ ρξφλνπ εγγπάηαη φηη κπνξεί λα επεμεξγαζηεί «γεγνλφηα» (events) ή
δεδνκέλα ζε ζπγθεθξηκέλν ρξφλν. Μπνξεί λα είλαη κνλήο εξγαζίαο ή πνιιαπιώλ εξγαζηώλ. Όηαλ είλαη
πνιιαπιψλ εξγαζηψλ, ηφηε απαηηείηαη ε ρξήζε εμεηδηθεπκέλσλ αιγνξίζκσλ γηα ηελ εθηέιεζε ησλ δηεξγαζηψλ
ζε πξαγκαηηθφ ρξφλν. Σέηνηνπ ηχπνπ Λεηηνπξγηθά πζηήκαηα ζπλαληνχκε ζε ππνινγηζηέο ή ππνινγηζηηθέο
κεραλέο πνπ ρεηξίδνληαη ηαηξηθά κεραλήκαηα, εξγνζηαζηαθέο κνλάδεο παξαγσγήο, έιεγρν αεξνπιάλσλ,
έιεγρν απηνθηλήησλ θ.η.ι.
Σα Λεηηνπξγηθά πζηήκαηα πνπ ελζσκαηψλνληαη ζην πιηθφ νλνκάδνληαη Δλζσκαησκέλα (Embedded). Δίλαη
ζρεδηαζκέλα εηδηθά γηα ηελ θάζε κεραλή θαη πξνηηκψληαη ζε κηθξέο κεραλέο (π.ρ. PDAs), επεηδή ιεηηνπξγνχλ
26
κε πεξηνξηζκέλν αξηζκφ πφξσλ θαζψο θαη γηα ζπζηήκαηα πξαγκαηηθνχ ρξφλνπ. Παξαδείγκαηα απηήο ηεο
θαηεγνξίαο είλαη:
PDAs: Windows CE, Windows Mobile, SymbianOS, iOS, Embedded Linux (Maemo based on Debian ,
MeeGo merger of Moblin and Maemo, webOS from Palm, Inc., OpenZaurus, Metano GNU/Linux from
Pynell, Android) θ.ά.,
Digital media players (DSPnano RTOS, ipodlinux, RockBox, iOS, θ.ά.),
Smartphones and Mobile phones
o BlackBerry OS,
o Embedded Linux (Access Linux Platform, Android, Metano Linux ME/LX, bada, Openmoko
Linux, Ophone, MeeGo (from merger of Maemo & Moblin), Mobilinux, MotoMagx, Qt
Extended, LiMo, Platform, webOS),
o PEN/GEOS, GEOS-SC, GEOS-SE,
o iOS (ππνζχλνιν ηνπ Mac OS X),
o Palm OS,
o Symbian platform, Symbian OS,
o Windows Mobile
θ.ά.
Πνιινί ζεσξνχλ φηη ηα Λεηηνπξγηθά πζηήκαηα γηα έμππλα θηλεηά ηειέθσλα (smart phones) θαη
ηακπιέηεο (tablets) απνηεινχλ μερσξηζηή θαηεγνξία: Λεηηνπξγηθά πζηήκαηα Κηλεηψλ (Mobile Operating
Systems). ηελ πξαγκαηηθφηεηα φκσο πξφθεηηαη γηα ελζσκαησκέλα Λεηηνπξγηθά πζηήκαηα.
Ζ ηζηνξία ηνπ Unix μεθηλά πεξίπνπ ζηα κέζα ηεο δεθαεηίαο ηνπ 1960, φηαλ ην Σερλνινγηθφ Ηλζηηηνχην
Μαζαρνπζέηεο (Μ.Η.Σ.), ε AT&T, ε Bell Labs θαη ε General Electric αλέπηπμαλ έλα πεηξακαηηθφ
Λεηηνπξγηθφ χζηεκα θαηακεξηζκνχ ρξφλνπ γηα ηνλ ππνινγηζηή ηχπνπ mainframe GE-645. Σν ιεηηνπξγηθφ
απηφ ζχζηεκα νλνκάζηεθε Multics [1]. Σν Multics εηζήγαγε πνιιέο θαηλνηνκίεο αιιά είρε πνιιά
πξνβιήκαηα. Απνγνεηεπκέλνη απφ ην κέγεζνο θαη ηελ πνιππινθφηεηα ηνπ Multics, ηα ζηειέρε ηεο Bell Labs
εγθεηέιεηςαλ ην έξγν. Οη ηειεπηαίνη εξεπλεηέο πνπ εξγάδνληαλ ζην MULTICS, νη Ken Thompson, Dennis
Ritchie, MD McIlroy θαη JF Ossanna, απνθάζηζαλ λα μαλαυινπνηήζνπλ ην Λεηηνπξγηθφ χζηεκα ζε
κηθξφηεξε θιίκαθα γηα ηνλ ππνινγηζηή DPD-7 ηεο DEC. H έθδνζε απηή αξγφηεξα νλνκάζηεθε Unics
(UNiplexed Information and Computing Service) σο έλα ινγνπαίγλην κε ηελ πξνεγνχκελε νλνκαζία Multics
(Multiplexed Information and Computer Services). Σν λέν ιεηηνπξγηθφ ζχζηεκα ήηαλ κηα κηθξφηεξε έθδνζε
ηνπ Multics θαη αξρηθά θαηαζθεπάζηεθε γηα ηε κεραλή PDP-7 [2].
Σν 1970, ην UNIX κεηαθέξζεθε ζε PDP-11, γηα λα ππνζηεξίμεη ην γξαθείν επξεζηηερληψλ ησλ Bell
Labs. Δλψ ην 1973 μαλαγξάθηεθε ζε γιψζζα C απφ ηνλ Dennis Ritchie γηα λα δηεπθνιπλζεί ε
κεηαθεξζηκφηεηά ηνπ ζε κειινληηθά ζπζηήκαηα.
Σν UNIX ζηα κέζα ηεο δεθαεηίαο 1970 έσο ηηο αξρέο ηεο δεθαεηίαο 1980 έγηλε πνιχ δεκνθηιέο «γηα
εθπαηδεπηηθνχο ζθνπνχο» ζε αθαδεκατθά πεξηβάιινληα. Σν 1977 ην Παλεπηζηήκην Berkeley (California)
έδσζε ζηε δεκνζηφηεηα ηηο αξρηθέο εθδφζεηο ηνπ Berkeley Software Distribution (BSD) UNIX πνπ ηειηθά
θαηέζηε κηα αλεμάξηεηε κνξθή ηνπ Λεηηνπξγηθνχ πζηήκαηνο. Σν 1983 ηα Bell Labs έδσζαλ ζηε
δεκνζηφηεηα ην System V πνπ έγηλε ε ζχγρξνλε πξνζσπνπνίεζε ηνπ απζεληηθνχ ζπζηήκαηνο UNIX.
Σα ζπζηήκαηα UNIX αθφκε θαη ζήκεξα είλαη έλαο ζπλδπαζκφο ησλ εθδφζεσλ System V θαη BSD
θαη πξνζπαζνχλ λα ελζσκαηψζνπλ ηα απαξαίηεηα ραξαθηεξηζηηθά πνπ επηβάιιεη ε απνδνρή ησλ παξαπάλσ
πξνηχπσλ.
1.3.2 Δθδόζεηο
ην ρήκα 1.1 παξνπζηάδεηαη ζρεκαηηθά ε ηζηνξία ησλ δηαθφξσλ εθδφζεσλ UNIX. Απφ ην παξαθάησ ζρήκα
νη πεξηζζφηεξνη (εηδηθά νη λεψηεξνη) ηα κφλα πνπ έρνπλ αθνχζεη έζησ νλνκαζηηθά είλαη ην Linux θαη ην Mac
27
OS X. Καη φκσο, ην Linux θαη ην Mac OS X είλαη κφλν έλα κηθξφ ηκήκα ζε φιν απηφ ην ηεξάζηην δέληξν, ην
νπνίν απ' φηη βιέπνπκε έρεη ηε ξίδα ηνπ ην 1969 θαη ζπλερίδεη λα αλαπηχζζεηαη.
1.3.3 To Linux
Σν Linux, φπσο θαίλεηαη θαη ζην παξαπάλσ ζρήκα (ρήκα 1.1) απνηειεί έλα κηθξφ ππνζχλνιν ζηελ φιε
ηζηνξία εθδφζεσλ ηνπ UNIX. Δίλαη κηα παξαιιαγή ηνπ UNIX εηδηθά ζρεδηαζκέλε γηα ηελ αξρηηεθηνληθή ηνπ
PC (φηαλ δεκηνπξγήζεθε ην Linux ρξεζηκνπνηνχληαλ ν φξνο IBM PC ή IBM compatible). Σελ αξρηθή
έθδνζε δεκνζηεζε ζην Γηαδίθηπν ν Linus Torvalds απφ ηε θηιαλδία ην 1991. Δίλαη δσξεάλ γηα ρξήζε θαη ν
πεγαίνο θψδηθαο είλαη δηαζέζηκνο ππφ ηελ πξνζηαζία ηεο Free Software Foundation (FSF) GNU Project.
Πεξηέρεη φια ηα ραξαθηεξηζηηθά ηνπ UNIX.
Λφγσ ηεο εκπνξηθήο επηθξάηεζεο ησλ PC, αλαπηχρζεθαλ πνιιέο δηαλνκέο Linux. Οη δηαλνκέο
κεηαμχ ηνπο δελ έρνπλ δηαθνξέο ζην ίδην ην Λεηηνπξγηθφ χζηεκα θαη ηνλ ππξήλα, αιιά θπξίσο ζηνλ ηξφπν
κε ηνλ νπνίν δηαρεηξίδεηαη θαη εγθαζηζηά ν ρξήζηεο πξνγξάκκαηα θαη ιεηηνπξγίεο, φπσο επίζεο θαη ζηνλ
ηξφπν κε ηνλ νπνίν γίλεηαη ε ξχζκηζε παξακέηξσλ (configuration) ηνπ Λεηηνπξγηθνχ πζηήκαηνο. ην
παξαθάησ ζρήκα (Γηαδξαζηηθφ ρήκα 1.2) θαίλεηαη ζρεκαηηθά ε ηζηνξία αλάπηπμεο ησλ δηαλνκψλ Linux. Οη
βαζηθέο δηαλνκέο είλαη νη:
debian
redhat
slackware
Όιεο νη ππφινηπεο δηαλνκέο είλαη παξαιιαγέο (ή εμεηδηθεπκέλεο δηακνξθψζεηο) ησλ ηξηψλ απηψλ
δηαλνκψλ. Γηα παξάδεηγκα ην Ubuntu, ην νπνίν είλαη αξθεηά δεκνθηιέο ζηηο κέξεο καο ιφγσ ηεο επθνιίαο
εγθαηάζηαζεο, βαζίδεηαη ζην debian. Γηα ην Ubuntu ππάξρνπλ δηάθνξεο παξαιιαγέο φπσο Ubuntu Server,
Ubuntu Desktop, KUbuntu, Xubuntu θ.ά. Όιεο απηέο νη δηαλνκέο δηαθέξνπλ κεηαμχ ηνπο κφλν ζηηο αξρηθέο
ξπζκίζεηο θαη ζηα αξρηθά πξνγξάκκαηα πνπ εγθαζίζηαληαη απηνκάησο. Έρνληαο θάλεη εγθαηάζηαζε έλα
28
“Ubuntu Server”, κπνξνχκε ζηελ πνξεία θάλνληαο εγθαηάζηαζε ή απεγθαηάζηαζε δηαθφξσλ πξνγξακκάησλ
θαη δπλαηνηήησλ λα ην κεηαηξέςνπκε νπζηαζηηθά ζε “Ubuntu Desktop”.
1.3.4 Χαξαθηεξηζηηθά
ην ρήκα 1.3 θαίλεηαη ε ηεξαξρία ζε έλα ζχζηεκα UNIX. Ξεθηλψληαο απφ θάησ πξνο ηα πάλσ, θαίλεηαη φηη
ν ππξήλαο είλαη ην κφλν ζηνηρείν πνπ επηθνηλσλεί κε ην πιηθφ ηνπ ππνινγηζηή. Οη εθαξκνγέο επηθνηλσλνχλ
κε ηνλ ππξήλα, θαη ηειηθά κφλν κέζσ απηνχ κπνξνχλ λα θάλνπλ ρξήζε ηνπ πιηθνχ. Οη ρξήζηεο
ρξεζηκνπνηνχλ εθαξκνγέο νη νπνίεο πξνσζνχλ ηηο ιεηηνπξγίεο ηνπο πξνο ηα θάησ. Σν θέιπθνο είλαη ζηελ
πξαγκαηηθφηεηα κηα εθαξκνγή. Ζ κφλε, αιιά πνιχ ζεκαληηθή, ιεηηνπξγία πνπ έρεη ην θέιπθνο είλαη λα
πξνσζεί ηηο εληνιέο ησλ ρξεζηψλ πξνο ηνλ ππξήλα. Οη εθαξκνγέο πνπ κπνξνχλ λα ρξεζηκνπνηήζνπλ νη
ρξήζηεο κπνξεί λα είλαη είηε γξαθηθέο, δειαδή λα ιεηηνπξγνχλ κέζσ ηνπ γξαθηθνχ πεξηβάιινληνο (π.ρ.:
firefox, chrome, openOffice θηι.), είηε λα εθηεινχληαη κέζα απφ έλα ηεξκαηηθφ. Σν θέιπθνο είλαη κηα
εθαξκνγή ρσξίο γξαθηθή δηεπηθάλεηα ρξήζεο θαη εθηειείηαη κέζα ζε έλα ηεξκαηηθφ.
Χρήστης - User
Εφαρμογή - Application
Λειτουργικό Σφστημα -
Operating System
Υλικό - Hardware
ηνλ παξφληα εξγαζηεξηαθφ νδεγφ ζα κειεηήζνπκε ηελ ρξήζε ηνπ UNIX (Linux) ρξεζηκνπνηψληαο ηελ
γξακκή εληνιψλ θαη ζπγθεθξηκέλα ην θέιπθνο bash. Παξαθάησ, ζα αλαθεξζνχκε αλαιπηηθά ζηνλ ηξφπν
ιεηηνπξγίαο ηνπ θειχθνπο. Απηφ πνπ πξέπεη λα επηζεκαλζεί ζε απηφ ην ζεκείν είλαη πσο ην θέιπθνο είλαη έλα
πξφγξακκα ην νπνίν αλαιακβάλεη λα δηαβάδεη ηηο εληνιέο ηνπ ρξήζηε θαη λα δίλεη ηηο θαηάιιειεο
πιεξνθνξίεο-εληνιέο ζηνλ ππξήλα γηα εθηέιεζε.
1. Δκθάληζε ηνπ prompt (πξνηξνπήο). Γειψλεη φηη ην θέιπθνο είλαη έηνηκν λα δερηεί ηελ επφκελε εληνιή.
2. Λήςε θαη γξακκαηηθή αλάιπζε ηεο ζχληαμεο ηεο επφκελεο εληνιήο,
3. Δθηέιεζε ηεο δηαδηθαζίαο εηζφδνπ θαη κεηαζρεκαηηζκφο ηεο εληνιήο,
4. Αξρηθνπνίεζε ησλ απαηηνχκελσλ ιεηηνπξγηψλ,
5. Αλακνλή γηα νινθιήξσζε ησλ ιεηηνπξγηψλ πνπ είλαη ζε εμέιημε,
6. Δπηζηξνθή ζην βήκα 1.
29
ηελ νπζία, ινηπφλ, ην θέιπθνο είλαη έλα πξφγξακκα πνπ πεξηκέλεη ηνλ ρξήζηε λα πιεθηξνινγήζεη
κηα εληνιή. Μφιηο ν ρξήζηεο ηελ πιεθηξνινγήζεη, ηελ εξκελεχεη θαη θάλεη ηηο απαξαίηεηεο ελέξγεηεο γηα ηελ
εθηέιεζή ηεο. Αθνχ νινθιεξσζεί ε εθηέιεζε, ηφηε πεξηκέλεη γηα ηελ επφκελε εληνιή.
ε έλα ζχζηεκα UNIX ππάξρνπλ θάπνηεο βαζηθέο έλλνηεο πνπ πξέπεη λα κειεηήζνπκε πξηλ πξνρσξήζνπκε
ζηελ ρξήζε ηνπο. Απηέο πεξηιεπηηθά είλαη νη:
Αξρεία,
Υξήζηεο θαη Οκάδεο Υξεζηψλ,
Γηεξγαζίεο (Processes) .
1.3.7 Αξρεία
ε έλαλ ππνινγηζηή κηα απφ ηηο βαζηθφηεξεο νληφηεηεο είλαη ηα αξρεία. Αξρείν (ππνινγηζηή) είλαη έλα
ζχλνιν απφ δεδνκέλα. Σα δεδνκέλα απηά κπνξνχλ λα πθίζηαληαη ζε δηάθνξεο κνξθέο, φπσο αξρείν θεηκέλνπ,
αξρείν θσηνγξαθίαο, αξρείν βίληεν, αξρείν πνπ αληηζηνηρεί ζε πξφγξακκα θ.ά. Δπίζεο αξρείν είλαη θαη κηα
ζπιινγή απφ άιια αξρεία. Ζ ζπιινγή απηή νλνκάδεηαη θάθεινο ή θαηάινγνο (folder ή directory). Μάιηζηα
ζην UNIX ε έλλνηα ηνπ αξρείνπ είλαη αξθεηά δηεπξπκέλε. Χο αξρεία αλαπαξηζηψληαη θαη νη πφξνη ηνπ
ππνινγηζηή. Έηζη ζην UNIX ππάξρνπλ δηάθνξνη ηχπνη αξρείσλ:
30
1.3.8 Χξήζηεο θαη Οκάδεο Χξεζηώλ
ε έλα ζχζηεκα UNIX, ππάξρνπλ πξαγκαηηθνί θαη εηθνληθνί ρξήζηεο. Με ηελ έλλνηα ηνπ ρξήζηε είλαη
ηαπηφζεκε θαη ε έλλνηα ηνπ ινγαξηαζκνχ (account). Γηα θάζε ρξήζηε ππάξρεη θαη έλαο ινγαξηαζκφο ρξήζηε
(user account). ε θάζε ινγαξηαζκφ ρξήζηε αληηζηνηρεί έλα φλνκα ρξήζηε (username) θαη ζπλήζσο θαη έλαο
θσδηθφο (password). Με απηά ηα δπν ζηνηρεία απζεληηθνπνηνχληαη νη ρξήζηεο πνπ πξνζπαζνχλ λα
ρξεζηκνπνηήζνπλ (ηνπηθά ή απνκαθξπζκέλα) ηνλ ππνινγηζηή. Σνπο ινγαξηαζκνχο ρξεζηψλ κπνξνχκε λα
ηνπο ρσξίζνπκε ζε 3 θαηεγνξίεο:
1. Πξαγκαηηθνί ρξήζηεο είλαη νη ινγαξηαζκνί πνπ αληηζηνηρνχλ ζε θπζηθά πξφζσπα. Γηα παξάδεηγκα
γηα ηνλ ρξήζηε Αληψλε ηδεξφπνπιν ππάξρεη έλαο ινγαξηαζκφο κε ην φλνκα ρξήζηε “asidirop”. O
“asidirop”, ινηπφλ, είλαη έλαο πξαγκαηηθφο ρξήζηεο, αθνχ αληηζηνηρεί ζε θπζηθφ πξφζσπν.
2. Δηθνληθνί ρξήζηεο είλαη νη ινγαξηαζκνί πνπ δελ αληηζηνηρνχλ ζε θπζηθά πξφζσπα, αιιά
δεκηνπξγνχληαη γηα ηελ εμππεξέηεζε ιεηηνπξγηψλ ηνπ ζπζηήκαηνο θαη ησλ ππεξεζηψλ πνπ
εθηεινχληαη ζε απηφ. Γηα παξάδεηγκα, ζε έλα ζχζηεκα UNIX, ην νπνίν ιεηηνπξγεί θαη σο εμππεξέηεο
ειεθηξνληθήο αιιεινγξαθίαο (mail server), δεκηνπξγείηαη ν ρξήζηεο κε φλνκα “mail”. ε απηφλ ηνλ
ρξήζηε αλήθνπλ φια ηα αξρεία πνπ αθνξνχλ ηελ ππεξεζία αιιεινγξαθίαο. Με απηφλ ηνλ ηξφπν
θαλέλαο πξαγκαηηθφο ρξήζηεο δελ έρεη πξφζβαζε ζηα αξρεία ειεθηξνληθήο αιιεινγξαθίαο.
πλεπψο, θαλέλαο ρξήζηεο δελ κπνξεί λα δηαβάζεη ηελ αιιεινγξαθία θάπνηνπ άιινπ ρξήζηε.
πλήζσο γηα ηνπο ινγαξηαζκνχο πνπ αληηζηνηρνχλ ζε εηθνληθνχο ρξήζηεο δελ νξίδεηαη θαλέλαο
θσδηθφο πξφζβαζεο, εθφζνλ δελ ππάξρεη ε δπλαηφηεηα ζχλδεζεο ελφο πξαγκαηηθνχ ρξήζηε κε απηφ.
3. Ο ρξήζηεο root: πλήζσο αλαθέξεηαη σο ππεξρξήζηεο (superuser) ή δηαρεηξηζηήο (administrator). Ο
ρξήζηεο απηφο είλαη εηθνληθφο ρξήζηεο θαη έρεη δηθαίσκα λα θάλεη νηηδήπνηε ζηνλ ππνινγηζηή. Όινη
νη ππφινηπνη ρξήζηεο δελ έρνπλ πξφζβαζε ζε φια ηα ηκήκαηα ηνπ ζπζηήκαηνο (αξρεία ή ππεξεζίεο),
ελψ ν ζπγθεθξηκέλνο ρξήζηεο έρεη πξφζβαζε ζε νηηδήπνηε.
1
ηκήκα Μεραληθψλ Πιεξνθνξηθήο, Αιεμάλδξεηνπ ΑΣΔΗ Θεζζαινλίθεο
31
Αλ δψζνπκε ηηο παξαθάησ εληνιέο ζηνλ server ηνπ ηκήκαηνο:
dlabs@aetos:~$ id asidirop
uid=1143(asidirop) gid=993(conit) groups=993(conit)
dlabs@aetos:~$ id v13
uid=1113(v13) gid=1024(x9697)
groups=1024(x9697),0(root),4(adm),113(chpasswd),121(su),900(spam)
,2002(eggrafes),2003(ikaros)
Ζ εληνιή id καο εκθαλίδεη πιεξνθνξίεο γηα ην φλνκα ρξήζηε πνπ νξίδνπκε. Ζ εληνιή “id asidirop”
καο δείρλεη φηη ν ρξήζηεο κε ην φλνκα “asidirop” έρεη uid ίζν κε 1143 θαη σο θχξηα νκάδα ηελ conit κε gid
ίζν κε 993. Ο ζπγθεθξηκέλνο ρξήζηεο δελ αλήθεη ζε άιιεο νκάδεο. Ζ ίδηα εληνιή γηα ηνλ ρξήζηε v13, καο
δίλεη σο απνηέιεζκα φηη ν ρξήζηεο v13 έρεη uid=1113 θαη σο θχξηα νκάδα ηελ x9697 κε gid=1024. Δπηπιένλ
φκσο ν ρξήζηεο v13 αλήθεη θαη ζηηο νκάδεο root, adm, chpasswd, su, spam, eggrafes, ikaros θαη βέβαηα καο
εκθαλίδνληαη θαη νη αληίζηνηρνη αξηζκνί νκάδσλ.
Γηεξγαζία θαιείηαη έλα πξφγξακκα, φηαλ βξίζθεηαη ζε εθηέιεζε. Γηεξγαζία είλαη κηα ελεξγή νληφηεηα (ζε
επίπεδν ινγηζκηθνχ) ε νπνία πεξηιακβάλεη ηνλ θψδηθα ηνπ πξνγξάκκαηνο, ηα δεδνκέλα ηνπ θαζψο θαη ηελ
θαηάζηαζε εθηέιεζεο, ζε πνην ζεκείν, δειαδή, ηνπ πξνγξάκκαηνο βξίζθεηαη ε εθηέιεζε [3]. Δπίζεο έρεη θαη
δηάθνξεο αθφκε ηδηφηεηεο ηηο νπνίεο ζα ηηο κειεηήζνπκε ζην Κεθάιαην 7. Έλα πξφγξακκα κπνξεί λα
εθηειείηαη πνιιέο θνξέο ζπγρξφλσο, νπφηε θαη δεκηνπξγνχληαη πνιιέο δηεξγαζίεο πνπ πξνέθπςαλ απφ ην ίδην
πξφγξακκα θαη νη νπνίεο είλαη (ζπλήζσο) αλεμάξηεηεο κεηαμχ ηνπο. Πνιιέο θνξέο, αληί ηνπ φξνπ δηεξγαζία
(process), ρξεζηκνπνηείηαη ν φξνο εξγαζία (task). Υαξαθηεξηζηηθφ παξάδεηγκα είλαη ν TaskManager ησλ
Windows (ρήκα 1.4). Πξνθαλψο, ππάξρεη πιήζνο αληίζηνηρσλ εθαξκνγψλ γηα UNIX κε πεξηζζφηεξν
δηαδεδνκέλε ηελ εληνιή “top” (ρήκα 1.5), ε νπνία έρεη ηε δπλαηφηεηα λα εθηειείηαη ζε ηεξκαηηθφ ρσξίο λα
απαηηείηαη γξαθηθφ πεξηβάιινλ.
32
ρήκα 1.5: Η εληνιή top ηνπ UNIX.
Τπάξρνπλ πάξα πνιιέο επηινγέο ζε ζρέζε κε ηνλ ηξφπν κε ηνλ νπνίν κπνξείηε λα εμαζθεζείηε:
Δξγαδφκελνη ζηα εξγαζηήξηα ηνπ ηκήκαηνο (linux) αθφκε θαη εθηφο δηδαθηηθψλ σξψλ. Απηφ βέβαηα δελ
είλαη ηδηαίηεξα πξαθηηθφ.
Δγθαζηζηψληαο ζηνλ πξνζσπηθφ ζαο ππνινγηζηή Linux. Απηή ζεσξείηαη ε θαιχηεξε δπλαηή ιχζε
δεδνκέλνπ φηη ζα απνθηήζεηε ηελ εκπεηξία ρξήζεο θαη εγθαηάζηαζεο. Τπάξρνπλ αξθεηνί θνηηεηέο, νη
νπνίνη δελ πξνηηκνχλ απηή ηε ιχζε, θνβνχκελνη φηη κπνξεί λα θαηαζηξέςνπλ ηνλ ππνινγηζηή ηνπο. Ζ
απάληεζε είλαη πσο, φ,ηη θαη λα θάλνπλ, δελ κπνξνχλ λα πξνθαιέζνπλ βιάβε ζην πιηθφ ηνπ ππνινγηζηή.
Ζ κφλε «δεκηά» πνπ κπνξεί λα γίλεη αθνξά ην ινγηζκηθφ ηνπ ππνινγηζηή θαη ζπλήζσο ηελ εγθαηάζηαζε
ησλ windows ή ηελ αδπλακία γηα εθθίλεζε ηνπ Λεηηνπξγηθνχ πζηήκαηνο. Όια ηα ζθάικαηα κπνξνχλ λα
δηνξζσζνχλ πνιχ εχθνια, αλ, πξηλ θάλνπκε νπνηνδήπνηε πείξακα, έρνπκε πάξεη ζε εμσηεξηθφ δίζθν
αληίγξαθν αζθαιείαο. Τπάξρνπλ πνιινί ηξφπνη γηα λα ην πεηχρεηε απηφ, έλαο απφ απηνχο είλαη ε ρξήζε
ηνπ clonezilla (http://clonezilla.org/).
Απνκαθξπζκέλα (απφ ζχζηεκα Windows) ζπλδεφκελνη ζε έλαλ ππνινγηζηή κε linux ή UNIX. Όινη νη
θνηηεηέο ηνπ ηκήκαηνο Μεραληθψλ Πιεξνθνξηθήο ηνπ ΣΔΗ Θεζζαινλίθεο, δηαζέηεηε ινγαξηαζκφ ζηνλ
ππνινγηζηή κε ην δηθηπαθφ φλνκα aetos.it.teithe.gr.
Δγθαζηζηψληαο linux ζε Δηθνληθή Μεραλή (Virtual Machine). Απηή είλαη κηα ηέηαξηε πνιχ θαιή επηινγή
θαη κάιηζηα απφιπηα αζθαιήο, φζα ζθάικαηα θαη αλ θάλνπκε. Απαξαίηεηε πξνυπφζεζε είλαη ε ρξήζε
ελφο πξνγξάκκαηνο εηθνληθνπνίεζεο (Virtualization) [1, 2]. Δλδεηθηηθά ηέηνηα πξνγξάκκαηα
εηθνληθνπνίεζεο είλαη ην Virtual Box (https://www.virtualbox.org/) θαη ην VMWare
(http://www.vmware.com/). Απηά ηα πξνγξάκκαηα έρνπλ ηε δπλαηφηεηα λα δεκηνπξγήζνπλ ζε επίπεδν
ινγηζκηθνχ έλαλ εηθνληθφ ππνινγηζηή. Ο εηθνληθφο απηφο ππνινγηζηήο έρεη φιεο ηηο ηδηφηεηεο θαη ηα
ραξαθηεξηζηηθά ελφο πξαγκαηηθνχ ππνινγηζηή, δειαδή πεξηέρεη κλήκε, δίζθν, θάξηα δηθηχνπ, θάξηα
γξαθηθψλ θηι. Μάιηζηα, ν ρξήζηεο έρεη ηε δπλαηφηεηα φια ηα πξνεγνχκελα λα ηα ξπζκίζεη αλάινγα κε
ηηο αλάγθεο ηνπ. Γηα παξάδεηγκα λα νξίζεη φηη ν εηθνληθφο ππνινγηζηήο κε ην φλνκα Α ζα έρεη 2GB
θχξηαο κλήκεο θαη 100GB ζθιεξνχ δίζθνπ. Πξνθαλψο, ηα 2GB ζα δεζκεπηνχλ απφ ηελ πξαγκαηηθή
κλήκε ηνπ κεραλήκαηνο νηθνδεζπφηε (host machine), φηαλ ν εηθνληθφο ππνινγηζηήο Α είλαη ελεξγφο.
Δπίζεο, γηα ηα 100GB ζθιεξνχ δίζθνπ ζα δεκηνπξγεζεί ζηνλ θπζηθφ δίζθν έλα κεγάιν αξρείν κεγέζνπο
100GB. Ζ εηθνληθή κεραλή ζα αλαγλσξίζεη απηφ ην κεγάιν αξρείν σο θπζηθφ δίζθν θαη ζα γξάθεη ηα
δεδνκέλα ηεο εθεί. Πξνθαλψο, γηα λα επηιέμνπκε απηή ηε ιχζε ζα πξέπεη ν ππνινγηζηήο πνπ ζα
θηινμελήζεη ην εηθνληθφ κεράλεκα λα είλαη πινχζηνο ζε πφξνπο, δειαδή λα έρεη πνιχ κεγάιε θπζηθή
κλήκε (πεξίπνπ δηπιάζηα απ’ φζε απαηηείηαη γηα ηελ ρξήζε ελφο Λεηηνπξγηθνχ πζηήκαηνο), κεγάιν
ζθιεξφ δίζθν θαη θπζηθά ηζρπξφ επεμεξγαζηή. Έρνληαο δεκηνπξγήζεη έλαλ ηέηνην εηθνληθφ ππνινγηζηή,
κπνξνχκε ζε απηφλ λα εγθαηαζηήζνπκε νπνηνδήπνηε Λεηηνπξγηθφ χζηεκα επηζπκνχκε, ρσξίο απηφ λα
33
επεξεάδεη ην θπξίσο Λεηηνπξγηθφ χζηεκα πνπ εθηειείηαη ζηνλ ππνινγηζηή καο. Δπίζεο, κπνξνχκε λα
δεκηνπξγήζνπκε πνιιέο εηθνληθέο κεραλέο γηα πεηξακαηηζκφ (ρήκα 1.6). Μάιηζηα κπνξνχκε λα
θαηεβάζνπκε απφ ην δηαδίθηπν έηνηκεο εηθνληθέο κεραλέο, κε πξν-εγθαηεζηεκέλν έλα Λεηηνπξγηθφ
χζηεκα, φπσο γηα παξάδεηγκα απφ ηε ζειίδα :http://virtualboxes.org/images/ubuntu/ θαη λα ηηο
ρξεζηκνπνηήζνπκε.
Μηα επφκελε επηινγή είλαη ε ρξήζε κηαο έθδνζεο Linux ηχπνπ Live. πλεζίδεηαη ε νξνινγία Live-CD,
Live-DVD ή Live-USB αλάινγα κε ην κέζν ζην νπνίν απνζεθεχεηαη ε έθδνζε ηνπ Λεηηνπξγηθνχ
πζηήκαηνο. Οη εθδφζεηο ηχπνπ Live βαζίδνληαη ζηε θηινζνθία φηη δελ εγθαζίζηαηαη ηίπνηα ζηνλ
ππνινγηζηή, αιιά φια ηα πξνγξάκκαηα θαη ην Λεηηνπξγηθφ χζηεκα εθηεινχληαη απφ ην DVD ή ην
αληίζηνηρν κέζν. Σν κέζν (USB ή DVD) ζα πξέπεη λα δεκηνπξγεζεί κε ηνλ θαηάιιειν ηξφπν,
αθνινπζψληαο ηηο νδεγίεο πνπ ππάξρνπλ ζε θάζε πεξίπησζε
(παξάδεηγκα http://www.ubuntu.com/download/desktop/try-ubuntu-before-you-install) θαη λα
ξπζκίζνπκε ηνλ ππνινγηζηή λα θάλεη εθθίλεζε (boot) απφ ην κέζν ζην νπνίν έρνπκε απνζεθεχζεη ηελ
έθδνζε Live. Μεηνλέθηεκα απηήο ηεο επηινγήο είλαη φηη δελ κπνξνχκε λα απνζεθεχζνπκε ξπζκίζεηο πνπ
θάλνπκε ή πξνγξάκκαηα πνπ ζέινπκε λα εγθαηαζηήζνπκε, δηφηη φηη απνζεθεχνπκε, απνζεθεχεηαη ζε
έλαλ δίζθν ηχπνπ κλήκεο (RAM Drive). Έηζη ζηελ επφκελε επαλεθθίλεζε ηνπ ππνινγηζηή ζα
επαλέιζνπκε ζηελ αξρηθή θαηάζηαζε. Βέβαηα, απηφ πνπ ηψξα πεξηγξάθεηαη σο κεηνλέθηεκα, θάπνηνη
κπνξεί λα ην ζεσξνχλ πιενλέθηεκα (π.ρ. γηα ηελ πεξίπησζε θνηλφρξεζησλ ππνινγηζηψλ) ή κπνξεί λα
αιιάμεη ζηα επφκελα ιίγα ρξφληα ή κήλεο. Θπκίδνπκε φηη νη εμειίμεηο ζην ρψξν ησλ ππνινγηζηψλ θαη ηεο
ηερλνινγίαο είλαη ξαγδαίεο.
34
Αθφκε κηα επηινγή, είλαη ε θαλνληθή εγθαηάζηαζε ελφο ζπζηήκαηνο Linux φρη, φκσο, ζηνλ θχξην ζθιεξφ
δίζθν πνπ ρξεζηκνπνηνχκε, αιιά ζε θάπνηνλ εμσηεξηθφ. ε απηήλ ηελ πεξίπησζε, ζα πξέπεη λα
αθνινπζήζνπκε ηα βήκαηα εγθαηάζηαζεο, φπσο πεξηγξάθνληαη ζην αληίζηνηρν εγρεηξίδην εγθαηάζηαζεο,
αιιά λα επηιέμνπκε σο δίζθν απνζήθεπζεο ηνλ εμσηεξηθφ δίζθν. Καηά ηε δηάξθεηα ηεο εθθίλεζεο ηνπ
ππνινγηζηή, ζα πξέπεη λα επηιέγνπκε απφ ηελ αληίζηνηρε δπλαηφηεηα ηνπ BIOS, ην κέζν απφ ην νπνίν
επηζπκνχκε λα εθθηλήζεη ν ππνινγηζηήο καο. Με απηφλ ηνλ ηξφπν, απφ ηε κηα δελ έρνπκε επεξεάζεη ηνλ
πξσηεχνληα ζθιεξφ δίζθν, θαη απφ ηελ άιιε κπνξνχκε λα απνζεθεχζνπκε ξπζκίζεηο θαη πξνγξάκκαηα.
1.4 Αλαθνξέο
[1] Brian L Stuart. Principles of operating systems: design & applications. Course Technology, 2009.
[2] Peter H. Salus. A quarter century of UNIX. Addison-Wesley, 1994.
[3] U. Vahalia. Unix Internals: The New Frontiers. Dorling Kindersley Pvt. Limited, 2008.
[ https://books.google.gr/books?id=Z7qfu9NK7WQC ]
[4] WikiPedia. Linux, February 2015. [ http://en.wikipedia.org/wiki/Linux ]
[5] WikiPedia. Operating system, February 2015. [ http://en.wikipedia.org/wiki/Operating_system ]
[6] WikiPedia. Unix, February 2015. [ http://en.wikipedia.org/wiki/Unix ]
35
Κεθάιαην 2
Users
Applications
Shells
Kernel
Hardware
2.1.1 Σεξκαηηθό
Σεξκαηηθφ είλαη κηα ζπζθεπή κε νζφλε θαη πιεθηξνιφγην ε νπνία επηθνηλσλεί (κέζσ κηαο ζεηξηαθήο
ζχξαο) κε θάπνηνλ θεληξηθφ ππνινγηζηή. Μέρξη πεξίπνπ ην 1990 νη ρξήζηεο Unix ρξεζηκνπνηνχζαλ ζρεδφλ
απνθιεηζηηθά ηέηνηνπ ηχπνπ ηεξκαηηθέο ζπζθεπέο. ε έλαλ θεληξηθφ ππνινγηζηή ήηαλ ζπλδεδεκέλεο 10άδεο
ηεξκαηηθά. Σα ηεξκαηηθά δελ είραλ δηθή ηνπο CPU, αιιά ήηαλ κφλν ζπζθεπέο απνηεινχκελεο απφ νζφλε θαη
πιεθηξνιφγην (φρη πνληίθη). Ό,ηη πιεθηξνινγνχζε ν ρξήζηεο ζην πιεθηξνιφγην απνζηέιινληαλ κέζσ ηεο
ζεηξηαθήο επηθνηλσλίαο ζηνλ θεληξηθφ ππνινγηζηή. Ό,ηη "ηχπσλε" ν θεληξηθφο ππνινγηζηήο κεηαθέξνληαλ
κέζσ ηεο ζεηξηαθήο ζην ηεξκαηηθφ θαη ην ηεξκαηηθφ ην εκθάληδε ζηελ νζφλε. ηα
ρήκαηα 2.2 θαη 2.3 βιέπνπκε δπν θσηνγξαθίεο δηαδεδνκέλσλ ηεξκαηηθψλ ηεο επνρήο 1980-1990.
Πιένλ, πξνθαλψο δελ ππάξρνπλ νη παξαπάλσ ηεξκαηηθέο ζπζθεπέο. Οη ρξήζηεο ρξεζηκνπνηνχλ σο
ζηαζκνχο εξγαζίαο εμειηγκέλνπο ππνινγηζηέο νη νπνίνη είλαη ηθαλνί λα ρεηξηζηνχλ γξαθηθά (παξαζπξηθά)
πεξηβάιινληα. Τπάξρνπλ, φκσο, παξαζπξηθέο εθαξκνγέο νη νπνίεο πξνζνκνηψλνπλ ηε ιεηηνπξγία ελφο
ηεξκαηηθνχ. ηηο εθαξκνγέο πξνζνκνίσζεο ηεξκαηηθνχ, ε βαζηθή ιεηηνπξγία παξακέλεη ε ίδηα κε ηνπ
πξαγκαηηθνχ ηεξκαηηθνχ, βέβαηα ππάξρνπλ πιένλ πνιιέο πεξηζζφηεξεο δπλαηφηεηεο. ην ρήκα 2.4 θαίλεηαη
κηα ηέηνηα εθαξκνγή ε νπνία νλνκάδεηαη gnome-terminal θαη είλαη ηδηαίηεξα δηαδεδνκέλε. Τπάξρνπλ πνιιέο
δηαθνξεηηθέο εθαξκνγέο πξνζνκνίσζεο ηεξκαηηθνχ φπσο νη konsole, rxvt, xfce4-terminal, xterm, putty θαη
πνιιέο αθφκε [10].
37
ρήκα 2.2: Σεξκαηηθό DEC-vt100 (πεγή https://de.wikipedia.org/wiki/VT100).
Μέζα ζε έλα ηεξκαηηθφ εθηειείηαη κηα εθαξκνγή πνπ νλνκάδεηαη θέιπθνο (shell). ηελ πξαγκαηηθφηεηα,
πξνθαλψο δελ εθηειείηαη ην θέιπθνο «κέζα» ζην ηεξκαηηθφ, αιιά ην θέιπθνο εθηειείηαη απφ ηνλ
ππνινγηζηή. Γίλεηαη, φκσο, ε ξχζκηζε ην ηεξκαηηθφ λα «ζηέιλεη» ηηο εληνιέο πνπ πιεθηξνινγνχκε ζην
θέιπθνο, θαη απφ ηελ άιιε ην θέιπθνο λα ηππψλεη δεδνκέλα (κελχκαηα) ζην ηεξκαηηθφ. Δπεηδή φια απηά
εκθαλίδνληαη κέζα ζην ηεξκαηηθφ, θαηαρξεζηηθά ιέκε φηη ην θέιπθνο «ζηέιλεη» κέζα ζην ηεξκαηηθφ. Σν
θέιπθνο είλαη ππεχζπλν λα δηαβάζεη απφ ην ηεξκαηηθφ απηά πνπ πιεθηξνινγεί ν ρξήζηεο, λα ηα εξκελεχζεη
θαη λα ηα εθηειέζεη. Όπσο βιέπνπκε ζηελ ιίζηα πνπ αθνινπζεί, ππάξρνπλ πνιιά δηαθνξεηηθά θειχθε:
Οηθνγέλεηα Bourne Shell: Bourne Shell (sh), Bourne-Again Shell (bash), Korn Shell (ksh), MirBSD Korn
Shell (mksh), Almquist shell (ash),
Z-sh,
Οηθνγέλεηα C-shell: C-shell (csh), Tc-shell (tcsh).
Δπίζεο, σο θειχθε κπνξνχκε λα ζεσξήζνπκε θαη ηνπο δηεξκελεπηέο εληνιψλ (interpreters) γλσζηψλ
γισζζψλ πξνγξακκαηηζκνχ φπσο ηελ python, Ruby θ.ά. Σέινο, ζην Λεηηνπξγηθφ χζηεκα ησλ Windows
ππάξρεη ε εθαξκνγή "Command Prompt" (cmd.exe), ε νπνία βέβαηα έρεη ηδηαίηεξα πεξηνξηζκέλεο
δπλαηφηεηεο, ζα κπνξνχζακε φκσο λα ηελ νλνκάζνπκε θέιπθνο απφ ηελ άπνςε φηη «δηαβάδεη» ηηο εληνιέο
ηνπ ρξήζηε θαη ηηο κεηαθέξεη ζην Λεηηνπξγηθφ γηα εθηέιεζε. Γηα λα θαιχςεη ε Microsoft ηελ έιιεηςε ελφο
δπλακηθνχ θειχθνπο ζην ιεηηνπξγηθφ ηεο, αλέπηπμε ην Windows PowerShell
38
ρήκα 2.4: Παξαζπξηθό Σεξκαηηθό.
To θάζε θέιπθνο έρεη ηνπο δηθνχο ηνπ θαλφλεο ζχληαμεο ησλ εληνιψλ. Γελ ππάξρνπλ, φκσο,
ηδηαίηεξα πνιιέο αζπκβαηφηεηεο. Ζ βαζηθή ιεηηνπξγία ελφο θειχθνπο είλαη ν ρεηξηζκφο ησλ εληνιψλ ησλ
ρξεζηψλ. Απηφ γίλεηαη κε ηελ παξαθάησ αθνινπζία ιεηηνπξγηψλ:
1. Δκθάληζε ηεο πξνηξνπήο (prompt). Δίλαη έλδεημε αλακνλήο ηνπ Λ.. γηα ηελ αλακνλή εηζαγσγήο
εληνιήο. Ζ πξνηξνπή ζπλήζσο είλαη ν ραξαθηήξαο "$", ή κπνξεί λα πεξηέρεη θαη άιιεο πιεξνθνξίεο φπσο
"asidirop@aetos:~$". ην παξάδεηγκα απηφ, ζπκπεξηιακβάλεηαη ζηελ πξνηξνπή ε πιεξνθνξία ηνπ
νλφκαηνο ηξέρνληνο ρξήζηε (asidirop), ηνπ νλφκαηνο ηνπ ππνινγηζηή (aetos) θαη ηνπ ηξέρνληνο θαθέινπ
εξγαζίαο (~) .
2. Λήςε θαη γξακκαηηθή αλάιπζε ηεο ζχληαμεο ηεο εληνιήο,
3. Δθηέιεζε ηεο δηαδηθαζίαο εηζφδνπ θαη κεηαζρεκαηηζκφο ηεο εληνιήο,
4. Αξρηθνπνίεζε ησλ απαηηνχκελσλ ιεηηνπξγηψλ,
5. Αλακνλή γηα νινθιήξσζε ησλ ιεηηνπξγηψλ πνπ είλαη ζε εμέιημε (π.ρ. αλακνλή γηα ηνλ ηεξκαηηζκφ ηνπ
πξνγξάκκαηνο πνπ εθηειείηαη, θαζψο φζν εθηειείηαη έλα πξφγξακκα, «δεζκεχεη» ην ηεξκαηηθφ, δειαδή
δηαβάδεη απφ ην πιεθηξνιφγην θαη ηππψλεη ζηελ νζφλε ηνπ),
6. Δπαλαθνξά ζην βήκα 1.
Όλνκα_εληνιήο νξίζκαηα
Σα νξίζκαηα ρσξίδνληαη απφ ην φλνκα εληνιήο κε έλα ηνπιάρηζηνλ θελφ δηάζηεκα (space). Σα
νξίζκαηα κεηαμχ ηνπο ρσξίδνληαη, επίζεο, κε έλα ηνπιάρηζηνλ θελφ δηάζηεκα. Σα νξίζκαηα γηα ηηο εληνιέο
είλαη αληίζηνηρα κε ηα νξίζκαηα γηα ηηο ζπλαξηήζεηο (κεζφδνπο), δειαδή δίλνπλ επηπιένλ νδεγίεο ζηελ
εληνιή γηα ην πψο ζα ιεηηνπξγήζεη. ε κηα εληνιή κπνξεί λα ππάξρνπλ ππνρξεσηηθά θαη πξναηξεηηθά
νξίζκαηα.
Δπίζεο, αξθεηέο εληνιέο δέρνληαη δηαθφξσλ ηχπσλ νξίζκαηα ζε ζρέζε κε ηε ρξήζε ηνπο. Έηζη,
έρνπκε νξίζκαηα πνπ αληηζηνηρνχλ ζε νλφκαηα αξρείσλ θαη νξίζκαηα πνπ αληηζηνηρνχλ ζε ελεξγνπνίεζε
ιεηηνπξγηψλ. Πνιιέο θνξέο ηα ηειεπηαία νλνκάδνληαη ζεκαίεο (flags).
39
2.3.1 Η πξώηε κνπ εληνιή
Έζησ ε δηαηχπσζε:
cat file1.txt
40
ρήκα 2.6: Απνηέιεζκα θαθήο ρξήζεο ηεο cat.
ηελ εληνιή cat κπνξνχκε λα δψζνπκε πνιιά νλφκαηα αξρείσλ σο νξίζκαηα. Θα εκθαλίζεη ηα
πεξηερφκελα φισλ ησλ αξρείσλ, ην έλα κεηά ην άιιν ρσξίο θάπνην δηαρσξηζηηθφ ελδηάκεζα, φπσο ζην ρήκα
2.7.
Error! Not a valid link.
ρήκα 2.7: Απνηέιεζκα ηεο cat κε 2 αξρεία σο νξίζκαηα.
ηελ εληνιή cat κπνξνχκε λα δψζνπκε θαη νξίζκαηα ηχπνπ «ζεκαίαο» (flag). Γηα παξάδεηγκα ε
ζεκαία "-n" έρεη σο απνηέιεζκα λα εκθαλίζεη ε εληνιή θαη αχμνληα αξηζκφ κπξνζηά απφ θάζε γξακκή
(Βιέπε ρήκα 2.8).
Error! Not a valid link.
ρήκα 2.8: Απνηέιεζκα ηεο cat κε 2 αξρεία σο νξίζκαηα θαη ε ζεκαία "-n".
Έλαο ρξήζηεο δελ είλαη δπλαηφ λα ζπκάηαη φια ηα δπλαηά νξίζκαηα γηα φιεο ηηο εληνιέο. πλήζσο ζπκφκαζηε
κφλν απηά πνπ ρξεζηκνπνηνχκε πνιχ ζπρλά. Θα πξέπεη, ινηπφλ, ν ρξήζηεο λα κπνξεί λα βξίζθεη εχθνια ηα
νξίζκαηα πνπ κπνξεί λα δερζεί κηα εληνιή. Απηφ γίλεηαη ρξεζηκνπνηψληαο ην εγρεηξίδην ρξήζεο (manual
page) ηεο εληνιήο. Σν εγρεηξίδην ρξήζεο εκθαλίδεηαη ρξεζηκνπνηψληαο ηελ εληνιή man. Ζ εληνιή man [8]
δέρεηαη σο φξηζκα ην φλνκα κηαο εληνιήο θαη καο εκθαλίδεη ην εγρεηξίδην ρξήζεο γηα ηελ εληνιή. Γηα
παξάδεηγκα ε εληνιή:
man cat
ζα εκθαλίζεη ην εγρεηξίδην ρξήζεο ηεο εληνιήο cat φπσο ζην ρήκα 2.9. ην ζρήκα, δηαθξίλνληαη ηα
ζηνηρεία κε ηίηιν "NAME", "SYNOPSIS" θαη "DESCRIPTION".
41
ρήκα 2.9: Σν εγρεηξίδην ρξήζεο ηεο εληνιήο cat.
Ζ ζεηξά ησλ παξαπάλσ, δειψλεη θαη ηελ ζπνπδαηφηεηά ηνπο. Ζ πεξηγξαθή ηνπ ηη θάλεη ε εληνιή είλαη
ην πιένλ ζεκαληηθφ ζηνηρείν θαη αθνινπζεί ε ζχληαμε ηεο εληνιήο πνπ πεξηγξάθεηαη ζην ηκήκα
"SYNOPSIS". ε απηφ ην ηκήκα γηα ηελ εληνιή cat βιέπνπκε ηελ πιεξνθνξία:
42
cat -n -E file1.txt file2.txt
εκαίλεη:
"OPTIONS": έρνπκε δψζεη δπν ζεκαίεο, ηηο -n -E σο 1ν θαη 2ν φξηζκα.
"FILES": έρνπκε δψζεη δπν αξρεία (file1.txt θαη file2.txt) σο 3ν θαη 4ν φξηζκα.
To -n δίλεη ηελ νδεγία ζηελ εληνιή λα εκθαλίζεη έλαλ αχμνληα αξηζκφ ζηελ αξρή θάζε γξακκήο
(ζχκθσλα κε ην εγρεηξίδην ρξήζεο).
To -Δ δίλεη ηελ νδεγία ζηελ εληνιή λα εκθαλίζεη ην $ ζην ηέινο θάζε γξακκήο (ζχκθσλα κε ην εγρεηξίδην
ρξήζεο).
Πψο, φκσο, δηαρσξίδεη ε εληνιή cat (θαη νη ππφινηπεο εληνιέο πνπ δέρνληαη παξφκνηνπο ηχπνπο νξηζκάησλ)
ζε πνην ζεκείν ηειεηψλνπλ ηα νξίζκαηα ηχπνπ ζεκαίαο θαη ζε πνην ζεκείν μεθηλνχλ ηα νξίζκαηα πνπ
εθθξάδνπλ νλφκαηα αξρείσλ, δεδνκέλνπ φηη δελ ππάξρεη θάπνην δηαρσξηζηηθφ ζχκβνιν κεηαμχ ηνπο, θαη
δεδνκέλνπ φηη φια ηα νξίζκαηα είλαη πξναηξεηηθά; Μήπσο ζα κπνξνχζαλ λα κελ ππάξρνπλ θαλ νξίζκαηα
ηχπνπ εκαίαο;
Ζ απάληεζε ζην πξνεγνχκελν εξψηεκα είλαη φηη ν δηαρσξηζκφο ησλ ηχπσλ ησλ νξηζκάησλ γίλεηαη κε
βάζε ην αλ ππάξρεη ε παχια (-) ζηελ αξρή ηνπ νξίζκαηνο. Μάιηζηα ζε θάπνηεο πεξηπηψζεηο κπνξεί λα
ππάξρεη δηπιή παχια (--). πλεπψο, ε εληνιή "cat" δηαρσξίδεη ην "-Δ" θαη "θαηαιαβαίλεη" φηη δελ εθθξάδεη
φλνκα αξρείνπ, εμαηηίαο ηεο παχιαο κε ηελ νπνία μεθηλάεη ε ζπκβνινζεηξά (string) πνπ αληηζηνηρεί ζην
φξηζκα.
Όηαλ ηα νξίζκαηα ηχπνπ ζεκαίαο εθθξάδνληαη κε έλα γξάκκα ην θαζέλα, ζπλήζσο νη εληνιέο
επηηξέπνπλ ηελ ζχκπηπμε ηνπο ζε έλα φξηζκα. Έηζη ην:
Παξφηη νη δπν παξαπάλσ εληνιέο είλαη ηζνδχλακεο γηα ην απνηέιεζκα, ζηελ πξψηε πεξίπησζε
έρνπκε δψζεη ηέζζεξα νξίζκαηα ζηελ εληνιή, ηα δπν εθ ησλ νπνίσλ είλαη ζεκαίεο. ηε δεχηεξε πεξίπησζε
έρνπκε δψζεη ηξία νξίζκαηα ζηελ εληνιή. Μφλν ην πξψην απφ απηά (-nE) εθθξάδεη ζεκαία θαη κάιηζηα
αληηζηνηρεί ζε δπν ζεκαίεο. Σν αλ ππάξρεη απηή ε δπλαηφηεηα γηα ζχκπηπμε είλαη ζέκα ηεο θάζε εληνιήο θαη
φρη ηνπ θειχθνπο ή ηνπ ιεηηνπξγηθνχ ζπζηήκαηνο. Τπάξρνπλ αξθεηέο εληνιέο πνπ δελ επηηξέπνπλ ζχκπηπμε
ζηα νξίζκαηά ηνπο.
Ζ εληνιή ls [5] εκθαλίδεη ηα πεξηερφκελα (αξρεία θαη ππνθαηαιφγνπο) ηνπ θαηαιφγνπ ζηνλ νπνίν
βξηζθφκαζηε (ζην επφκελν θεθάιαην ζα δνχκε πεξηζζφηεξεο ιεπηνκέξεηεο γηα απηφ). Μπνξείηε λα δείηε ην
εγρεηξίδην ρξήζεο ηεο εληνιήο ls. Έλα παξάδεηγκα εθηέιεζεο ηεο εληνιήο είλαη:
ls -l -a /tmp
ην παξαπάλσ έρνπκε δψζεη ηξία νξίζκαηα ζηελ εληνιή. Σν πξψην είλαη ην -l θαη είλαη ηχπνπ
ζεκαίαο. Σν δεχηεξν είλαη ην -a θαη είλαη θαη απηφ ηχπνπ ζεκαίαο θαη ην ηξίην είλαη ην /tmp ην νπνίν
εθθξάδεη ηνλ θάθειν ηνπ νπνίνπ ηα πεξηερφκελα ζα καο εκθαλίζεη ε εληνιή. Όηαλ ηα νξίζκαηα είλαη ηχπνπ
43
ζεκαίαο θαη ζεκαηνδνηνχληαη κε έλαλ κφλν ραξαθηήξα (πρ. a, l θηι.), ηφηε νη πεξηζζφηεξεο εληνιέο
ππνζηεξίδνπλ ηελ ζχκπηπμή ηνπο. Έηζη ε πξνεγνχκελε εληνιή είλαη ηζνδχλακε κε ηελ:
ls -la /tmp
Οη δπν πξνεγνχκελεο εληνιέο είλαη ηζνδχλακεο σο πξνο ην απνηέιεζκα. Όκσο ζηελ πξψηε
πεξίπησζε έρνπκε δψζεη ζηελ εληνιή ηξία νξίζκαηα, εθ ησλ νπνίσλ ηα δπν πξψηα είλαη ηχπνπ ζεκαίαο. ηε
δεχηεξε πεξίπησζε έρνπκε δψζεη ζηελ εληνιή δπν νξίζκαηα. Μφλν ην πξψην είλαη ηχπνπ ζεκαίαο, αιιά
εθθξάδεη δπν ζεκαίεο, δειαδή δπν νδεγίεο πξνο ηελ εληνιή.
Δπίζεο, νη πεξηζζφηεξεο εληνιέο ππνζηεξίδνπλ νξίζκαηα ηχπνπ ζεκαίαο, ηα νπνία εθθξάδνληαη φρη
κφλν κε έλαλ ραξαθηήξα, αιιά κε νιφθιεξεο ιέμεηο. Αο δνχκε έλα απφζπαζκα απφ ην εγρεηξίδην ρξήζεο ηεο
εληνιήο ls:
-a, --all
do not ignore entries starting with .
-A, --almost-all
do not list implied . and ..
--author
with -l, print the author of each file
-b, --escape
print C-style escapes for nongraphic characters
--block-size=SIZE
scale sizes by SIZE before printing them. E.g.,
`--block-size=M' prints sizes in units of 1,048,576 bytes. See
SIZE format below.
.......
-r, --reverse
reverse order while sorting
.......
ην παξαπάλσ βιέπνπκε φηη ππάξρεη ην φξηζκα --author, ην νπνίν νδεγεί ηελ εληνιή λα εκθαλίζεη
γηα θάζε αξρείν ην φλνκα ηνπ ζπγγξαθέα. Δπίζεο, ππάξρεη ην φξηζκα --all ην νπνίν δίλεη ηελ νδεγία γηα
εκθάληζε θαη ησλ θξπθψλ αξρείσλ. Σν --all είλαη ηζνδχλακν κε ην -a. ηελ πξαγκαηηθφηεηα ην -a είλαη
ζπληφκεπζε ηνπ --all. Ζ ζπληφκεπζε απηή ππάξρεη επεηδή πξφθεηηαη γηα έλα πνιχ ζπρλφ φξηζκα. Απφ ηελ
άιιε, γηα ην --author δελ ππάξρεη θάπνηα ζπληφκεπζε, επεηδή δελ ρξεζηκνπνηείηαη πνιχ ζπρλά.
ls -ra
ls -r -a
ls --all --reverse
ls -a -r
ls --all -r
ls --reverse --all
Οη παξαπάλσ ρξήζεηο ηεο εληνιήο ls είλαη απνιχησο ηζνδχλακεο σο πξνο ην απνηέιεζκα. Δδψ αμίδεη
λα επηζεκάλνπκε πσο ζπλήζσο ηα νξίζκαηα ηχπνπ ζεκαίαο, φηαλ αθνινπζνχλ κηα παχια, ηφηε είλαη
44
ζπληνκεχζεηο θαη ε εληνιή εξκελεχεη ηνλ θάζε ραξαθηήξα μερσξηζηά. Όηαλ ππάξρνπλ δπν παχιεο, ηφηε
εξκελεχνληαη σο κηα ιέμε.
Καηά ηελ πιεθηξνιφγεζε εληνιψλ, είλαη πνιχ πηζαλφ λα θάλνπκε θάπνηα ζθάικαηα. Σν ζπρλφηεξν ζθάικα
είλαη ε απνπζία ηνπ θελνχ δηαζηήκαηνο (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 δίλνπκε
σο φξηζκα ην φλνκα ηνπ αξρείνπ πξνο εκθάληζε, ε παξαθάησ εληνιή ζα πεξηκέλακε λα εθηειεζηεί ζσζηά:
Όκσο βιέπνπκε φηη ε εληνιή cat εκθαλίδεη ην κήλπκα ζθάικαηνο: «δελ επηηξέπεηαη ε ξχζκηζε 'f'».
Απηφ πξνθχπηεη απφ ην γεγνλφο, φηη ην φξηζκα μεθηλά κε ηνλ ραξαθηήξα "-". Έηζη, ε εληνιή cat δελ κπνξεί
λα θαηαιάβεη φηη πξφθεηηαη γηα φλνκα αξρείνπ, αιιά ζεσξεί φηη πξφθεηηαη γηα φξηζκα ηχπνπ ζεκαίαο. Δπεηδή
45
ην φξηζκα μεθηλάεη κε κηα παχια, ρσξίδεη ηελ ππφινηπε ζπκβνινζεηξά ζε ραξαθηήξεο "f", "i", "l",
"e", "1", ".", "t", "x", "t". Σνλ θαζέλαλ απφ ηνπο ραξαθηήξεο απηνχο πξνζπαζεί λα ηνλ
εξκελεχζεη σο νδεγία-ξχζκηζε. Δπεηδή φκσο δελ ππάξρεη ξχζκηζε πνπ λα αληηζηνηρεί ζην ραξαθηήξα "f",
εκθαλίδεηαη ην αλάινγν ζθάικα.
Αληίζηνηρε πεξίπησζε ζα είρακε αλ ην φλνκα ηνπ αξρείνπ πνπ ζέινπκε λα εκθαλίζνπκε άξρηδε κε
δπν παχιεο, γηα παξάδεηγκα "--file2.txt".
ε απηήλ ηελ πεξίπησζε, ε εληνιή cat δηαπηζηψλεη φηη ην φξηζκα πνπ δέρζεθε αξρίδεη κε δπν
παχιεο, άξα ζεσξεί φηη πξφθεηηαη γηα ξχζκηζε πνπ εθθξάδεηαη κε κηα ιέμε. Έηζη, εκθαλίδεηαη θαη πάιη ην
αληίζηνηρν κήλπκα ζθάικαηνο.
Πψο ζα κπνξνχζακε λα ρεηξηζηνχκε ζσζηά ηηο παξαπάλσ πεξηπηψζεηο; Ζ απάληεζε είλαη:
δηαηππψλνληαο ην φλνκα ηνπ αξρείνπ κε ηέηνηνλ ηξφπν ψζηε λα κελ αξρίδεη κε "-". Έηζη, κπνξνχκε λα
ρξεζηκνπνηήζνπκε ηε Γηαδξνκή (Path) πξνο ην αξρείν φπσο παξαθάησ. Γηα ηηο δηαδξνκέο φκσο ζα κηιήζνπκε
ζην επφκελν θεθάιαην.
Όπσο έρεη γίλεη αληηιεπηφ, νη εληνιέο ρσξίδνληαη κεηαμχ ηνπο κε ηελ αιιαγή γξακκήο. Όηαλ παηάκε ην
πιήθηξν "Enter", ην θέιπθνο εξκελεχεη νηηδήπνηε έρεη πιεθηξνινγεζεί ζηε γξακκή θαη ην εθηειεί.
Μπνξνχκε, φκσο, ζε κηα γξακκή λα πιεθηξνινγήζνπκε πνιιέο εληνιέο. Οη εληνιέο κεηαμχ ηνπο κπνξνχλ λα
δηαρσξίδνληαη κε ηνλ ραξαθηήξα ";", φπσο ζπκβαίλεη ζηηο πεξηζζφηεξεο γιψζζεο πξνγξακκαηηζκνχ.
ην ρήκα 2.10 βιέπνπκε έλα παξάδεηγκα, φπνπ ζε κηα γξακκή έρνπλ δηαηππσζεί δπν εληνιέο.
Γηαρσξηζηήο είλαη ην ειιεληθφ εξσηεκαηηθφ (;). Πξηλ θαη κεηά ην εξσηεκαηηθφ κπνξνχλ λα ππάξρνπλ θελά
δηαζηήκαηα ή φρη. Σν θελφ δηάζηεκα δελ παίδεη ξφιν ζε απηήλ ηελ πεξίπησζε, δηφηη έηζη θη αιιηψο ην
θέιπθνο εξκελεχεη ην εξσηεκαηηθφ κε κεγαιχηεξε πξνηεξαηφηεηα απφ ηνπο ππφινηπνπο εηδηθνχο ραξαθηήξεο
φπσο ην θελφ δηάζηεκα. Σν θέιπθνο, αθνχ θάλεη ηελ ζπληαθηηθή αλάιπζε ηεο γξακκήο εληνιήο, αλαγλσξίδεη
φηη πξφθεηηαη γηα δπν εληνιέο. Πξψηα ζα εθηειέζεη ηελ πξψηε, θαη αθνχ νινθιεξσζεί ε εθηέιεζή ηεο, ζα
εθηειέζεη ηε δεχηεξε. ην ηεξκαηηθφ ζα εκθαληζηεί πξψηα ε έμνδνο ηεο πξψηεο εληνιήο, θαη κεηά, ρσξίο λα
ππάξρεη θάπνην δηαρσξηζηηθφ, ζα εκθαληζηεί ε έμνδνο ηεο δεχηεξεο εληνιήο. Δπνκέλσο, κε ηνλ ίδην ηξφπν, ζε
κηα γξακκή κπνξνχλ λα ζπλδπαζηνχλ πεξηζζφηεξεο απφ δπν εληνιέο.
46
2.3.6 Αθύξσζε εληνιήο
Καηά ηε δηάξθεηα πιεθηξνιφγεζεο κηαο καθξνζθεινχο εληνιήο, θαη εθφζνλ επηζπκνχκε ηελ αθχξσζε ηεο
πιεθηξνιφγεζεο κπνξνχκε λα παηήζνπκε ηνλ ζπλδπαζκφ πιήθηξσλ Control-C. Σν πιήθηξν Control, ζην
UNIX ζπλήζσο ζπκβνιίδεηαη κε ηνλ ραξαθηήξα "^". Έηζη, ην Control-C ζπκβνιίδεηαη σο "^C". Ζ επηινγή
ηνπ πιήθηξνπ "C" γηα ηελ αθχξσζε πξνθχπηεη απφ ηε ιέμε "Cancel". Μεηά απφ ην πάηεκα απηνχ ηνπ
ζπλδπαζκνχ, ην θέιπθνο εκθαλίδεη ζηελ επφκελε γξακκή ηελ πξνηξνπή (prompt) θαη είλαη έηνηκν λα δερζεί
ηελ επφκελε εληνιή (ρήκα 2.11). Απηφο ν ζπλδπαζκφο πιήθηξσλ ρξεζηκνπνηείηαη αληί λα δηαγξάςνπκε φιε
ηε γξακκή πνπ έρνπκε πιεθηξνινγήζεη ρξεζηκνπνηψληαο ην πιήθηξν "Backspace".
ηόρνο
Δμνηθείσζε κε ηα ζπζηήκαηα Unix/Linux ηνπ ηκήκαηνο. Δμνηθείσζε κε ηελ γξακκή εληνιψλ.
Άζθεζε 1
1. Υξεζηκνπνηείζηε έλα ζχζηεκα κε Linux. Δάλ είζηε ρξήζηεο ησλ εξγαζηεξίσλ ηνπ ηκήκαηνο Μεραληθψλ
Πιεξνθνξηθήο ηνπ ΑΣΔΗ Θεζ/λίθεο, επηιέμηε θαηά ηελ εθθίλεζε ηνπ ππνινγηζηή (boot) ηελ επηινγή
"Debian Linux".
2. Δκθαλίδεηαη ε αξρηθή νζφλε εηζφδνπ φπνπ δεηείηαη ην φλνκα ρξήζηε θαη ν θσδηθφο εηζφδνπ
(username/password). Δλεκεξσζείηε απφ ηνλ θαζεγεηή ζαο πνηα πξέπεη λα ρξεζηκνπνηήζεηε.
Login νλνκάδεηαη ε δηαδηθαζία εηζόδνπ ζην ζύζηεκα (ηαπηνπνίεζε ρξήζηε) θαη logout νλνκάδεηαη
ε δηαδηθαζία εμόδνπ (απνζύλδεζεο)
3. Δληνπίζηε ηελ εθαξκνγή "Terminal" ή "Konsole" θαη θάληε θιηθ. Δθηειείηαη κηα εθαξκνγή ε νπνία
πξνζνκνηψλεη έλα ηεξκαηηθφ. Μέζα ζην ηεξκαηηθφ εθηειείηαη έλα θέιπθνο (shell). Σν θέιπθνο είλαη
ππεχζπλν λα αλαγλσξίζεη ηηο εληνιέο καο θαη λα ηηο πξνσζήζεη ζηνλ ππξήλα γηα εθηέιεζε.
47
whoami
date
cal
cal 2016
echo "Hello world"
whoami; date
5. Ο ηξφπνο πνπ εξκελεχνληαη νη εληνιέο εμαξηάηαη απφ ην θέιπθνο πνπ ρξεζηκνπνηνχκε θαη φρη απφ ην
πξφγξακκα πξνζνκνίσζεο ηεξκαηηθνχ. Πιένλ επξέσο δηαδεδνκέλν θέιπθνο, πνπ ρξεζηκνπνηείηαη ζπρλά,
είλαη ην "bash". ην παξφλ ζα ρξεζηκνπνηήζνπκε ην bash θαη ηνλ πξφγνλφ ηνπ ην sh.
6. Παηήζηε Ctrl-Alt-F1. Δκθαλίδεηαη κπξνζηά ζαο έλα άιιν ηεξκαηηθφ (θνλζφια). Tελ ίδηα εηθφλα ζα
βιέπαηε ζε θάπνην ζχζηεκα ζην νπνίν δελ ππάξρεη εγθαηεζηεκέλν παξαζπξηθφ πεξηβάιινλ. αο δεηείηαη
πάιη φλνκα ρξήζηε θαη θσδηθφο.
Όηαλ πιεθηξνινγνύκε θσδηθό πξόζβαζεο ζε θάπνην πξόγξακκα (π.ρ. ζε κηα ηζηνζειίδα κέζσ ελόο
browser), δελ εκθαλίδνληαη νη ραξαθηήξεο πνπ πιεθηξνινγνύκε θαη αληί απηώλ ζπλήζσο
εκθαλίδνληαη αζηεξάθηα (*). Όηαλ πιεθηξνινγνύκε θσδηθό πξόζβαζεο ζε θάπνην ηεξκαηηθό ή
θνλζόια, δελ εκθαλίδεηαη απνιύησο θαλέλαο ραξαθηήξαο (νύηε αζηεξάθηα), όκσο ην ζύζηεκα
αλαγλσξίδεη ηα πιήθηξα πνπ πιεθηξνινγνύληαη. Σν ηέινο εηζαγσγήο ηνπ θσδηθνύ ζεκαηνδνηείηαη
κε ην πάηεκα ηνπ Enter.
7. Δθηειέζηε αθξηβψο ηηο ίδηεο εληνιέο κε ηηο παξαπάλσ. Σα απνηειέζκαηα είλαη αθξηβψο ηα ίδηα, κφλν πνπ
δελ βξηζθφκαζηε ζε παξαζπξηθφ πεξηβάιινλ.
8. Παηήζηε Ctrl-Alt-F2. Μηα λέα θνλζφια εκθαλίδεηαη, φπνπ πάιη πξέπεη λα δψζεηε φλνκα ρξήζηε θαη
θσδηθφ. Πιεθηξνινγήζηε ηα ζσζηά. Γψζηε κηα εληνιή απφ ηηο πξνεγνχκελεο θαη ζηε ζπλέρεηα ηελ
εληνιή "logout".
9. Παηήζηε Ctrl-Alt-F1. Δπηζηξέςαηε ζηελ πξνεγνχκελε θνλζφια. Πιεθηξνινγήζηε ηελ εληνιή "exit".
10. Γνθηκάζηε ηνπο ζπλδπαζκνχο Ctrl-Alt-F1, Ctrl-Alt-F2, ... Ctrl-Alt-F6. Τπάξρνπλ πξν-ξπζκηζκέλεο 6
θνλζφιεο. Παηήζηε Ctrl-Alt-F7 γηα λα επηζηξέςεηε ζην παξαζπξηθφ πεξηβάιινλ.
11. Δληνπίζηε ηελ εθαξκνγή "Terminal" ή "Konsole" θαη εθηειέζηε ηε δπν θνξέο. Άλνημαλ αθφκε δπν
ηεξκαηηθά. Μπνξείηε λα εξγάδεζηε κε πνιιά ηεξκαηηθά ζπγρξφλσο. Καζέλα ηεξκαηηθφ είλαη αλεμάξηεην
απφ ηα ππφινηπα.
Άζθεζε 2
Απνκαθξπζκέλε πξφζβαζε.
Όινη νη θνηηεηέο ηνπ ηκήκαηνο Μεραληθώλ Πιεξνθνξηθήο ηνπ ΑΣΔΙ Θεζζαινλίθεο έρεηε e-mail
ινγαξηαζκό ζηνλ mail-server ηνπ ηκήκαηνο. Η δηεύζπλζε ηνπ email ζαο είλαη ηεο κνξθήο:
antonis@it.teithe.gr
48
όπνπ ην "antonis" είλαη ην όλνκα ρξήζηε (username). Δπίζεο, όινη έρεηε αληίζηνηρν ινγαξηαζκό
(account) ζηνλ θεληξηθό Linux-server ηνπ ηκήκαηνο, o νπνίνο έρεη ηε δηεύζπλζε (hostname)
aetos.it.teithe.gr Σν όλνκα ρξήζηε πνπ αληηζηνηρεί ζηνλ ινγαξηαζκό ζαο ζηνλ aetos είλαη ίδην κε ην
όλνκα ρξήζηε ηνπ mail-server (πρ. antonis), όπσο θαη ν θσδηθόο πξόζβαζεο.
1. ε έλα απφ ηα ηεξκαηηθά πνπ έρεηε αλνίμεη, πιεθηξνινγήζηε ηελ εληνιή (φπνπ "antonis" βάιηε ην δηθφ
ζαο φλνκα ρξήζηε):
ssh antonis@aetos.it.teithe.gr
Δάλ είλαη ε πξψηε αζθαιήο ζχλδεζε ζηνλ ζπγθεθξηκέλν ππνινγηζηή, ζα ζαο δεηεζεί λα επηβεβαηψζεηε
ηελ ηαπηφηεηα ηνπ ππνινγηζηή πιεθηξνινγψληαο "yes". ζα ζαο δεηεζεί θσδηθφο πξφζβαζεο.
Πιεθηξνινγήζηε ηνλ θσδηθφ ζαο θαη παηήζηε "Enter". Δθφζνλ έρεηε πιεθηξνινγήζεη ζσζηά ηνλ θσδηθφ
ζαο, ην ζχζηεκα ζαο θαισζνξίδεη φπσο ζην ρήκα 2.12.
2. Ζ πξνηξνπή πνπ εκθαλίδεη ην θέιπθνο, ζπλήζσο είλαη ηεο κνξθήο: username@hostname:pwd$ δνθηκάζηε
λα εθηειέζεηε ηηο ίδηεο εληνιέο πνπ εθηειέζαηε θαη ηνπηθά λσξίηεξα. Δίλαη ηα απνηειέζκαηα ησλ εληνιψλ
αθξηβψο ίδηα κε πξηλ;
3. Γψζηε ηελ εληνιή [1]: finger antonis (φπνπ antonis ην δηθφ ζαο φλνκα ρξήζηε)
5. Δπηιέμηε έλα απφ ηα νλφκαηα ρξεζηψλ πνπ ζαο εκθάληζε ε who (πρ. ην asidirop). Πνηνο ρξήζηεο είλαη
απηφο; Γψζηε ηελ εληνιή: finger asidirop (φπνπ asidirop ην φλνκα ρξήζηε πνπ επηιέμαηε) γηα λα δείηε
πιεξνθνξίεο γηα ηνλ ρξήζηε.
49
Άζθεζε 3
χληαμε εληνιψλ.
Σα νξίζκαηα από ην όλνκα εληνιήο ρσξίδνληαη κε ηνπιάρηζηνλ έλα θελό δηάζηεκα (space). Σα
νξίζκαηα κεηαμύ ηνπο ρσξίδνληαη επίζεο κε ηνπιάρηζηνλ έλα θελό δηάζηεκα. Πρ:
ls -l -a /tmp
εθηεινύκε ηελ εληνιή κε όλνκα "ls", θαη ηεο δίλνπκε ηξία νξίζκαηα:
1ν όξηζκα: -l
2ν όξηζκα: -a
3ν όξηζκα: /tmp. Σν /tmp είλαη όξηζκα πνπ εθθξάδεη όλνκα θαηαιόγνπ (ή ζα κπνξνύζε θαη
αξρείνπ)
πλήζσο νη εληνιέο δηαρσξίδνπλ ηα νξίζκαηα πνπ εθθξάδνπλ όλνκα αξρείνπ από ηα νξίζκαηα πνπ
εθθξάδνπλ ζεκαία (flag ή option) από ηελ παύια (-) πνπ βάδνπκε κπξνζηά ζηα νξίζκαηα ηύπνπ
ζεκαίαο. Σα νξίζκαηα πνπ κπνξνύκε λα δώζνπκε ζε θάζε εληνιή εμαξηώληαη απνθιεηζηηθά από
ηελ ίδηα ηελ εληνιή.
1. ls
2. ls -a
3. ls -l
4. ls -l -a
5. ls -la
6. ls --all
7. ls -a
Η εληνιή ls εκθαλίδεη ηα πεξηερόκελα (αξρεία θαη ππνθαηαιόγνπο) ηνπ θαηαιόγνπ (θαθέινπ) ηνλ
νπνίν έρνπκε σο ηξέρνληα θάθειν εξγαζίαο (ζην επόκελν θεθάιαην ζα δνύκε πεξηζζόηεξεο
ιεπηνκέξεηεο γη’ απηό).
50
Με ηα νξίζκαηα ζε κηα εληνιή δίλνπκε νδεγίεο ζηελ εληνιή πώο λα ζπκπεξηθεξζεί. Γηα ηελ ls ην
-a ζεκαίλεη όια ηα αξρεία (θαη ηα θξπθά). Σν -l ζεκαίλεη λα εκθαλίζεη επηπιένλ πιεξνθνξίεο γηα
ηα αξρεία (long listing).
Γηα λα δνύκε ηα δπλαηά νξίζκαηα πνπ κπνξεί λα δερηεί κηα εληνιή, πξέπεη λα δηαβάζνπκε ην
εγρεηξίδην ρξήζεο ή αιιηώο "manual page".
Οη πεξηζζόηεξεο εληνιέο, όηαλ νη ζεκαίεο εθθξάδνληαη κε έλα γξάκκα (πρ: -a ή -l) επηηξέπνπλ
ηελ ζύκπηπμε ηνπο: -a -l ⇔ -al. Απηό είλαη ζέκα δπλαηνηήησλ ηεο θάζε εληνιήο θαη όρη ηνπ
θειύθνπο ή ηνπ UNIX.
Η εληνιή man εκθαλίδεη ην εγρεηξίδην ρξήζεο (manual page) ηεο εληνιήο ηεο νπνίαο ην όλνκα
δώζακε σο όξηζκα. Μέζα ζην "man" κπνξνύκε λα κεηαθηλεζνύκε πάλσ-θάησ κε ηνπο θέξζνξεο ή
ην πιήθηξν θελνύ δηαζηήκαηνο (space), ή ην "Enter". Γηα έμνδν από ην πεξηβάιινλ ηνπ εγρεηξηδίνπ
παηάκε ην πιήθηξν "q".
ls-l
Ση παξαηεξείηε; Γηαηί;
2.5 Αλαθνξέο
[1] BSD General Commands Manual: finger command.
[2] GNU coreutils Reference Manual: cat command.
[3] GNU coreutils Reference Manual: date command.
[4] GNU coreutils Reference Manual: echo command.
[5] GNU coreutils Reference Manual: ls command.
[6] GNU coreutils Reference Manual: who command.
[7] GNU coreutils Reference Manual: whoami command.
[8] Colin Watson, GNU Manual Pager Utils Reference Manual: man command.
[9] Tatu Ylonen, Markus Friedl, BSD General Commands Manual: ssh command.
[10] WikiPedia. List of terminal emulators, February 2015.
[ http://en.wikipedia.org/wiki/List_of_terminal_emulators ]
[11] Wolfgang Helbig, BSD General Commands Manual: cal command.
51
Κεθάιαην 3
My
Computer
X: (Network
C: D: E: (CD-ROM)
drive)
Program
Temp Windows Users Data Backups
Files
ρήκα 3.1: Ιεξαξρία ηνπ πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνύ πζηήκαηνο Windows.
Ο όξνο ύζηεκα Αξρείσλ (File System) ζεκαίλεη ην ζύλνιν ησλ αξρείσλ-θαηαιόγσλ θαη
απνζεθεπηηθώλ κέζσλ πνπ δηαρεηξίδεηαη έλαο ππνινγηζηήο. Χο όξνο Σύπνο πζηήκαηνο Αξρείσλ
(File System Type) ελλνείηαη ε δνκή θαη ν αιγόξηζκνο γηα ηελ αληηζηνίρεζε ησλ αξρείσλ ζε
θπζηθά ηκήκαηα ηνπ δίζθνπ. Γλσζηνί Σύπνη πζηεκάησλ Αξρείσλ είλαη νη:
FAT: File Allocation Table. Τπάξρνπλ δηάθνξεο εθδόζεηο απηνύ ηνπ ηύπνπ, όπσο FAT16,
FAT32, exFAT, vFAT θ.ά.
NTFS: New Technology File System. Δίλαη ν βαζηθόο ηύπνο ζπζηήκαηνο αξρείσλ πνπ
ρξεζηκνπνηείηαη ζηα ιεηηνπξγηθά ηεο Microsoft.
Ext: Extended Filesystem. Δίλαη ν βαζηθόο ηύπνο ζπζηήκαηνο αξρείσλ πνπ ρξεζηκνπνηείηαη
από ηηο πεξηζζόηεξεο δηαλνκέο Linux. Έρνπλ αλαπηπρζεί δηάθνξεο εθδόζεηο: ext2, ext3, ext4.
Πξνθαλώο ζε θάζε έθδνζε πξνζηίζεληαη δπλαηόηεηεο.
Τπάξρνπλ δεθάδεο αθόκε ζπζηήκαηα αξρείσλ, ηα νπνία κπνξείηε λα ηα βξείηε ζην [10]
53
Πνιιέο θνξέο γηα ιόγνπο ζπληνκίαο, αληί ηνπ όξνπ «Σύπνο πζηήκαηνο Αξρείσλ», ρξεζηκνπνηείηαη
ν όξνο «ύζηεκα Αξρείσλ». Η δεκηνπξγία ηνπ πζηήκαηνο Αξρείσλ γίλεηαη κε ηε δηαδηθαζία ηεο
«δηακόξθσζεο» (format). Δπίζεο, θάζε ζπζθεπή απνζήθεπζεο κπνξεί λα έρεη δηαθνξεηηθό Σύπν
πζηήκαηνο Αξρείσλ. Ο ηύπνο FAT είλαη ν πην απιόο θαη αλαγλσξίδεηαη από όια ηα Λεηηνπξγηθά
(ζπκπεξηιακβαλνκέλσλ ζπζθεπώλ ηειενξάζεσλ, Media Players, ηειέθσλα, εθηππσηέο θηι.). Γη'
απηό θαη πξνηηκάηαη γηα ζπζθεπέο απνζήθεπζεο ηύπνπ USB Stick ή SD Cards. Ο ηύπνο NTFS
αλαγλσξίδεηαη από ηα πεξηζζόηεξα Λεηηνπξγηθά πζηήκαηα (θαη ζπζθεπέο), θαη πιένλ
ρξεζηκνπνηείηαη όιν θαη πεξηζζόηεξν αθόκε θαη γηα θνξεηέο ζπζθεπέο (USB Sticks). Ο ηύπνο ext
αλαγλσξίδεηαη κόλν από Λεηηνπξγηθά πζηήκαηα ηεο νηθνγέλεηαο UNIX.
Τπάξρεη ε έλλνηα ηνπ «Τπνινγηζηή κνπ» (“My Computer”). Απηφ απνηειεί ηνλ αξρηθφ θφκβν ζηελ
ηεξαξρία ησλ αξρείσλ. Κάησ αθξηβψο απφ ηνλ «Τπνινγηζηή κνπ» ππάξρνπλ θφκβνη ησλ νπνίσλ ηα νλφκαηα
απνηεινχληαη απφ έλα ιαηηληθφ γξάκκα θαη ην ζχκβνιν “:”. Παξάδεηγκα C:, D:θηι. Καζέλαο απφ απηνχο
ηνπο θφκβνπο αληηζηνηρεί ζε κηα ζπζθεπή απνζήθεπζεο: CD-ROM, USB Stick, ηφκν ζθιεξνχ δίζθνπ (disk
partition). ρεδφλ πάληα ν πξσηεχσλ ζθιεξφο δίζθνο (θαη ν πξσηεχσλ ηφκνο ηνπ) αληηζηνηρίδνληαη ζην
γξάκκα C:. Ο δεχηεξνο ηφκνο ή ην CD-Rom ζην D:θ.ν.θ.
Έλα εξψηεκα πνπ κπνξεί λα δεκηνπξγεζεί ζηνλ αλαγλψζηε είλαη γηαηί ε αξίζκεζε μεθηλά απφ ην
γξάκκα “C:” θαη φρη απφ ην “A:”. Ζ απάληεζε βαζίδεηαη ζηελ ηζηνξία ησλ πξνζσπηθψλ ππνινγηζηψλ (PCs)
θαη ησλ Λεηηνπξγηθψλ ζπζηεκάησλ πνπ αλαπηχρζεθαλ απφ ηελ Microsoft (MS-DOS, MS-Windows). Αξρηθά
νη πξνζσπηθνί ππνινγηζηέο, ζπκβαηνί κε ηελ αξρηηεθηνληθή IBM, δελ είραλ ζθιεξφ δίζθν, αιιά κφλν
ζπζθεπή δηζθέηαο. Ζ αξρηηεθηνληθή ππνζηήξηδε κέρξη δπν ζπζθεπέο δηζθέηαο. Ζ πξψηε δηζθέηα
ζπκβνιηδφηαλ κε ην “Α:” θαη ε δεχηεξε κε ην “Β:”. Αξγφηεξα (ηέιε ηεο δεθαεηίαο ηνπ 1980) αλαπηχρζεθαλ
νη ζθιεξνί δίζθνη. Κάζε πξνζσπηθφο ππνινγηζηήο κπνξνχζε λα έρεη κέρξη ηέζζεξηο ζθιεξνχο δίζθνπο θαη
δπν δηζθέηεο. Δπεηδή φια ηα πξνγξάκκαηα ζεσξνχζαλ κέρξη ηφηε φηη νη ζπζθεπέο Α: θαη “Β:” είλαη δηζθέηεο,
ρξεζηκνπνηήζεθαλ ηα επφκελα γξάκκαηα γηα λα ζπκβνιίζνπλ ηνπο ζθιεξνχο δίζθνπο (C:, D:, ...). Όηαλ
θπθινθφξεζαλ νη επαλεγγξάςηκνη νπηηθνί δίζθνη (CD-RW), ε ρξήζε ησλ δηζθεηψλ άξρηζε λα θζίλεη (πεξίπνπ
ην 2000). Παξφια απηά, επεηδή αθφκε θάπνηνη ρξήζηεο ρξεζηκνπνηνχζαλ πξνγξάκκαηα θηηαγκέλα ηελ
πξνεγνχκελε δεθαεηία, ε ζχκβαζε γηα ηα γξάκκαηα Α: θαη Β: δηαηεξήζεθε θαη νη ρξήζηεο ζπλήζηζαλ ηελ
ηδέα φηη ν πξψηνο ζθιεξφο δίζθνο είλαη ην C:. Ζ Microsoft δηαηήξεζε απηφλ ηνλ ζπκβνιηζκφ πξνθεηκέλνπ λα
κελ αιιάμεη ηε ζπλήζεηα ησλ ρξεζηψλ θαη απηή ε ζχκβαζε ζπλερίδεηαη κέρξη θαη ζήκεξα παξφηη νη
πξνζσπηθνί ππνινγηζηέο δελ δηαζέηνπλ πιένλ ζπζθεπή δηζθέηαο, αιιά νχηε ρξεζηκνπνηνχληαη πξνγξάκκαηα
ηεο πξνεγνχκελεο ηξηαθνληαεηίαο - είλαη «πξσηφγνλα» ζπγθξηλφκελα κε ηηο ζεκεξηλέο δπλαηφηεηεο. Ο
ζπκβνιηζκφο ηνπ C: φκσο έρεη παξακείλεη, ίζσο γηα λα ζπκίδεη ζηνπο παιαηφηεξνπο ιίγν απφ ηζηνξία.
ε ζχγθξηζε κε ην ζχζηεκα αξρείσλ ησλ MS-Windows θαη ην πψο απηφ παξνπζηάδεηαη πξνο ηνπο
ρξήζηεο, ζε έλα ζχζηεκα Unix έρνπκε παξφκνηα θηινζνθία. Τπάξρνπλ, φκσο, θαη δηαθνξέο. ε έλα ζχζηεκα
αξρείσλ UNIX ππάξρεη ε έλλνηα ηνπ “/” ην νπνίν είλαη ε ξίδα ηνπ δέληξνπ. Σν “/” νλνκάδεηαη θαη “root
directory” (ξηδηθφο θαηάινγνο). ε αληηπαξαβνιή κε ηα MS-Windows αληηζηνηρεί ζην “My Computer”.
εκαληηθή, φκσο, δηαθνξά είλαη φηη ε ξίδα ηνπ δέληξνπ αληηζηνηρεί ζε έλαλ ηφκν (partition) πνπ είλαη ν
πξσηεχσλ ηφκνο πνπ έρεη νξηζηεί. Γηα θάζε επηπιένλ ζπζθεπή απνζήθεπζεο πνπ είλαη ζπλδεδεκέλε, δελ
αληηζηνηρίδνληαη γξάκκαηα ηνπ αγγιηθνχ αιθαβήηνπ. Αληίζεηα, θάζε ζπζθεπή εκθαλίδεηαη σο ηκήκα ηνπ
δέληξνπ. Ο δηαρεηξηζηήο ηνπ ζπζηήκαηνο κπνξεί λα νξίζεη ζε πνην ζεκείν ζηελ ήδε ππάξρνπζα ηεξαξρία.
Έηζη, ζην ρήκα 3.2 ζα κπνξνχζε ν θαηάινγνο SPARE λα αληηζηνηρεί ζε έλαλ δεχηεξν ηφκν ηνπ δίζθνπ.
Δπίζεο, ν θαηάινγνο MOVIE ζα κπνξνχζε λα αληηζηνηρεί ζε έλα DVD. Σέινο, ν
θαηάινγνο remote_files ζα κπνξνχζε λα αληηζηνηρεί ζε θάπνην άιιν δίζθν ή δηθηπαθφ δίζθν.
ην ρήκα 3.2 αλαπαξηζηψληαη κε ίδηα ρξψκαηα νη θαηάινγνη πνπ αλήθνπλ ζην ίδην ζχζηεκα αξρείσλ (ηφκν
ή ζπζθεπή απνζήθεπζεο). Οη πεξηζζφηεξεο δηακνλέο Linux, έρνπλ πξν-ξπζκηζκέλε ζπκπεξηθνξά λα
αληηζηνηρνχλ θάζε λέα ζπζθεπή πνπ αλαγλσξίδεηαη θάησ απφ ηνλ θάθειν /media, εθφζνλ δελ έρεη νξηζηεί
δηαθνξεηηθά.
54
/
…… ……
ρήκα 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).
aanesiad abacharo abliouka Κ.τ.λ. asidirop vassik Κ.τ.λ. dad klefturi κ.τ.λ.
File2.txt
Home directory Home directory
του asidirop του vassik
ρήκα 3.3: Σππηθή ηεξαξρία ηνπ πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνύ πζηήκαηνο Unix.
55
Ζ δεκηνπξγία θαη ρξήζε ηεο κεζφδνπ κε ηα home directories ησλ ρξεζηψλ βνεζά ζηελ θαιχηεξε
αζθάιεηα ηνπ ζπζηήκαηνο. πλήζσο, ν θάζε ρξήζηεο έρεη πιήξε δηθαηψκαηα ζηνλ πξνζσπηθφ θάθειν αιιά
θαλέλα δηθαίσκα έμσ απφ απηφλ. Γειαδή έλαο ρξήζηεο κπνξεί ζηνλ πξνζσπηθφ ηνπ θάθειν λα δεκηνπξγεί
αξρεία, θαηαιφγνπο θαη λα ηα δηαγξάθεη. Έμσ απφ ηνλ πξνζσπηθφ ηνπ θάθειν δελ έρεη ην δηθαίσκα λα
δεκηνπξγήζεη αξρεία ή θαηαιφγνπο θαη ζπλήζσο δελ έρεη ην δηθαίσκα λα 'δεη' ή λα ρξεζηκνπνηήζεη ηα αξρεία
ησλ ππνινίπσλ ρξεζηψλ. Πεξηζζφηεξα γηα ηα δηθαηψκαηα ζην ζχζηεκα αξρείσλ ζα δνχκε ζην Κεθάιαην 5.
Αλάινγα κε ηνλ Σχπν πζηήκαηνο Αξρείσλ πνπ ρξεζηκνπνηείηαη κπνξεί λα ππάξρνπλ θαη άιινη
πεξηνξηζκνί. ηνλ ηχπν ζπζηήκαηνο αξρείσλ πνπ ρξεζηκνπνηείηαη απφ ηα Windows (NTFS file system)
ηζρχνπλ νη εμήο πεξηνξηζκνί:
1. Σν φλνκα ελφο αξρείνπ κπνξεί λα είλαη νπνηαδήπνηε ζεηξά απφ ραξαθηήξεο. Γελ επηηξέπεηαη κέζα ζε
φλνκα αξρείνπ (ή θαηαιφγνπ) λα ππάξρνπλ νη ραξαθηήξεο: \, /, :, *, ?, ", <, >, |.
2. Οη θεθαιαίνη κε ηνπο πεδνχο ραξαθηήξεο είλαη ηζνδχλακνη.
Οη πξνεγνύκελνη πεξηνξηζκνί ηζρύνπλ γηα ηνλ θάζε ηύπν ζπζηήκαηνο αξρείσλ. Αλ ζε έλαλ
ππνινγηζηή κε Linux, έρνπκε πξόζβαζε ζηνλ ηόκν ησλ windows πνπ είλαη δηακνξθσκέλνο ζε
NTFS, ηόηε αλ θαη ε πξόζβαζε γίλεηαη κέζα από Linux, ηζρύνπλ νη πεξηνξηζκνί ηνπ ζπζηήκαηνο
NTFS.
3.3 Γηαδξνκέο
ην ππνηηζέκελν ζχζηεκα αξρείσλ ηνπ ζρήκαηνο 3.4, πψο ζα κπνξνχζακε λα αλαθεξζνχκε ζην αξρείν
Test1.txt (1) θαη ζην αξρείν Test1.txt (2); Αλ ρξεζηκνπνηνχκε κηα γξαθηθή εθαξκνγή ρεηξηζκνχ αξρείσλ (πρ.
Windows Explorer ζηα Windows, nautilus θαη dolphin ζην Linux), είλαη εχθνιν, δηφηη εληνπίδνπκε ζηνλ
πεξηεγεηή ην αξρείν πνπ επηζπκνχκε θαη θάλνληαο θιηθ επηιέγνπκε ηελ ελέξγεηα πνπ ζέινπκε λα θάλνπκε.
Πψο, φκσο, κπνξνχκε λα αλαθεξζνχκε ζηα δπν παξαπάλσ αξρεία κέζα απφ ηε γξακκή εληνιψλ;
56
Σν ίδην πξόβιεκα ππάξρεη θαη ζην Λεηηνπξγηθό ησλ Windows, όηαλ πξέπεη λα εξγαζηνύκε κέζα από
ηε γξακκή εληνιώλ. Σα παξαθάησ πνπ ζα αλαθεξζνύλ, ηζρύνπλ κε ηνλ ίδην ηξόπν θαη γηα ηα
Windows.
aanesiad abacharo abliouka Κ.τ.λ. asidirop vassik Κ.τ.λ. dad klefturi κ.τ.λ.
(1) File2.txt
ρήκα 3.4: Σππηθή ηεξαξρία ηνπ πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνύ πζηήκαηνο Unix.
57
Μέζα ζε κηα Γηαδξνκή ηα «κνλνπάηηα» ή νη «θόκβνη» πνπ αθνινπζνύκε δηαρσξίδνληαη κε ηνλ
ραξαθηήξα / (slash).
Αλ κηα δηαδξνκή μεθηλάεη κε ηνλ ραξαθηήξα /, ηόηε μεθηλάεη από ηε ξίδα ηνπ δέληξνπ (root
directory).
Μηα δηαδξνκή πνπ μεθηλάεη από ηελ ξίδα ηνπ δέληξνπ νλνκάδεηαη Απόιπηε Γηαδξνκή (Absolute
Path).
Δίλαη φκσο δχζθνιν, θάζε θνξά πνπ ζέινπκε λα αλαθεξζνχκε ζην αξρείν (1), λα γξάθνπκε νιφθιεξε ηε
δηαδξνκή:/home/staff/ektaktoi/asidirop/Test1.txt. Φαληαζηείηε ην αξρείν, ζην νπνίν
ζέινπκε λα αλαθεξζνχκε, λα βξίζθεηαη 20 επίπεδα καθξηά απφ ηε ξίδα. Σφηε ε Απφιπηε Γηαδξνκή ζα ήηαλ
πνιχ κεγάιε θαη αζχκθνξν λα ρξεζηκνπνηεζεί. Γηα ζπληνκία, κπνξνχκε λα ρξεζηκνπνηήζνπκε ρεηηθή
Γηαδξνκή (Relative path), γηα λα αλαθεξζνχκε ζε έλα αξρείν. Μηα ζρεηηθή δηαδξνκή μεθηλάεη απφ ηε ζέζε
ζηελ ηεξαξρία πνπ νλνκάδεηαη Σξέρσλ Καηάινγνο Δξγαζίαο (Current Working Directory) θαη ε
ζπληνκνγξαθία ηνπ είλαη cwd. Όηαλ γξάθνπκε κφλν ην φλνκα ελφο αξρείνπ (ρσξίο Γηαδξνκή απφ κπξνζηά),
ηφηε ελλνείηαη πσο ην αξρείν βξίζθεηαη ζηνλ Σξέρνληα Καηάινγν Δξγαζίαο. ην ρήκα 3.4, αλ έρνπκε
Σξέρνληα Καηάινγν Δξγαζίαο ηνλ θαηάινγν asidirop, γξάθνληαο Test1.txt ελλνείηαη ην αξρείν
λνχκεξν (1).
Κάζε δηεξγαζία (άξα θαη θάζε θέιπθνο) πνπ εθηειείηαη έρεη αλά πάζα ζηηγκή έλαλ Σξέρνληα
Καηάινγν Δξγαζίαο (cwd).
Όηαλ έλαο ρξήζηεο θάλεη είζνδν ζην ζύζηεκα (login) θαη εθηειείηαη έλα θέιπθνο, ηόηε νξίδεηαη
αξρηθά σο cwd ην home directory ηνπ ρξήζηε.
Όηαλ ν ρξήζηεο asidirop (ρήκα 3.5) θάλεη είζνδν ζην ζχζηεκα, ηφηε απηφκαηα ην θέιπθνο ην
νπνίν μεθηλά λα εθηειείηαη έρεη σο Σξέρνληα Καηάινγν Δξγαζίαο ηνλ θάθειν κε αξηζκφ (4), δειαδή
ηνλ: /home/staff/ektaktoi/asidirop. Αληίζηνηρα, φηαλ ζα θάλεη είζνδν ν ρξήζηεο abliouka, ζα
νξηζηεί αξρηθά ζην θέιπθνο πνπ ζα εθηειεζηεί ν θάθεινο /home/students/x1112/abliouka σο
ηξέρσλ θάθεινο εξγαζίαο.
58
/
(3)
aanesiad abacharo abliouka Κ.τ.λ. asidirop vassik Κ.τ.λ. dad klefturi κ.τ.λ.
(1) File2.txt
ρήκα 3.5: Σππηθή ηεξαξρία ηνπ πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνύ πζηήκαηνο Unix.
Χζηφζν, κε ρεηηθή Γηαδξνκή κπνξνχκε λα νδεγεζνχκε θαη ζε αξρεία ή θαηαιφγνπο πνπ βξίζθνληαη
θαη εθηφο ηνπ home directory καο. Ο ρξήζηεο κπνξεί λα αιιάμεη Σξέρνληα Καηάινγν Δξγαζίαο
ρξεζηκνπνηψληαο ηελ εληνιή cd. Ζ εληνιή cd δέρεηαη σο φξηζκα κηα Γηαδξνκή πξνο έλαλ θαηάινγν
(Απφιπηε ή ρεηηθή) θαη νξίδεη ηνλ λέν θαηάινγν σο ηξέρνληα. Πρ:
cd /tmp
ηελ παξαπάλσ πεξίπησζε, ην φξηζκα ζηελ εληνιή cd είλαη Απφιπηε Γηαδξνκή θαη νδεγεί ζηνλ
θαηάινγν κε ηελ ζήκαλζε (3) ηνπ ρήκαηνο 3.5. πλεπψο, αλ κεηά αθξηβψο απφ ηελ είζνδν ηνπ ζην ζχζηεκα
ν ρξήζηεο asidirop δψζεη ηελ παξαθάησ αθνινπζία εληνιψλ:
cat Test1.txt
cd /tmp
cat Test1.txt
ηφηε ε πξψηε εληνιή ζα έρεη σο απνηέιεζκα ηελ εκθάληζε ηνπ αξρείνπ (1), ελψ ε ηξίηε ζα εκθαλίζεη ην
αξρείν (2).
59
/
(3)
home bin tmp
(5)
students Test1.txt File2.txt
(2)
x1112 x1011 κ.τ.λ.
Test1.txt File2.txt
(1)
ρήκα 3.6: Σππηθή ηεξαξρία ηνπ πζηήκαηνο Αξρείσλ ηνπ Λεηηνπξγηθνύ πζηήκαηνο Unix.
Αληίζηνηρα ζην ρήκα 3.6 έζησ φηη θάλεη είζνδν ν ρξήζηεο "abliouka". Σν home directory ηνπ
ρξήζηε απηνχ είλαη ην/home/students/x1112/abliouka θαη είλαη ζεκεησκέλν κε ηνλ αξηζκφ (4). Σν
θέιπθνο πνπ ζα δεκηνπξγεζεί ακέζσο κεηά ηε δηαδηθαζία εηζφδνπ ζα έρεη σο Σξέρνληα Καηάινγν Δξγαζίαο
ηνλ (4). πλεπψο, ε πξψηε εληνιή απφ ηελ πξνεγνχκελε αθνινπζία εληνιψλ ζα εκθαλίζεη ηα πεξηερφκελα
ηνπ αξρείνπ (1), δειαδή απηνχ κε απφιπηε δηαδξνκή
ηελ: /home/students/x1112/abliouka/Test1.txt. Ζ ηξίηε εληνιή ζα έρεη σο απνηέιεζκα ηελ
εκθάληζε ηνπ αξρείνπ /tmp/Test1.txt κε ηνλ αξηζκφ (2).
Έζησ φηη απφ ηνλ ρξήζηε abliouka δίλνληαη νη παξαθάησ εληνιέο:
Ζ εληνιή 1 ζα εκθαλίζεη ην αξρείν (1). ηελ εληνιή 1 έρνπκε δψζεη ηελ Απφιπηε Γηαδξνκή ηνπ αξρείνπ.
Ζ εληνιή 2 ζα ζέζεη σο Σξέρνληα Καηάινγν Δξγαζίαο ηνλ θάθειν (5).
Ζ εληνιή 3 ζα εκθαλίζεη ην αξρείν (1). ηελ εληνιή 3 έρνπκε δψζεη ρεηηθή Γηαδξνκή. Δίλαη ε Γηαδξνκή
πνπ μεθηλά απφ ηνλ Σξέρνληα Καηάινγν Δξγαζίαο πξνο ηνλ πξννξηζκφ καο.
Απφ κηα ρεηηθή Γηαδξνκή κπνξνχκε λα βξνχκε ηελ Απφιπηε, αλ ζηε ζπκβνινζεηξά πνπ εθθξάδεη
ηνλ Σξέρνληα Καηάινγν Δξγαζίαο (δειαδή ηελ Απφιπηε Γηαδξνκή πξνο ηνλ Σξέρνληα Καηάινγν Δξγαζίαο)
ελψζνπκε ηε ζπκβνινζεηξά ηεο ρεηηθήο Γηαδξνκήο (ρήκα 3.7).
60
Απόιπηε Δηαδξνκή
/home/students / x1112/abliouka/Test1.txt
Αλ δε δψζνπκε νξίζκαηα ζηελ εληνιή cd, ηφηε απηή ζεσξεί ην home directory ηνπ ηξέρνληα ρξήζηε.
πλεπψο, νξίδεη σο Σξέρνληα Φάθειν Δξγαζίαο ην home directory. ην παξάδεηγκα παξαπάλσ (ρήκα 3.6),
αλ ν ρξήζηεο "abliouka" δψζεη ηελ εληνιή:
cd
61
/
Μέζα ζ’ έλα θάθειν είλαη έγθπξα κόλν ηα νλόκαηα αξρείσλ θαη θαθέισλ πνπ βξίζθνληαη κέζα
ζην θάθειν. ηνλ θάζε θόκβν ηνπ δέληξνπ είλαη γλσζηά κόλν ηα «παηδηά» ηνπ. Όρη, όκσο, ηα
νλόκαηα θαθέισλ πνπ είλαη «πξόγνλνί» ηνπ.
ηνλ Σύπν πζηήκαηνο Αξρείσλ ηνπ UNIX, κέζα ζε θάζε θάθειν, από ηε δεκηνπξγία ηνπ,
δεκηνπξγνύληαη απηόκαηα θαη δπν ππνθάθεινη. Απηνύο κπνξνύκε λα ηνπο ραξαθηεξίζνπκε θαη
εηθνληθνύο:
Ο ππνθάθεινο κε ην όλνκα ".", ν νπνίνο «δείρλεη» πξνο ηνλ ίδην ηνλ θάθειν.
Έηζη, κέζα ζηνλ θάθειν abliouka (2), ππάξρεη ν ππνθάθεινο κε ην φλνκα ".." (ρήκα 3.9). Δάλ
αθνινπζήζνπκε ην κνλνπάηη "..", νδεγνχκαζηε ζηνλ θάθειν (4). πλεπψο, ε ρεηηθή Γηαδξνκή απφ ηνλ
θάθειν (2) πξνο ην αξρείν (1) είλαη ε:
62
../abacharo/file1
(1) (3)
ην ρήκα 3.10, παξνπζηάδεηαη έλα κηθξφηεξν ηκήκα ηνπ ζπζηήκαηνο αξρείσλ, αιιά
αλαπαξηζηψληαη φινη νη θάθεινη "." θαη "..". Δδψ βιέπνπκε φηη ν θάθεινο /home/students πεξηέρεη
ηνλ ππνθάθειν "..", ν νπνίνο «δείρλεη» ζηνλ /home. Δπίζεο, ν θάθεινο /home/students πεξηέρεη ηνλ
ππνθάθειν ".", ν νπνίνο δείρλεη ζηνλ ίδην ηνλ θάθειν /home/students. Όινη νη θάθεινη πεξηέρνπλ
απηνχο ηνπο δπν ππνθαθέινπο, αθφκε θαη ν "/" (ην root directory - ξηδηθφο θάθεινο). Βέβαηα, ζηελ
πεξίπησζε ηνπ ξηδηθνχ θαθέινπ, είλαη πξνθαλέο φηη έηζη θη αιιηψο ν ππνθάθεινο "." δείρλεη ζηνλ ίδην ηνλ
ξηδηθφ θάθειν. Ο ππνθάθεινο ".." φκσο πνπ δείρλεη; Πξνθαλψο δελ κπνξεί λα δείρλεη θάπνπ πην πάλσ απφ
ηνλ ξηδηθφ θάθειν γηαηί εθεί είλαη ε αξρή ηνπ ζπζηήκαηνο αξρείσλ θαη δελ ππάξρεη θάηη πην επάλσ. ε απηήλ
ηελ πεξίπησζε, ινηπφλ, ν ".." δεκηνπξγείηαη κε ηέηνηνλ ηξφπν, ψζηε λα δείρλεη ζηνλ ίδην ηνλ ξηδηθφ θάθειν.
/
. .. x1112 x1011
. .. . ..
63
Οη θαηάινγνη "." θαη ".." κπνξνχλ λα ρξεζηκνπνηεζνχλ κέζα ζε κηα δηαδξνκή φπσο θάζε άιινο
θάθεινο. Έζησ ην ζχζηεκα αξρείσλ ηνπ ρήκαηνο 3.10 θαη έζησ φηη Σξέρσλ Φάθεινο Δξγαζίαο είλαη
ν /home/students/x1112. ηνλ Πίλαθα 3.1 θαίλνληαη θάπνηεο ρεηηθέο Γηαδξνκέο θαη νη ηζνδχλακεο
Απφιπηεο, δεδνκέλνπ ηνπ Σξέρνληνο Φαθέινπ Δξγαζίαο.
Πνιιέο θνξέο ρξεζηκνπνηείηαη ην "." γηα λα δειψζεη ηνλ ηξέρνληα θάθειν, ρσξίο λα είλαη
ππνρξεσηηθή ε ρξήζε ηνπ. Έηζη, κπνξνχλ λα δεκηνπξγεζνχλ πνιιέο ηζνδχλακεο παξαιιαγέο ηεο ίδηαο
δηαδξνκήο:
Μεξηθέο θνξέο βέβαηα κπνξεί λα είλαη ππνρξεσηηθή ε ρξήζε ηνπ "." (ζα ην κειεηήζνπκε
ζην Κεθάιαην 8).
64
1
/
2 3 4
home bin tmp
5 6 7
students Test1.txt File2.txt
8 9
x1112 x1011
ην ρήκα 3.11 θαίλεηαη ε ίδηα ηεξαξρία κε ην πξνεγνχκελν ζρήκα, ρσξίο ηελ πνιππινθφηεηα πνπ
πξνζζέηεη ε αλαπαξάζηαζε ησλ θαθέισλ"." θαη "..". ηνλ Πίλαθα 3.3 παξνπζηάδνπκε κεξηθέο Απφιπηεο θαη
ρεηηθέο Γηαδξνκέο, ζπκπεξηιακβαλνκέλσλ θαη ζπρλψλ ιαζψλ:
Σξέρσλ Καηάινγνο
A/A Γηαδξνκή ρόιηα
Δξγαζίαο
Δίλαη ε Γηαδξνκή πξνο ηνλ
1 /home/students/x1112 νπνηνζδήπνηε θάθειν (8) αλεμάξηεηα απφ
ηνλ Σξέρνληα (cwd)
Δίλαη ε Γηαδξνκή πξνο ηνλ
2 /home/students νπνηνζδήπνηε θάθειν (5) αλεμάξηεηα απφ
ηνλ Σξέρνληα (cwd)
Δίλαη ε Γηαδξνκή πξνο ηνλ
θάθειν (5) αλεμάξηεηα απφ
3 /home/students/ νπνηνζδήπνηε
ηνλ Σξέρνληα (cwd) κε
θαηάιεμε "/".
Δίλαη ε Γηαδξνκή πξνο ηνλ
θάθειν (9) αλεμάξηεηα απφ
ηνλ Σξέρνληα (cwd). Γελ είλαη
4 /home/students/x1112/../x1011 νπνηνζδήπνηε
ε βέιηηζηε δηαδξνκή δηφηη
πεξηέρεη "παξάθακςε", είλαη
φκσο ζσζηή.
Δίλαη ε Γηαδξνκή πξνο ηνλ
θάθειν (2) αλεμάξηεηα απφ
ηνλ Σξέρνληα (cwd). Γελ είλαη
5 /tmp/../home νπνηνζδήπνηε
ε βέιηηζηε Γηαδξνκή, δηφηη
πεξηέρεη "παξάθακςε", είλαη
φκσο ζσζηή.
65
ΛΑΘΟ. Αλ ην
ζηνηρείν Test1.txt δελ ήηαλ
αξρείν αιιά θάθεινο, ε
δηαδξνκή ζα ήηαλ ζσζηή. Δίλαη
6 /tmp/Test1.txt/../../home νπνηνζδήπνηε
φκσο αξρείν, θαη έλα αξρείν
δελ κπνξεί λα είλαη ηκήκα κηαο
δηαδξνκήο. Μπνξεί λα είλαη
κφλν πξννξηζκφο.
Δίλαη ε Γηαδξνκή πξνο ηνλ
θάθειν (9) ζρεηηθή κε ηνλ
Σξέρνληα (cwd). Γελ είλαη ε
7 x1112/../x1011 /home/students
βέιηηζηε δηαδξνκή, δηφηη
πεξηέρεη «παξάθακςε», είλαη
φκσο ζσζηή.
ΛΑΘΟ. Ξεθηλψληαο απφ ην
θάθειν (5), δελ ππάξρεη κέζα
8 students/x1011 /home/students ζε απηφλ θάθεινο κε ην
φλνκαstudents. Άξα, ε
Γηαδξνκή είλαη ιάζνο.
Δίλαη ε Γηαδξνκή πξνο ηνλ
θάθειν (9) ζρεηηθή κε ηνλ
9 ./x1011 /home/students
Σξέρνληα (cwd). Τπάξρεη ν
πιενλαζκφο ρξήζεο ηνπ "./".
ΛΑΘΟ. Ξεθηλψληαο απφ ην
θάθειν (5), δελ ππάξρεη κέζα
ζε απηφλ θάθεινο κε ην
10 home /home/students φλνκαhome. Άξα, ε Γηαδξνκή
είλαη ιάζνο. Ζ αλαθνξά πξνο
ηνλ θάθειν (2) πξέπεη λα γίλεη
κε ηε ρξήζε ηνπ "..".
ΛΑΘΟ. Ξεθηλψληαο απφ ην
θάθειν (5), δελ ππάξρεη κέζα
11 tmp/Test1.txt /home/students ζε απηφλ θάθεινο κε ην
φλνκαtmp. Άξα, ε Γηαδξνκή
είλαη ιάζνο.
Δίλαη ε Γηαδξνκή πξνο ην
αξρείν (6). Δίλαη Απφιπηε
12 /tmp/Test1.txt /home/students
Γηαδξνκή θαη άξα αλεμάξηεηε
απφ ηνλ cwd.
Δίλαη ε Γηαδξνκή πξνο ην
αξρείν (6). Δίλαη Απφιπηε
Γηαδξνκή. Τπάξρεη ν
πιενλαζκφο ρξήζεο πνιιψλ "/"
σο δηαρσξηζηψλ. Απηφ δελ
13 /tmp///Test1.txt /home/students ελνριεί, θαη κάιηζηα είλαη
πηζαλφ λα πξνθχπηνπλ ηέηνηνπ
ηχπνπ Γηαδξνκέο, φηαλ
θαηαζθεπάδνληαη απφ
πξφγξακκα. Γελ ελνρινύλ ηα
πνιιαπιά "/".
66
Δίλαη ε Γηαδξνκή πξνο ην
αξρείν (6). Δίλαη ρεηηθή
Γηαδξνκή μεθηλψληαο απφ ην
(4). Τπάξρεη ν πιενλαζκφο
ρξήζεο πνιιψλ "/"θαη πνιιψλ
αλαθνξψλ ζηνλ ηξέρνληα
θάθειν"./". Απηφ δελ ελνριεί,
14 ././///Test1.txt /tmp
θαη, φπσο ζηελ πξνεγνχκελε
πεξίπησζε είλαη πηζαλφ λα
πξνθχπηνπλ ηέηνηνπ ηχπνπ
δηαδξνκέο, φηαλ
θαηαζθεπάδνληαη απφ
πξφγξακκα. Γελ ελνρινύλ ηα
πνιιαπιά "./".
Γηα ην θέιπθνο o ραξαθηήξαο ~ (tilde ή θπκαηνεηδήο γξακκή ή πεξηζπσκέλε) έρεη εηδηθή ζεκαζία, φηαλ
εκθαλίδεηαη κφλνο ηνπ ή ζηελ αξρή κηαο ζπκβνινζεηξάο πνπ εθθξάδεη δηαδξνκή. ηνλ Πίλαθα
3.4 εκθαλίδνληαη νη πηζαλέο πεξηπηψζεηο θαη ε αληίζηνηρε ζεκαζία ηνπο.
πκβνιηζκόο Δμήγεζε
Ο ραξαθηήξαο ~, ρσξίο λα αθνινπζείηαη απφ θάηη ζεκαίλεη ην home directory ηνπ
~
ηξέρνληνο ρξήζηε.
Ο ραξαθηήξαο ~, αθνινπζνχκελνο απφ ηελ "/", ζεκαίλεη ην home directory ηνπ
~/
ηξέρνληνο ρξήζηε.
Ο ραξαθηήξαο ~, αθνινπζνχκελνο απφ ηελ "/", ζεκαίλεη ην home directory ηνπ
ηξέρνληνο ρξήζηε. Μεηά αθνινπζεί ε ππφινηπε δηαδξνκή πξνο αξρεία ή θαηαιφγνπο.
~/file1.txt
Σν ζπγθεθξηκέλν παξάδεηγκα ζεκαίλεη ην αξρείνfile1.txt κέζα ζην home directory ηνπ
ηξέρνληνο ρξήζηε.
Ο ραξαθηήξαο ~, αθνινπζνχκελνο απφ νηηδήπνηε εθηφο απφ "/", ζεκαίλεη ην home
~antonis directory ηνπ ρξήζηε, ηνπ νπνίνπ ην username αθνινπζεί ην ~. Σν παξάδεηγκα ζεκαίλεη
ην home directory ηνπ ρξήζηε antonis.
Πην ζπγθεθξηκέλα, ζην ρήκα 3.12 θαίλεηαη έλα παξάδεηγκα (ηκήκα) ελφο ζπζηήκαηνο αξρείσλ. Αλ
ζε απηφ ην ζχζηεκα ππάξρνπλ νη ρξήζηεο κε ηα νλφκαηα ρξεζηψλ asidirop, vassik θαη dimitris,
ην home directory ηνπ asidirop είλαη ην /home/asidirop (9), ηνhome directory ηνπ vassik είλαη
ην /home/others/vassik (10), ελψ ην home directory ηνπ dimitris είλαη
ην /var/usr/spare(11).
πλεζίδεηαη, όηαλ νξίδεηαη ην home directory ελόο θαηλνύξγηνπ ρξήζηε, λα νξίδεηαη όηη έρεη ίδην
όλνκα κε ην όλνκα ηνπ ρξήζηε (όπσο ζην παξάδεηγκα νη asidirop, vassik). Απηό, βέβαηα, δελ είλαη
απαξαίηεην.
67
Σν home directory ελόο ρξήζηε κπνξεί λα έρεη νπνηνδήπνηε όλνκα θαη λα δεκηνπξγεζεί (από
ην δηαρεηξηζηή) ζε νπνηνδήπνηε ζεκείν ηνπ δίζθνπ.
Αλ ηξέρσλ ρξήζηεο είλαη ν asidirop, φιεο νη παξαθάησ Γηαδξνκέο είλαη ηζνδχλακεο θαη αλαθέξνληαη
ζηνλ (9):
~
~/
~asidirop
/home/asidirop
Αληίζηνηρα ηζνδχλακεο κεηαμχ ηνπο είλαη θαη νη παξαθάησ Γηαδξνκέο νη νπνίεο νδεγνχλ ζην αξρείν (2):
~/file2.txt
~asidirop/file2.txt
/home/asidirop/file2.txt
Αλ ηξέρσλ ρξήζηεο είλαη ν vassik, ηφηε ζηελ πξνεγνχκελε πεξίπησζε, κφλν νη δπν ηειεπηαίεο
δηαδξνκέο δείρλνπλ ζην αξρείν (2). Ζ πξψηε Γηαδξνκή ζα δείρλεη ζην αξρείν file2.txt πνπ βξίζθεηαη
κέζα ζην home directory ηνπ ηξέρνληνο ρξήζηε, δειαδή ηνπ vassik. Σν αξρείν απηφ είλαη ην (5).
1 2 10 11
test1.txt file2.txt dir_tmp vassik spare
3 4 5 6 12
file2.txt test1.txt file2.txt dir2 file1.txt
ηελ πξαγκαηηθφηεηα ην θέιπθνο, φηαλ ζε κηα γξακκή εληνιήο δεη ηνλ ραξαθηήξα "~", πξηλ
εθηειέζεη ηελ εληνιή, εξκελεχεη ηνλ ραξαθηήξα απηφλ. Μπνξνχκε λα ρξεζηκνπνηήζνπκε ηελ
εληνιή echo [3], γηα λα επηβεβαηψζνπκε ην παξαπάλσ. Ζ εληνιή echo δέρεηαη σο φξηζκα κηα
ζπκβνινζεηξά θαη απιά ηελ ηππψλεη ζην ηεξκαηηθφ. Δίλαη θάηη αλάινγν ησλ εληνιψλ print ή write πνπ
ππάξρνπλ ζε δηάθνξεο γιψζζεο πξνγξακκαηηζκνχ.
68
asidirop@asidirop:~$ echo "Hello World"
Hello World
asidirop@asidirop:~$ echo /home/asidirop
/home/asidirop
asidirop@asidirop:~$ echo ~
/home/asidirop
asidirop@asidirop:~$ echo \~
~
asidirop@asidirop:~$ echo ~/file2.txt
/home/asidirop/file2.txt
asidirop@asidirop:~$
ην πξνεγνχκελν παξάδεηγκα ε πξψηε εληνιή echo, απιά ηππψλεη ην κήλπκα "Hello World".
ηε δεχηεξε εληνιή, έρνπκε δψζεη σο φξηζκα ην /home/asidirop θαη ε εληνιή πξνθαλψο απιά ην
ηππψλεη. ηελ ηξίηε εληνιή, δψζακε σο φξηζκα ην "~"θαη βιέπνπκε ην ίδην απνηέιεζκα κε ηελ πξνεγνχκελε
εληνιή. Απηφ ζπκβαίλεη, δηφηη ην θέιπθνο, πξηλ εθηειέζεη ηελ εληνιή echo, εξκελεχεη ηνπο εηδηθνχο
ραξαθηήξεο πνπ ππάξρνπλ ζηε γξακκή εληνιήο. Σνλ ραξαθηήξα "~" ηνλ αληηθαζηζηά κε απηφ πνπ
αληηπξνζσπεχεη, δειαδή κε ην /home/asidirop. Όηαλ ην θέιπθνο εθηειέζεη ηελ εληνιή echo, ζα
πεξάζεη σο φξηζκα ην /home/asidirop θαη φρη ην "~".
Δάλ ζέιακε ε εληνιή echo λα ηππψζεη ηνλ ίδην ηνλ ραξαθηήξα "~", ηφηε ζα έπξεπε λα αθπξψζνπκε
ηελ εηδηθή ηνπ ζεκαζία. Ζ αθχξσζε ηεο εηδηθήο ζεκαζίαο γίλεηαη κε ηνλ ραξαθηήξα "\" (εληνιή ηέηαξηε).
Σέινο, ζηελ πέκπηε θαη ηειεπηαία εληνιή ηνπ παξαδείγκαηνο, ην θέιπθνο πάιη εξκελεχεη ηνλ
ραξαθηήξα "~" θαη ηνλ αληηθαζηζηά κε ην/home/asidirop. Έηζη, ε ζπκβνινζεηξά πνπ πξνθχπηεη είλαη
ε /home/asidirop/file2.txt θαη απηφ δίλεηαη σο φξηζκα ζηελ εληνιή echo.
69
cd: change directory – αιιαγή θαηαιφγνπ εξγαζίαο [1],
pwd: print working directory – εθηχπσζε θαηαιφγνπ εξγαζίαο[6],
mkdir: make directory - δεκηνπξγία θαηαιφγνπ [4],
rmdir: remove directory – δηαγξαθή θαηαιφγνπ [8].
Όιεο νη παξαπάλσ εληνιέο (εθηφο ηεο pwd) δέρνληαη σο νξίζκαηα Γηαδξνκέο Καηαιφγσλ (Απφιπηεο
ή ρεηηθέο). Παξάδεηγκα:
cd /tmp
mkdir ./test
mkdir /tmp/test
Δλαιιαθηηθά ησλ δπν πξνεγνχκελσλ εληνιψλ, ζα κπνξνχζακε, ρσξίο λα έρνπκε αιιάμεη Σξέρνληα
Φάθειν Δξγαζίαο, λα δεκηνπξγήζνπκε απ’ επζείαο ηνλ /tmp/test, δειαδή ηνλ test κέζα ζην /tmp.
Οη εληνιέο mkdir θαη rmdir επηδέρνληαη νξίζκαηα πνπ αληηζηνηρνχλ ζε πεξηζζφηεξεο απφ κηα
Γηαδξνκέο Καηαιφγσλ (Τπνθεθάιαην 4.2).
Οη βαζηθέο εληνιέο πνπ ρξεζηκνπνηνχληαη γηα ηε δηαρείξηζε αξρείσλ αιιά θαη θαθέισλ είλαη νη:
cp: copy – αληηγξαθή αξρείσλ ή θαθέισλ [2],
mv: move – κεηαθίλεζε ή κεηνλνκαζία αξρείσλ ή θαθέισλ [5],
rm: remove - δηαγξαθή αξρείσλ ή θαθέισλ [7],
ls: list - εκθάληζε πεξηερνκέλσλ θαθέισλ ή πιεξνθνξηψλ γηα αξρεία [7].
ε φιεο ηηο παξαπάλσ εληνιέο δίλνληαη σο νξίζκαηα αξρεία ή θάθεινη. Απηά εθθξάδνληαη είηε κε
ρεηηθέο είηε κε Απφιπηεο Γηαδξνκέο.
cp a.txt b.txt
ηελ παξαπάλσ εληνιή δίλνπκε δπν νξίζκαηα. Σν πξψην εθθξάδεη ην αξρείν πεγή θαη ην δεχηεξν
εθθξάδεη ην αξρείν πξννξηζκνχ. Σν απνηέιεζκα ζα είλαη λα δεκηνπξγεζεί κέζα ζηνλ ηξέρνληα θάθειν ην
αξρείν κε φλνκα b.txt ην νπνίν ζα είλαη αληίγξαθν ηνπ a.txt.
cp /etc/passwd ./
ηελ παξαπάλσ εληνιή δίλνπκε δπν νξίζκαηα. Σν πξψην εθθξάδεη ην αξρείν πεγή θαη ην δεχηεξν
εθθξάδεη ην αξρείν πξννξηζκνχ. Σν απνηέιεζκα ζα είλαη λα δεκηνπξγεζεί κέζα ζηνλ ηξέρνληα θάθειν ην
αξρείν κε φλνκα b.txt ην νπνίν ζα είλαη αληίγξαθν ηνπ a.txt.
70
cp /etc/passwd ./test
ηελ παξαπάλσ εληνιή δίλνπκε δπν νξίζκαηα. Σν πξψην εθθξάδεη ην αξρείν πεγή ην νπνίν είλαη ην
αξρείν /etc/passwd φπσο θαη ζην πξνεγνχκελν παξάδεηγκα. Σν δεχηεξν φξηζκα είλαη ην ./test θαη
εθθξάδεη πξννξηζκφ. Γελ δηεπθξηλίδεηαη, φκσο, αλ ν πξννξηζκφο είλαη θάθεινο ή λέν φλνκα αξρείνπ.
πλεπψο, αλάινγα κε ηελ χπαξμε ή φρη θαη ηνλ ηχπν ηνπ ./test ππάξρνπλ νη εμήο πεξηπηψζεηο:
Δάλ ζηνλ ηξέρνληα θάθειν δελ ππάξρεη ην test (νχηε αξρείν, νχηε θάθεινο κε απηφ ην φλνκα), ηφηε ζα
γίλεη αληηγξαθή ηνπ αξρείνπ /etc/passwd ζηνλ ηξέρνληα θάθειν. Σν αξρείν ζα νλνκαζηεί test.
Δάλ ζηνλ ηξέρνλ θάθειν ππάξρεη έλαο θάθεινο κε ην φλνκα test, ηφηε ζα γίλεη αληηγξαθή ηνπ
αξρείνπ passwd απφ ηνλ θαηάινγν /etc ζηνλ θάθειν test. Σν αξρείν ζα νλνκαζηεί passwd.
Δάλ ζηνλ ηξέρνληα θάθειν ππάξρεη αξρείν κε ην φλνκα test, ηφηε ζα γίλεη αληηγξαθή ηνπ
αξρείνπ /etc/passwd ζηνλ ηξέρνληα θάθειν. Σν αξρείν ζα νλνκαζηεί test θαη ζα γίλεη
αληηθαηάζηαζε (overwrite) ηνπ πξνεγνχκελνπ αξρείνπ test.
Mε ηελ εληνιή cp κπνξεί λα γίλεη αληηγξαθή ελφο αξρείνπ ζε έλα άιιν, αιιά θαη αληηγξαθή
πεξηζζνηέξσλ αξρείσλ ζε έλα θάθειν πξννξηζκφ (Τπνθεθάιαην 4.2).
Με ηελ option –r (recursive) κπνξεί λα αληηγξαθεί έλαο θάθεινο κε φια ηα πεξηερφκελά ηνπ κέζα ζε
έλαλ άιιν θάθειν/πξννξηζκφ (βιέπε Άζθεζε 4.6).
Όπσο αθξηβψο ιεηηνπξγεί ε εληνιή cp, ιεηηνπξγεί θαη ε εληνιή mv. Οη παξαθάησ εληνιέο κε ρξήζε
ηεο mv, ζα έρνπλ ην ίδην απνηέιεζκα κε ηηο πξνεγνχκελεο cp πνπ πεξηγξάθεθαλ, κφλν πνπ κεηά απφ
πεηπρεκέλε αληηγξαθή ηνπ αξρείνπ, ην αξρείν πεγή ζα δηαγξαθεί απφ ηελ αξρηθή ηνπ ηνπνζεζία.
mv /etc/passwd ./
mv /etc/passwd ./test
mv a.txt b.txt
Ζ εληνιή rm, δέρεηαη θαη απηή σο νξίζκαηα νλφκαηα αξρείσλ (ή θαη θαθέισλ) θαη ηα δηαγξάθεη. Ζ
πξνεγνχκελε εληνιή ζα δηαγξάςεη ηα αξρεία: passwd απφ ηνλ θάθειν /etc, x απφ ηνλ
θάθειν /tmp θαη test απφ ηνλ ηξέρνληα θάθειν.
Δμ’ νξηζκνχ ε εληνιή rm, δελ δηαγξάθεη θαθέινπο, αιιά κε ηελ ζεκαία –r (recursive) κπνξεί λα
δηαγξάςεη θάθειν καδί κε φια ηα πεξηερφκελά ηνπ (βιέπε Άζθεζε 4.8).
Σέινο, ε εληνιή ls εκθαλίδεη ηα πεξηερφκελα ελφο θαθέινπ (θαη φρη κφλν).
71
Πίλαθαο 3.5: Παξαδείγκαηα ρξήζεο ηεο εληνιήο ls.
Δληνιή Δμήγεζε
εκθαλίδεη ηα πεξηερφκελα ηνπ θαηαιφγνπ
ls /tmp
/tmp.
εκθαλίδεη ηα πεξηερφκελα ηνπ θαηαιφγνπ
ls /etc ./test
/etc θαη ηνπ θαηαιφγνπ ./test.
εάλ δελ δνζεί φξηζκα φλνκα θαηαιφγνπ ή
ls αξρείνπ, ηφηε εκθαλίδεη ηα πεξηερφκελα
ηνπ ηξέρνληνο θαηαιφγνπ.
εκθαλίδεη ηα νλφκαηα ησλ αξρείσλ πνπ ηεο
δψζακε σο νξίζκαηα – έρεη λφεκα κφλν
ls /etc/passwd file1.txt file2.txt φηαλ ζπλδπάδεηαη κε ζεκαίεο ηεο ls θαη
ζπλήζσο ηελ "-l", ψζηε λα εκθαληζηνχλ
επηπιένλ πιεξνθνξίεο γηα ηα αξρεία.
εκαία Δμήγεζε
-a (all) εκθαλίδεη θαη ηα θξπθά αξρεία/θαηαιφγνπο.
-l (long listing format) εκθαλίδεη αλαιπηηθέο πιεξνθνξίεο γηα ηα αξρεία/θαηαιφγνπο.
-t (time) ηαμηλνκεί ην απνηέιεζκα κε βάζε ηελ ψξα ηξνπνπνίεζεο.
εάλ ην φξηζκα είλαη θαηάινγνο, ηφηε δελ εκθαλίδεη ηα πεξηερφκελα ηνπ θαηαιφγνπ ην νπνίν είλαη
-d
ε ζπλήζεο ζπκπεξηθνξά, αιιά εκθαλίδεη πιεξνθνξίεο γηα ηνλ ίδην ηνλ θαηάινγν.
(recursive) εκθαλίδεη θαη φινπο ηνπο ππνθαηαιφγνπο θαη ηα πεξηερφκελά ηνπο θαη ηα
-R πεξηερφκελα απηψλ θαη νπνησλδήπνηε θαηαιφγσλ θάησ απφ ηνλ ηξέρνληα (ή θάησ απφ ηνλ
θάθειν πνπ δφζεθε σο φξηζκα).
72
asidirop@asidirop:/tmp$ ls -l
total 84
-rw-r--r-- 1 asidirop asidirop 45539 Feb 28 19:32 a.xml
-rw------- 1 asidirop asidirop 0 Mar 5 10:06 bib2html513cd3
-rw-r--r-- 1 asidirop asidirop 148 Mar 5 10:06 bib2html513cd3.aux
-rw-r--r-- 1 asidirop asidirop 1118 Mar 5 10:06 bib2html513cd3.bbl
drwx------ 2 asidirop asidirop 4096 Jan 1 1970 orbit-asidirop
ην 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
αξρείν
73
Οη θάθεινη ".", ".." είλαη θξπθνί..
ε έλαλ θάθειν κπνξνύλ λα ζπλππάξρνπλ ηα αξρεία .file1 θαη file1. Δίλαη δπν
δηαθνξεηηθά νλόκαηα αξρείσλ. Σν πξώην είλαη θξπθό.
ηα windows θξπθό είλαη έλα αξρείν πνπ έρεη ηελ ηδηόηεηα “hidden”, ε νπνία νξίδεηαη γηα
θάζε αξρείν/θαηάινγν, θαη είλαη εληειώο δηαθνξεηηθή έλλνηα ζε ζρέζε κε ην UNIX.
ηόρνο
Δμνηθείσζε κε ηε δηαρείξηζε αξρείσλ θαη θαηαιφγσλ.
Άζθεζε 1
ηνλ παξαθάησ πίλαθα αλαθέξνληαη νη πην ζπρλέο εληνιέο γηα ηε δηαρείξηζε αξρείσλ θαη θαηαιφγσλ.
Υξεζηκνπνηψληαο ηελ εληνιή man, ζπκπιεξψζηε ηα θελά ζηνλ παξαθάησ πίλαθα.
74
Άζθεζε 2
1. Αλνίμηε έλα ηεξκαηηθφ ηνπηθά θαη εξγαζηείηε ζε απηφ.
2. Βξείηε πνηνο είλαη ν ηξέρσλ θαηάινγνο εξγαζίαο (current working directory – cwd).
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.
ΤΠΌΓΔΗΞΖ : Να ρξεζηκνπνηείηε ηελ εληνιή pwd γηα λα ειέγρεηε θάζε θνξά πνηνο είλαη ν Σξέρσλ
Φάθεινο Δξγαζίαο.
75
Άζθεζε 4
1. Μέζα ζην home directory ζαο (ζηνλ αεηφ) δεκηνπξγήζηε ηνλ θαηάινγν transport.
transport/
|-- cars
| |-- ford
| |-- honda
| | |-- accord
| | `-- civic
| `-- renault
|-- planes
| |-- airbus
| `-- learjet
`-- trains
5. Μεηαβείηε ζηνλ θαηάινγν cars (κε ηελ εληνιή cd) θαη δείηε κε ηελ εληνιή ls ηα πεξηερφκελα ηνπ
θαηαιφγνπ planes.
6. Αληηγξάςηε ηνλ θαηάινγν planes κέζα ζηνλ θαηάινγν cars. Πψο κπνξείηε λα ην θάλεηε κε ηελ
εληνιή cp;
7. Μεηαβείηε ζηνλ θαηάινγν transport θαη δείηε κε ηελ εληνιή tree ην απνηέιεζκα.
8. Μεηαβείηε ζηνλ θαηάινγν honda θαη πξνζπαζήζηε λα δηαγξάςεηε ηνπο θαθέινπο . (current) θαη ..
(parent) κε ηελ εληνιή rm. Ση παξαηεξείηε;
Άζθεζε 5
Δθηειέζηε ηηο παξαθάησ εληνιέο (ζηνλ aetos ή ζε έλα ζχζηεκα κε πνιινχο ρξήζηεο) θαη εξκελεχζηε ηα
απνηέιεζκά ηνπο:
cat /etc/passwd
more /etc/passwd
head -15 /etc/passwd
tail -10 /etc/passwd
cd /etc
tail -10 passwd
tail -10 /etc/mtools.conf
tail –n +10 /etc/mtools.conf
Άζθεζε 6
Βξείηε ην απνηέιεζκα ηεο εθηέιεζεο (ζηνλ aetos) ησλ παξαθάησ εληνιψλ :
76
echo ~
echo ~/
echo ~asidirop
echo ~klefturi
echo $HOME
echo ~studin
echo ~root
echo ~asidirop/tmp
echo ~asidirop/denyparxei/fakelos
cd ~asidirop/denyparxei/fakelos
ls ~asidirop/denyparxei/fakelos
echo ~asidirop/..
ls ~asidirop/..
ηελ πεξίπησζε πνπ δελ δηαζέηεηε ινγαξηαζκφ ζηνλ ζπγθεθξηκέλν ππνινγηζηή (aetos), ηφηε,
φπνπ asidirop ή klefturi ζηηο πξνεγνχκελεο εληνιέο ρξεζηκνπνηήζηε νλφκαηα ρξεζηψλ πνπ
ππάξρνπλ.
Άζθεζε 7
ην παξαθάησ δηαδξαζηηθφ ζρήκα (ρήκα 3.16) παξνπζηάδεηαη έλα ηπραίν ζχζηεκα αξρείσλ. Μπνξείηε
ρξεζηκνπνηψληαο ηελ επηινγή «Νέν χζηεκα Αξρείσλ» λα δεκηνπξγήζεηε λέν δηαθνξεηηθφ. Όηαλ παηήζεηε
ην θνπκπί «Έλαξμε παηρληδηνχ», ζα εκθαλίδνληαη ζην κπιε πιαίζην θάπνηεο δηαδξνκέο. Θα πξέπεη λα θάλεηε
θιηθ επάλσ ζην ζρήκα, ζηνλ θφκβν πνπ αληηζηνηρεί ζηε δηαδξνκή πνπ ζαο εκθαλίδεηαη. Αλ ε δηαδξνκή πνπ
εκθαλίδεηαη είλαη ιαλζαζκέλε, ζα πξέπεη λα παηήζεηε ην θνπκπί «Δίλαη Λάζνο». πλνιηθά, έρεηε 30
δεπηεξφιεπηα γηα λα βξείηε φζν πεξηζζφηεξεο δηαδξνκέο κπνξείηε.
Άζθεζε 8
Τπνζέζηε φηη ην δηθφ ζαο home directory πεξηέρεη ηνπο θαθέινπο alice, bob, θαζψο θαη ηα
αξρεία carol, eve, fred, φπσο θαίλνληαη ζην παξαθάησ ζρήκα:
My home directory
alice bob
77
1. Πνηα είλαη ε Απφιπηε Γηαδξνκή γηα ην δηθφ ζαο home directory;
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 κε έλα λέν φλνκα.
78
Άζθεζε 9
ην παξαθάησ δηαδξαζηηθφ ζρήκα (Γηαδξαζηηθφ ρήκα 3.19) παξνπζηάδεηαη έλα ηπραίν ζχζηεκα αξρείσλ
(φπσο θαη ζηελ Άζθεζε 7). Όηαλ παηήζεηε ην θνπκπί «Έλαξμε παηρληδηνχ», ζα εκθαλίδνληαη ζην κπιε
πιαίζην θάπνηεο δηαδξνκέο. Θα πξέπεη λα θάλεηε θιηθ επάλσ ζην ζρήκα, ζηνλ θφκβν πνπ αληηζηνηρεί ζηε
δηαδξνκή πνπ ζαο εκθαλίδεηαη. Δπηπιένλ, αλ ε δηαδξνκή είλαη ζρεηηθή, ηφηε παίδεη ξφιν θαη ν ηξέρσλ
θαηάινγνο εξγαζίαο. Σν πνηνο είλαη θάζε θνξά εκθαλίδεηαη ζην θφθθηλν πιαίζην. Αλ ε δηαδξνκή πνπ
εκθαλίδεηαη είλαη ιαλζαζκέλε, ζα πξέπεη λα παηήζεηε ην θνπκπί «Δίλαη Λάζνο». πλνιηθά έρεηε 30
δεπηεξφιεπηα γηα λα βξείηε φζν πεξηζζφηεξεο δηαδξνκέο κπνξείηε.
3.7 Αλαθνξέο
[1] GNU Bash, General Commands Manual.
[2] GNU coreutils Reference Manual: cp command.
[3] GNU coreutils Reference Manual: echo command.
[4] GNU coreutils Reference Manual: mkdir command.
[5] GNU coreutils Reference Manual: mv command.
[6] GNU coreutils Reference Manual: pwd command.
[7] GNU coreutils Reference Manual: rm command.
[8] GNU coreutils Reference Manual: rmdir command.
[9] GNU coreutils Reference Manual: touch command.
[10] WikiPedia. List of file systems, February 2015. [ http://en.wikipedia.org/wiki/List_of_file_systems ]
79
Κεθάιαην 4
asidirop@antonis-PC:/tmp/tests$ ls -l
total 0
-rw-rw-r-- 1 asidirop asidirop 0 Mar 14 22:23 file1.txt
-rw-rw-r-- 1 asidirop asidirop 0 Mar 14 22:23 file2
-rw-rw-r-- 1 asidirop asidirop 0 Mar 14 22:23 file.txt
-rw-rw-r-- 1 asidirop asidirop 0 Mar 14 22:23 test.txt
asidirop@antonis-PC:/tmp/tests$ ls -l f█
Δάλ θαηά ηελ πιεθηξνιφγεζε ηνπ νλφκαηνο αξρείνπ πιεθηξνινγήζνπκε κφλν ην "f" θαη κεηά
παηήζνπκε ην πιήθηξν “Tab”, ηφηε ην θέιπθνο ζα αλαγλσξίζεη φηη ηα
αξρεία file1.txt, file2 θαη file.txt μεθηλνχλ φια κε "f" θαη ηαηξηάδνπλ ζε απηφ πνπ μεθηλήζακε
λα πιεθηξνινγνχκε. Θα ζπκπιεξψζεη κφλν ηνπο θνηλνχο ραξαθηήξεο, δειαδή ζα ζπκπιεξψζεη ην "f" κε
ην ile πνπ είλαη νη θνηλνί ραξαθηήξεο, θαη ζα ζηακαηήζεη ε απηφκαηε ζπκπιήξσζε. ε απηφ ην ζεκείν, εάλ
μαλαπαηήζνπκε ην πιήθηξν “Tab”, ζα καο εκθαλίζεη φιεο ηηο δπλαηέο επηινγέο, δειαδή:
asidirop@antonis-PC:/tmp/tests$ ls -l file
file1.txt file2 file.txt
asidirop@antonis-PC:/tmp/tests$ ls -l file█
Απφ εθεί θαη κεηά κπνξνχκε λα ζπλερίζνπκε ηελ πιεθηξνιφγεζε ηνπ νλφκαηνο αξρείνπ θαη λα
μαλαπαηήζνπκε “Tab”. Παξάδεηγκα, αλ πιεθηξνινγήζνπκε ην έλα (“1”) θαη έπεηηα ην “Tab”, ηφηε ην
θέιπθνο ζα αλαγλσξίζεη φηη δεηείηαη αλαθνξά ζην αξρείν file1.txt θαη ζα ζπκπιεξψζεη νιφθιεξν ην
φλνκα αξρείνπ.
Πξνθαλψο, ε απηφκαηε ζπκπιήξσζε ηζρχεη φρη κφλν γηα νλφκαηα αξρείσλ, αιιά θαη γηα νλφκαηα
θαηαιφγσλ.
81
asidirop@antonis-PC:/tmp/tests$ ls -l /tmp/t
tests/ tmp6VdHaF tmp8DwO_C
asidirop@antonis-PC:/tmp/tests$ ls -l /tmp/t█
Ζ πιεθηξνιφγεζε ηνπ “Tab” κεηά απφ ην "/t" εκθάληζε φηη δπλαηέο επηινγέο είλαη
νη tests/, tmp6VdHaF θαη tmp8DwO_C. Μάιηζηα καο δίλεηαη θαη ε πιεξνθνξία φηη ην tests είλαη
θαηάινγνο πξνζζέηνληαο ζην ηέινο ηνπ νλφκαηνο θαηαιφγνπ θαη ηνλ ραξαθηήξα "/".
ε απηή ηε πεξίπησζε, ην ηειεπηαίν φξηζκα ζηελ εληνιή cp πξέπεη λα είλαη έλαο θαηάινγνο πνπ
ππάξρεη. Με ηνλ ίδην ηξφπν, ζα κπνξνχζακε λα ρξεζηκνπνηήζνπκε θάπνηα άιιε εληνιή πνπ ζα εθαξκφζεη
θάπνηα ελέξγεηα ζε πνιιά αξρεία.
Φαληαζηείηε, φκσο, λα ζέινπκε λα αληηγξάςνπκε εθαηφ αξρεία. Αθφκε θαη αλ ρξεζηκνπνηήζνπκε ηε
δπλαηφηεηα ηνπ θειχθνπο γηα απηφκαηε ζπκπιήξσζε νλφκαηνο αξρείνπ, ζα ήηαλ αδχλαην λα
πιεθηξνινγήζνπκε εθαηφ νλφκαηα αξρείσλ.
82
Πίλαθαο 4.1: Δηδηθνί ραξαθηήξεο κπαιαληέξ
ύκβνιν Δμήγεζε
εκαίλεη νπνηνζδήπνηε ζπλδπαζκφο ραξαθηήξσλ νπνηνπδήπνηε κήθνπο (αθφκε θαη
*
κεδεληθνχ κήθνπο)
? εκαίλεη έλαο αθξηβψο ραξαθηήξαο – νπνηνζδήπνηε ραξαθηήξαο
εκαίλεη έλαο αθξηβψο ραξαθηήξαο απφ ην ζχλνιν ησλ ραξαθηήξσλ πνπ αλαγξάθνληαη
[xyz]
κέζα ζηηο αγθχιεο: ("x", "y", "z" )
εκαίλεη έλαο αθξηβψο ραξαθηήξαο – νπνηνζδήπνηε ραξαθηήξαο εθηφο ησλ ("x", "y", "z" ).
[^xyz]
Σν ζχκβνιν "^" ακέζσο κεηά ηελ αγθχιε "[" δειψλεη άξλεζε.
[!xyz] Δλαιιαθηηθά ηνπ "^" κπνξεί λα ρξεζηκνπνηεζεί θαη ην "!". Γειψλεη άξλεζε.
[abcdxyz] Δάλ νη ραξαθηήξεο ηνπ ζπλφινπ πνπ δειψλνπκε είλαη ζπλερφκελνη ζηνλ πίλαθα
[a-dxyz] ραξαθηήξσλ, ηφηε κπνξεί λα ρξεζηκνπνηεζεί ε παχια "-" γηα λα δειψζεη "απφ - έσο". Οη
[a-dx-z] ηξεηο εθθξάζεηο είλαη ηζνδχλακεο.
Μπνξεί λα γίλεη ζπλδπαζκφο ηνπ εχξνπο ("-") κε ηελ άξλεζε. Σν παξάδεηγκα ζεκαίλεη
[!a-dxyz] έλαο νπνηνζδήπνηε ραξαθηήξαο, αιιά φρη θάπνηνο απφ ηνπο ("a", "b", "c", "d", "x", "y",
"z").
83
Πίλαθαο 4.2: Οκάδεο ραξαθηήξσλ όπσο νξίδνληαη ζην POSIX.
ύκβνιν Δμήγεζε
[:alnum:] αιθαξηζκεηηθφο ραξαθηήξαο
[:alpha:] αιθαβεηηθφο ραξαθηήξαο
[:upper:] αιθαβεηηθφο θεθαιαίνο ραξαθηήξαο
[:lower:] αιθαβεηηθφο πεδφο ραξαθηήξαο
[:digit:] ραξαθηήξαο δεθαδηθνχ αξηζκνχ, δειαδή 0-9
[:xdigit:] ραξαθηήξαο δεθαεμαδηθνχ αξηζκνχ, δειαδή 0-9abcdef ή θαη θεθαιαία.
ραξαθηήξαο πνπ αληηζηνηρεί ζε δηάζηεκα: θελφ δηάζηεκα (space), ζηεινζέηεο (tab),
[:space:]
αιιαγή γξακκήο (Enter) θαη παξφκνηνπο
[:print:] Όινη νη εθηππψζηκνη ραξαθηήξεο.
[:graph:] Όινη νη εθηππψζηκνη ραξαθηήξεο εθηφο ησλ [:space:]
[:cntrl:] Όινη νη ραξαθηήξεο ειέγρνπ, δειαδή κε εθηππψζηκνη.
[:punct:] Υαξαθηήξεο ζηίμεο.
84
ηνλ Πίλαθα 4.3 παξνπζηάδνληαη νη εθηππψζηκνη ραξαθηήξεο ηνπ ζπλφινπ ASCII θαη ε αληηζηνηρία
ηνπο. Οη πξψηνη 32 ραξαθηήξεο (0-31) ηνπ πίλαθα (θαη ν 127) πεξηέρνπλ ραξαθηήξεο ειέγρνπ. Οη ραξαθηήξεο
ειέγρνπ δελ θαίλνληαη, αιιά δίλνπλ θάπνηα πιεξνθνξία (ζπλήζσο ζην ηεξκαηηθφ πνπ ηνπο εξκελεχεη).
Παξάδεηγκα, ν ραξαθηήξαο πνπ αληηζηνηρεί ζην 7 νδεγεί ην ηεξκαηηθφ λα θάλεη ήρν (bell ζπκβνιίδεηαη σο
BEL, \a, ^G), ν 10 αληηζηνηρεί ζηελ αιιαγή γξακκήο (line feed: ζπκβνιίδεηαη σο LF, \n, ^J) θηι. ηνλ
παξαπάλσ πίλαθα εκθαλίδνληαη κφλν νη εθηππψζηκνη ραξαθηήξεο, βιέπνπκε γηα παξάδεηγκα φηη ην "Α"
αληηζηνηρεί ζηνλ αξηζκφ 65, ην "i" ζηνλ αξηζκφ 105 θηι.
Η ζεηξά κε ηελ νπνία εθθξάδεηαη έλα εύξνο ραξαθηήξσλ νξίδεηαη από ηε ζεηξά ησλ ραξαθηήξσλ
ζηνλ πίλαθα ASCII ή ζην ζύλνιν ραξαθηήξσλ πνπ ρξεζηκνπνηείηαη.
Έηζη αλ δψζνπκε:
ls [5-T]*
ην [5-Σ] ζεκαίλεη έλαο ραξαθηήξαο κέζα ζην εχξνο απφ ην ραξαθηήξα "5" κέρξη ηνλ "Σ". Πνην είλαη απηφ ην
εχξνο; Θα είλαη νη ραξαθηήξεο 5 6 7 8 9 : ; < = > ? @ A...Σ.
Δδψ, πξέπεη λα παξαηεξήζνπκε φηη ην ζχλνιν ASCII νξίδεη 128 ραξαθηήξεο. Άξα, ρξεζηκνπνηεί 7
bits. Σν φγδνν bit ζπλήζσο ρξεζηκνπνηνχληαλ σο bit ειέγρνπ (parity bit).
Ιζηνξηθή Αλαδξνκή
Απηνί νη 128 ραξαθηήξεο, πνπ ζηελ πξαγκαηηθφηεηα ήηαλ 95, αλ εμαηξέζνπκε ηνπο ραξαθηήξεο ειέγρνπ, ήηαλ
αξθεηνί γηα ηνλ ζπκβνιηζκφ ησλ αγγιηθψλ γξακκάησλ, φρη φκσο θαη γηα γξάκκαηα άιισλ γισζζψλ.
Δπηπιένλ, ηε δεθαεηία ηνπ 1990 είραλ βειηησζεί αξθεηά ηα κέζα απνζήθεπζεο θαη επηθνηλσλίαο θαη δελ
απαηηνχληαλ ε ρξήζε ηνπ bit ειέγρνπ. Σφηε νξίζηεθαλ ηα ζχλνια ραξαθηήξσλ ISO-8859, θαηά ηα νπνία
ρξεζηκνπνηνχληαλ 8bits γηα ηελ αλαπαξάζηαζε ελφο ραξαθηήξα, δειαδή ππήξραλ 256 δηαζέζηκνη
ραξαθηήξεο.
Παξφια απηά, νη 256 δηαζέζηκεο ζέζεηο ραξαθηήξσλ δελ αξθνχλ γηα ηνλ ζπκβνιηζκφ φισλ ησλ
γξακκάησλ φισλ ησλ γισζζψλ. Έηζη, ν νξγαληζκφο ISO φξηζε ηα ππνζχλνια: ISO-8859-1, ISO-8859-2, ...
ISO-8859-16. ε φια απηά ηα ζχλνια, νη πξψηνη 128 ραξαθηήξεο είλαη ίδηνη κε ην ASCII. Οη ππφινηπνη
ραξαθηήξεο νξίδνληαη γηα ηα ζχκβνια ηεο ρψξαο πνπ ρξεζηκνπνηνχληαη. Σν ISO-8859-1 [2] αληηζηνηρεί ζηα
αγγιηθά (ρήκα 4.1) ελψ ην ISO-8859-7 [3] πεξηέρεη ηνπο ειιεληθνχο ραξαθηήξεο (ρήκα 4.2).
Ο νξηζκφο ησλ ISO-8859 θαη ηδηαίηεξα ηνπ ISO-8859-7 ππνηίζεηαη φηη ζα έδηλε έλα ηέινο ζηε ρξήζε
ησλ greeklish ζε ειιεληθά (αλεπίζεκα ζπλήζσο) θείκελα. Όκσο, ζηελ πξαγκαηηθφηεηα δεκηνχξγεζε αθφκε
πεξηζζφηεξα πξνβιήκαηα. Έλαο ρξήζηεο (ή ην ζχζηεκα) ζα έπξεπε λα γλσξίδεη ην ζχλνιν ραξαθηήξσλ πνπ
ρξεζηκνπνηεί έλα θείκελν γηα λα κπνξέζεη λα ην πξνβάιεη ζσζηά. Έηζη, έρνληαο έλα θείκελν γξακκέλν κε
ISO-8859-7, αλ ζηελ πξνβνιή ηνπ δελ ιακβάλνληαλ απηφ ππφςε θαη ρξεζηκνπνηνχληαλ ην ISO-8859-1 (πνπ
είλαη ην πιένλ ζπρλφ παγθνζκίσο), ηφηε ην θείκελν δελ είλαη αλαγλψζηκν. Παξάδεηγκα (φπσο θαίλεηαη ζηα 2
ρήκαηα), ν ραξαθηήξαο "β" ζα εκθαλίδεηαη σο "â", ελψ ν ραξαθηήξαο "Π" ζαλ "Ð" θ.ν.θ.
85
ρήκα 4.1: ISO-8859-1 όπσο νξίδεηαη από ηνπο νξγαληζκνύο ISO-IEC
Ήηαλ πξνθαλήο ε αλάγθε γηα νξηζκφ ελφο ζπλφινπ ραξαθηήξσλ κε βάζε ην νπνίν δελ ζα ππήξρε
δηθνξνχκελν byte. Έηζη, νξίζηεθαλ ηα multi-byte character sets θαη ε νηθνγέλεηα UTF. ε απηά ηα ζχλνια
ραξαθηήξσλ γηα ηελ αλαπαξάζηαζε ελφο ραξαθηήξα ρξεζηκνπνηνχληαη πάλσ απφ έλα bytes. πλεπψο, νη
δπλαηνί ζπλδπαζκνί είλαη πνιινί θαη ηθαλνί λα αλαπαξαζηήζνπλ πνιινχο ραξαθηήξεο. ην UTF-8 έλαο
86
ραξαθηήξαο θαηαιακβάλεη απφ 8 έσο 16 bits (1 - 2 bytes). Οη πξψηνη 128 ραξαθηήξεο είλαη ίδηνη κε ην ASCII.
ην UTF-16 έλαο ραξαθηήξαο θαηαιακβάλεη 16 ή 32 bits (2 - 4 bytes).
ην Linux, ρξεζηκνπνηείηαη πιένλ σο πξνθαζνξηζκέλν ζχλνιν ραξαθηήξσλ ην UTF-8. Δπίζεο, ζηνλ
Παγθφζκην Ηζηφ (WWW) ρξεζηκνπνηείηαη θπξίσο ην UTF-8. Παξφια απηά, δεδνκέλεο ηεο χπαξμεο πνιιψλ
ζπλφισλ πνπ έρνπλ νξηζηεί απφ ηνλ νξγαληζκφ ISO θαη δεδνκέλνπ φηη ε Microsoft έρεη νξίζεη ηα δηθά ηεο
ζχλνια ραξαθηήξσλ (windows-1252, windows-1253, θ.α.), εμαθνινπζεί λα ππάξρεη ζχγρπζε ζε πνιιέο
πεξηπηψζεηο αλαγλψξηζεο ησλ ραξαθηήξσλ. Απαηηείηαη ηδηαίηεξε πξνζνρή, ηδίσο θαηά ηε δηαρείξηζε αξρείσλ
πνπ δεκηνπξγήζεθαλ ζε δηαθνξεηηθφ ππνινγηζηή, ν νπνίνο πηζαλφλ ρξεζηκνπνηεί δηαθνξεηηθφ
πξνθαζνξηζκέλν ζχλνιν ραξαθηήξσλ.
ηα ζύλζεηα ζύλνια ραξαθηήξσλ (UTF), νξίδνληαη θαη ηζνδπλακίεο ραξαθηήξσλ. Παξάδεηγκα ην
"α" είλαη ηζνδύλακν κε ην "ά", κε ην "Α" θαη κε ην "Ά". Γηα θάπνηα άιιε γιώζζα:
"à" ⇔ "á" ⇔ "â" ⇔ "ã" ⇔ "ä" ⇔ "å".
Έηζη, ην [Α-Ε] ηαηξηάδεη θαη ηνπο πεδνχο ραξαθηήξεο (a-z) εθφζνλ ρξεζηκνπνηείηαη UTF ζχλνιν
ραξαθηήξσλ. πλεπψο, είλαη πξνηηκφηεξν λα ρξεζηκνπνηνχληαη νη ζπληνκεχζεηο, φπνπ απηφ είλαη εθηθηφ.
Δπίζεο, γηα παξάδεηγκα ε ζπληφκεπζε [[:upper:]] ππεξηεξεί απφ ηε δηαηχπσζε [Α-Ε], δηφηη ην πξψην
ζα ηαηξηάμεη ζε φινπο ηνπο θεθαιαίνπο ραξαθηήξεο είηε ειιεληθνχο, είηε αγγιηθνχο, είηε ηνληζκέλνπο
ειιεληθνχο.
Μέζα ζε έλα θέιπθνο κπνξνχκε λα αιιάμνπκε ην ζχλνιν ραξαθηήξσλ πνπ ρξεζηκνπνηείηαη
νξίδνληαο ηε κεηαβιεηή πεξηβάιινληνο LC_ALL. Πεξηζζφηεξα γηα ηηο κεηαβιεηέο πεξηβάιινληνο ζα δνχκε
ζην Κεθάιαην 8. ηνλ Πίλαθα 4.4 παξαζέηνπκε κφλν ηνλ ηξφπν ρσξίο πεξαηηέξσ εμήγεζε [4]:
87
ρήκα 4.3: Αξηζηεξά: Δκθάληζε κελπκάησλ ζηα αγγιηθά. Γεμηά: Δκθάληζε κελπκάησλ ζηα ειιεληθά.
Απαηηείηαη πξνζνρή φηαλ αιιάδνπκε ηηο ξπζκίζεηο ηνπ ζπλφινπ ραξαθηήξσλ. Γελ αξθεί λα νξίζνπκε
ζην θέιπθνο πνην είλαη ην ζχλνιν ραξαθηήξσλ πνπ ρξεζηκνπνηνχκε, αιιά θαη ζηελ εθαξκνγή ηεξκαηηθνχ.
ην ρήκα 4.4 θαίλεηαη κηα ηέηνηα πεξίπησζε. ηελ αξηζηεξή εηθφλα ην ηεξκαηηθφ εκθαλίδεη "ISO-8859-7",
αιιά ην θέιπθνο ρξεζηκνπνηεί ην UTF-8. Θα πξέπεη λα ελεκεξσζεί ε πιεξνθνξία απηή θαη ζηελ εθαξκνγή
ηεξκαηηθνχ.
Αληίζηνηρε ξχζκηζε απαηηείηαη λα γίλεη ζε φια ηα πξνγξάκκαηα πξνζνκνίσζεο ηεξκαηηθνχ είηε ζην
Linux, είηε ζηα Windows. Παξάδεηγκα, ην putty.exe πνπ είλαη πξφγξακκα πξνζνκνίσζεο ηεξκαηηθνχ θαη ssh
client, αλ θαη ιεηηνπξγεί ζε Microsoft Windows, απαηηεί αληίζηνηρε ξχζκηζε (ρήκα 4.5).
88
ρήκα 4.5: Ρύζκηζε ζπλόινπ ραξαθηήξσλ ζην putty.
cp f* /media/USB_STICK
Δάλ ζέινπκε λα αληηγξάςνπκε φια ηα αξρεία κε ηελ θαηάιεμε .c θαη ηελ θαηάιεμε .h:
cp *.[ch] /media/USB_STICK
Οη ραξαθηήξεο κπαιαληέξ ηνπ θειύθνπο (shell wildcards) εξκελεύνληαη από ην θέιπθνο θαη
είλαη αλεμάξηεηνη ηεο εληνιήο πνπ ρξεζηκνπνηείηαη. Άξα, κπνξνύλ λα ρξεζηκνπνηεζνύλ κε
νπνηαδήπνηε εληνιή, κε ηνλ ίδην ηξόπν.
89
asidirop@aetos:~/tmp/os_wild$ ls -l *.c
-rw------- 2 asidirop conit 0 2008-10-01 10:15 file1.c
-rw------- 2 asidirop conit 0 2008-10-01 10:15 file2.c
-rw------- 2 asidirop conit 0 2008-10-01 10:15 file3.c
-rw------- 2 asidirop conit 0 2008-10-01 10:15 file4.c
-rw------- 2 asidirop conit 0 2008-10-01 10:15 file5.c
-rw------- 2 asidirop conit 0 2008-10-01 10:15 file8.c
-rw------- 2 asidirop conit 0 2008-10-01 10:15 test.c
asidirop@aetos:~/tmp/os_wild$ echo *.h
file3.h file4.h
asidirop@aetos:~/tmp/os_wild$ echo The .h files in cwd are: *.h
The .h files in cwd are: file3.h file4.h
ηελ πξψηε εληνιή, δίλνπκε σο φξηζκα ζηελ ls φια ηα αξρεία ησλ νπνίσλ ε θαηάιεμε είλαη ".c". ηε
δεχηεξε εληνιή, δίλνληαη σο φξηζκα φια ηα νλφκαηα αξρείσλ ησλ νπνίσλ ε θαηάιεμε είλαη ".h". Ζ εληνιή
echo απιά εκθαλίδεη ηα νξίζκαηα πνπ ηεο δφζεθαλ, ζπλεπψο, απιά εκθαλίδνληαη ηα νλφκαηα αξρείσλ πνπ
ηαίξηαμαλ ζην κπαιαληέξ. Ζ ηξίηε εληνιή ρξεζηκνπνηεί ην ίδην κπαιαληέξ κε ηε δεχηεξε. Ζ δηαθνξά κε ηελ
πξνεγνχκελε είλαη φηη δίλνληαη ζηελ echo θαη άιια νξίζκαηα (ιέμεηο). Ζ εληνιή echo πξνθαλψο ζα
εκθαλίζεη φια ηα νξίζκαηα πνπ ηεο δφζεθαλ, θαη επνκέλσο ην απνηέιεζκά ηεο ζα είλαη ην "The .h files in
cwd are: file3.h file4.h".
ηα Microsoft Windows ππάξρεη ε δπλαηόηεηα ρξήζεο κπαιαληέξ θαηά ηελ αλαδήηεζε
αξρείσλ κέζα από ηνλ δηαρεηξηζηή αξρείσλ, θαζώο επίζεο θαη από ην Microsoft Power
Shell.
Καηά ηε ρξήζε κηαο αλαθνξάο ζε αξρείν κε κπαιαληέξ, εάλ δελ βξεζεί αληηζηνηρία κε θάπνην φλνκα
αξρείνπ, ηφηε νη ραξαθηήξεο κπαιαληέξ (wildcards) δελ «κεηαθξάδνληαη» απφ ην θέιπθνο. ην παξαθάησ
παξάδεηγκα, ε πξψηε εληνιή πεξηιακβάλεη ην "*.x". Γελ βξίζθεηαη, φκσο, θάπνην αξρείν κε απηφ ην φλνκα.
πλεπψο, ην θέιπθνο δελ κπνξεί λα αληηθαηαζηήζεη ην κπαιαληέξ κε θάηη άιιν θαη ην "*.x" παξακέλεη φπσο
είλαη. Ζ εληνιή echo ζα ιάβεη σο φξηζκα ηε ζπκβνινζεηξά "*.x" θαη απιά ζα ηελ εθηππψζεη. Γελ ζα
εκθαληζηεί θαλέλα κήλπκα ζθάικαηνο. Αληηζέησο, ζηελ ηειεπηαία εληνιή πνπ ρξεζηκνπνηείηαη πάιη ην "*.x",
ε εληνιή ζα εκθαλίζεη κήλπκα ζθάικαηνο. Απηφ ζπκβαίλεη δηφηη ε εληνιή cp ζα ιάβεη σο πξψην φξηζκα ην
"*.x" θαη ζα ςάμεη λα βξεη ην αξρείν κε απηφ ην φλνκα γηα λα ην αληηγξάςεη. Γελ ζα βξεη αξρείν κε φλνκα
"*.x" θαη άξα, ζα καο ελεκεξψζεη γηα ην ζθάικα.
90
Αθφκε έλα παξάδεηγκα ζην νπνίν κνηάδνπλ νη εληνιέο λα κελ έρνπλ ληεηεξκηληζηηθή ζπκπεξηθνξά
είλαη ην παξαθάησ: Έζησ φηη ζε έλαλ θάθειν πεξηέρνληαη ηα αξρεία "a" θαη "b" ηα νπνία ζέινπκε λα ηα
αληηγξάςνπκε θάπνπ αιινχ. Ζ εληνιή γηα λα αληηγξάςνπκε φια ηα αξρεία ζηνλ θάθειν /tmp είλαη ε "cp *
/tmp". Έζησ, φκσο, φηη θαηά ηελ πιεθηξνιφγεζή ηεο παηήζακε "Enter" πξηλ απφ ην /tmp. Άξα, γξάςακε
ηελ εληνιή "cp *". Παξαδφμσο νχηε ην θέιπθνο εκθαλίδεη θάπνην κήλπκα ζθάικαηνο, αιιά νχηε θαη ε
εληνιή cp παξφιν πνπ παξαιείςακε ηνλ θάθειν πξννξηζκνχ. Ση ζπλέβε;
asidirop@aetos:~/tmp/os_wild2$ ls -l
total 8
-rw------- 1 asidirop conit 12 2008-10-01 10:34 a
-rw------- 1 asidirop conit 24 2008-10-01 10:34 b
asidirop@aetos:~/tmp/os_wild2$ cp * /tmp
asidirop@aetos:~/tmp/os_wild2$ cp *
asidirop@aetos:~/tmp/os_wild2$
Γίλνληαο ηελ εληνιή "cp *", ην "*" κεηαθξάδεηαη ζηα νλφκαηα αξρείσλ ηνπ ηξέρνληνο θαηαιφγνπ,
δειαδή ζε "a b". πλεπψο, ε εληνιή πνπ εθηειέζηεθε ήηαλ ε:
cp a b
Ζ παξαπάλσ εληνιή δελ αληηζηνηρεί ζηελ αληηγξαθή ηνπ "a" θαη "b" ζε έλαλ θάθειν πξννξηζκνχ,
αιιά ζηελ αληηγξαθή ηνπ "a" επάλσ ζην "b". Έηζη, ην αξρείν "b" αληηθαζίζηαηαη απφ ην "a".
Δάλ ζηνλ ίδην θαηάινγν είρακε ηξία αξρεία (αληί δπν), έζησ ηα "a", "b" θαη "c", ηφηε ην απνηέιεζκα
ηεο ίδηαο εληνιήο ζα ήηαλ δηαθνξεηηθφ
asidirop@aetos:~/tmp/os_wild2$ ls -l
total 12
-rw------- 2 asidirop conit 12 2008-10-01 10:34 a
-rw------- 2 asidirop conit 12 2008-10-01 10:35 b
-rw------- 1 asidirop conit 38 2008-10-01 10:40 c
asidirop@aetos:~/tmp/os_wild2$ cp *
cp: target `c' is not a directory
Γηαηί, ζε απηήλ ηελ πεξίπησζε, εκθαλίδεηαη κήλπκα ζθάικαηνο θαη δελ γίλεηαη αληηγξαθή φπσο πξηλ;
Ο ρεηξηζκφο απφ ην θέιπθνο παξακέλεη ν ίδηνο. Αληηθαζηζηά ην "*" κε ηα νλφκαηα αξρείσλ πνπ ηαηξηάδνπλ.
ε απηήλ ηελ πεξίπησζε, ηα "a", "b" θαη "c". πλεπψο, ε εληνιή κεηαθξάδεηαη ζε:
cp a b c
Όηαλ δίλνληαη ζηελ εληνιή cp πάλσ απφ δπν νξίζκαηα, ηφηε ηα πξψηα λ-1 είλαη αξρεία πεγήο θαη ην
ηειεπηαίν πξέπεη λα είλαη θαηάινγνο πξννξηζκνχ, ψζηε λα αληηγξάςεη φια ηα αξρεία πεγή κέζα ζηνλ
θαηάινγν. Όκσο, ην "c" είλαη αξρείν θαη φρη θαηάινγνο. Ζ εληνιή cp δελ κπνξεί λα αληηγξάςεη δπν αξρεία ζε
έλα ηξίην θαη εκθαλίδεη κήλπκα ζθάικαηνο φηη ν πξννξηζκφο "c" δελ είλαη θαηάινγνο.
Δάλ θαηά ηχρε, ζηνλ ηξέρνληα θαηάινγν ππήξρε θαη ππνθαηάινγνο, ηνπ νπνίνπ ην φλνκα έπνληαλ
αιθαβεηηθά ησλ νλνκάησλ φισλ ησλ αξρείσλ, παξάδεηγκα αξρεία κε νλφκαηα "a", "b", "c" θαη έλαο
θαηάινγνο κε φλνκα "z", ηφηε ε ζπκπεξηθνξά ηεο ίδηαο εληνιήο ζα ήηαλ πάιη δηαθνξεηηθή:
91
asidirop@aetos:~/tmp/os_wild2$ ls -l
total 12
-rw------- 2 asidirop conit 12 2008-10-01 10:34 a
-rw------- 2 asidirop conit 12 2008-10-01 10:35 b
-rw------- 1 asidirop conit 38 2008-10-01 10:40 c
drwx------ 2 asidirop conit 6 2008-10-01 10:43 z
asidirop@aetos:~/tmp/os_wild2$ cp *
asidirop@aetos:~/tmp/os_wild2$ ls -l
total 12
-rw------- 2 asidirop conit 12 2008-10-01 10:34 a
-rw------- 2 asidirop conit 12 2008-10-01 10:35 b
-rw------- 1 asidirop conit 38 2008-10-01 10:40 c
drwx------ 2 asidirop conit 30 2008-10-01 10:44 z
asidirop@aetos:~/tmp/os_wild2$ ls -l z/
total 12
-rw------- 1 asidirop conit 12 2008-10-01 10:44 a
-rw------- 1 asidirop conit 12 2008-10-01 10:44 b
-rw------- 1 asidirop conit 38 2008-10-01 10:44 c
cp 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.
Σν [12][0-9] ζεκαίλεη λα ππάξρεη είηε ην "1", είηε ην "2" θαη κεηά αθφκε έλαο αξηζκφο απφ "0"
έσο "9". Με απηφλ ηνλ ηξφπν θαιχπηνληαη νη ζπλδπαζκνί 10, 11, 12, ..., 19, 20, 21,...,29. Απηφ πνπ δελ
θαιχπηεηαη είλαη ην "30", ην νπνίν θαη πξέπεη λα ην αλαθέξνπκε μερσξηζηά.
92
Αλ ρξεζηκνπνηνχζακε ην file[123][0-9].txt, ηφηε ζα θαιχπηακε ηνπο ζπλδπαζκνχο 10-39 πνπ είλαη
έμσ απφ ηα φξηα πνπ ζα ζέιακε.
Με ηε ρξήζε ηεο echo, ε κε εξκελεία ηνπ κπαιαληέξ δελ νδεγεί ζε θάπνην πξφβιεκα. Απιά
εθηππψλεηαη ζηελ νζφλε. Με ηελ ρξήζε ηεοls, φκσο, (ηέηαξηε εληνιή) ε κε εξκελεία ηνπ, νδεγεί ηελ ls λα
εκθαλίζεη κήλπκα ζθάικαηνο. Απηφ δηφηη ζηελ ls δελ πεξλνχλ σο νξίζκαηα ηα νλφκαηα αξρείσλ, αιιά
πεξλάεη σο φξηζκα ε ζπκβνινζεηξά "*.c". H ls ςάρλεη λα βξεη έλα αξρείν κε απηφ ην φλνκα. Γελ βξίζθεη
θάπνην θαη ζπλεπψο εκθαλίδεη κήλπκα ζθάικαηνο. Δάλ ζηνλ ηξέρνληα θαηάινγν ππήξρε αξρείν κε ην φλνκα
"*.c", ηφηε ε ls ζα εκθάληδε πιεξνθνξίεο γηα απηφ ην αξρείν.
93
Με ηνλ ίδην ηξφπν ζπκπεξηθέξεηαη ην θέιπθνο θαη φηαλ ρξεζηκνπνηνχληαη ζρεηηθέο δηαδξνκέο. Όπσο
θαίλεηαη ζην παξαθάησ παξάδεηγκα, ε δηαδξνκή "../../" ζα επαλαιεθζεί γηα θάζε αξρείν. Μάιηζηα, ζα
επαλαιεθζεί σο ζρεηηθή δηαδξνκή, φπσο αθξηβψο δηαηππψζεθε ζηελ εληνιή.
Πξνθαλψο, κέζα ζηελ ίδηα εληνιή, κπνξεί λα γίλεη ρξήζε πνιιψλ εθθξάζεσλ κε κπαιαληέξ φπσο
ζηε δεχηεξε εληνιή ηνπ πξνεγνχκελνπ παξαδείγκαηνο.
Ζ ρξήζε ησλ ραξαθηήξσλ κπαιαληέξ απνθηά αθφκε κεγαιχηεξν ελδηαθέξνλ, φηαλ ρξεζηκνπνηνχληαη
γηα λα δεκηνπξγήζνπλ δηαδξνκέο.
ηελ πξψηε εληνιή ηνπ παξαδείγκαηνο, ρξεζηκνπνηνχκε ην "*" σο ηκήκα Γηαδξνκήο πνπ ζεκαίλεη
νπνηνδήπνηε ηκήκα κνλνπαηηνχ. Ζ ζπγθεθξηκέλε εληνιή πξαθηηθά ζα καο δψζεη φια ηα νλφκαηα αξρείσλ
πνπ ηειεηψλνπλ ζε "cnf" θαη βξίζθνληαη δπν επίπεδα καθξηά απφ ηε ξίδα ηνπ ζπζηήκαηνο αξρείσλ (root
directory). Έηζη, εκθαλίδνληαη ηα "debian.cnf", "my.cnf" θαη "openssl.cnf" ηα νπνία, φκσο, βξίζθνληαη ζε
δηαθνξεηηθνχο θαηαιφγνπο. Όινη νη θαηάινγνη, φκσο, βξίζθνληαη ζε απφζηαζε δπν επηπέδσλ απφ ηε ξίδα.
Πξνθαλψο, ην θέιπθνο εκθαλίδεη ηηο δηαδξνκέο νη νπνίεο παξήρζεζαλ.
ηε δεχηεξε εληνιή ηνπ παξαδείγκαηνο, δεκηνπξγνχκε παξφκνηεο δηαδξνκέο, κφλν πνπ επηπιένλ
ππάξρεη ν πεξηνξηζκφο φηη ην δεχηεξν ηκήκα κνλνπαηηνχ μεθηλά απφ 'm". Έηζη, δελ ζα παξαρζεί ε δηαδξνκή
"/etc/ssl/openssl.cnf", ηεο νπνίαο ην δεχηεξν ηκήκα ζην κνλνπάηη δελ μεθηλά απφ "m", αιιά κφλν νη
δηαδξνκέο "/etc/mysql/debian.cnf" θαη "/etc/mysql/my.cnf".
ηόρνο
Δμνηθείσζε κε ηνλ ρεηξηζκφ αξρείσλ θαη θαηαιφγσλ κε ραξαθηήξεο κπαιαληέξ.
Άζθεζε 1
Γεκηνπξγήζηε ζηνλ ηξέρνληα θαηάινγν ηα παξαθάησ αξρεία:
94
touch hello.dat hello.doc hello.exe hello1.exe hello2.exe
Hello.dat Hello.exe helloA.exe helloAexe hello10.exe hello12.c
1. ls –l hello.dat hello[0-9].exe
2. ls –l *.exe
3. ls –l *exe
4. ls –l h*
5. ls –l H*
6. ls –l H*exe
7. ls –l hello[2-15].*
Άζθεζε 2
Γεκηνπξγήζηε έλα sub-directory θάησ απφ ην home directory ζαο κε φλνκα ηεο επηινγήο ζαο. ηε ζπλέρεηα
κέζα ζε απηφ ην sub-directory δεκηνπξγήζηε κε ηελ εληνιή touch ηα παξαθάησ αξρεία:
1. ls *
2. ls *[!0-9]
3. ls m[a-df-z]*
4. ls [A-Z]*
5. ls jan*
6. ls *.*
7. ls ?????
8. ls *02
9. ls jan?? feb?? mar??
10. ls [fjm][ae][bnr]*
11. echo jan*
12. ls –l jan*
13. echo january*
14. ls –l january*
Υξεζηκνπνηψληαο κπαιαληέξ εκθαλίζηε ηα αξρεία (κε ηελ ls) πνπ ην φλνκά ηνπο μεθηλάεη κε "memo"
θαη ζηε ζπλέρεηα έρνπλ έλαλ αξηζκφ απφ ην 3 έσο ην 20 (άξα, ζέινπκε λα εκθαληζηνχλ ηα νλφκαηα memo4,
memo10).
Ση παξαηεξείηε γηα ηηο εληνιέο (11)-(14);
Ση παξαηεξείηε θαηά ηελ εθηέιεζε ηεο (4);
95
Άζθεζε 3
Θεσξήζηε ηα αξρεία πνπ ππάξρνπλ ζηε 3ε ζηήιε ηνπ παξαθάησ πίλαθα. Πνηα απφ ηα νλφκαηα απηά
αληηζηνηρνχλ ζηελ αληίζηνηρε έθθξαζε πνπ ππάξρεη ζηελ 2ε ζηήιε;
Γεκηνπξγήζηε ηα παξαπάλσ αξρεία ζε θαηαιφγνπο ηεο επηινγήο ζαο θαη ειέγμηε πνηα απφ απηά ζα
αληηζηνηρεζνχλ ζε θάζε έθθξαζε ρξεζηκνπνηψληαο ηελ εληνιή echo. ηελ πεξίπησζε (4) γηα ην one/doit
ελλνείηαη φηη ην αξρείν doit βξίζθεηαη ζε έλαλ θαηάινγν κε ην φλνκα "one" (O θαηάινγνο "one" βξίζθεηαη
ζηνλ ηξέρνληα). Αληίζηνηρα θαη νη ππφινηπνη:
. .
├── gn ├── doit
│ └── x.1 ├── one
├── gn.1 │ └── doit
├── gneiss.1 ├── three
└── gnu.1 │ └── doit.h
└── two
└── doit.c
Άζθεζε 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 κε ηελ εληνιή:
96
Δλαιιαθηηθά, κπνξείηε λα θαηεβάζεηε ην
αξρείν: http://aetos.it.teithe.gr/~asidirop/OSIntroBook/OSIntro.tar.gz θαη λα ην απνζπκπηέζεηε κε ηελ εληνιή:
asidirop@antonis-PC:~$ cd /tmp
asidirop@antonis-PC:/tmp$ tar xvfz OSIntro.tar.gz
Σν tar θαη gunzip (πνπ είλαη ηα πξνγξάκκαηα ρεηξηζκνχ ησλ αξρείσλ tar θαη gz) πάληα εγθαζηζηψληαη
ζε έλα ζχζηεκα Unix/Linux, δηφηη απνηεινχλ ηελ παξαδνζηαθή κέζνδν γηα ζπκπίεζε θαη αληαιιαγή αξρείσλ
θαη θαθέισλ.
1. Γεκηνπξγήζηε κέζα ζην home directory ζαο έλαλ θαηάινγν κε φλνκα lab33. Γηα θάζε βήκα ηεο
παξνχζαο άζθεζεο λα δεκηνπξγείηε θαη έλαλ λέν ππνθαηάινγν ζηνλ lab33 (πρ: step3, step4, ...)
3. Απφ ηνλ παξαπάλσ θαηάινγν (Lab3_files), αληηγξάςηε ζηνλ step3, φια ηα αξρεία κε ηελ θαηάιεμε .txt
πνπ ην φλνκά ηνπο δελ μεθηλάεη απφ θεθαιαίν γξάκκα (KAI ηα αξρεία 3.txt θαη 8f.txt δελ μεθηλνχλ κε
θεθαιαίν γξάκκα).
4. Απφ ην παξαπάλσ δέληξν (Lab3_files) αληηγξάςηε ζηνλ step4 φια ηα αξρεία κε ηελ θαηάιεμε .txt πνπ
βξίζθνληαη ζε έλαλ ππνθαηάινγν πνπ ην φλνκά ηνπ μεθηλάεη απφ "d".
5. Απφ ηνλ παξαπάλσ θαηάινγν (Lab3_files) αληηγξάςηε ζηνλ step5 φια ηα αξρεία πνπ ην φλνκά ηνπο
μεθηλάεη κε "file", κεηά ππάξρεη θάπνηνο αξηζκφο (1 ή πεξηζζφηεξα αξηζκεηηθά ςεθία) θαη ηέινο ε
θαηάιεμε .txt
6. Απφ ηνλ παξαπάλσ θαηάινγν αληηγξάςηε ζηνλ step6 φια ηα αξρεία πνπ ην φλνκά ηνπο απνηειείηαη απφ
αθξηβψο 5 ραξαθηήξεο (file1, file2, ..)
7. Απφ ηνλ παξαπάλσ θαηάινγν αληηγξάςηε ζηνλ step7 ηα αξρεία file1 θαη file2. Κάληε cd ζηνλ step7.
Διέγμηε ηα πεξηερφκελα ηνπ θαη δείηε ηα πεξηερφκελα ηνπ θάζε αξρείνπ.
α) Γψζηε ηελ εληνιή:
cp *
Ση ζπλέβε; Γελ ζα έπξεπε ε εληνιή λα καο εκθαλίζεη κήλπκα ζθάικαηνο εθφζνλ δελ έρνπκε νξίζεη
θαηάινγν πξννξηζκνχ γηα ηελ αληηγξαθή;
β) Γψζηε ηελ εληνιή:
mv *
Ση ζπλέβε; Διέγμηε ηα πεξηερφκελα ηνπ θαηαιφγνπ θαη ησλ αξρείσλ.
γ) Γεκηνπξγήζηε έλαλ θαηάινγν (κέζα ζηνλ step7) κε ην φλνκα zip. Υσξίο λα αιιάμεηε θαηάινγν,
δψζηε ηελ εληνιή:
cp *
Ση ζπλέβε; Διέγμηε ηα πεξηερφκελα ηνπ θαηαιφγνπ θαη ησλ αξρείσλ.
4.5 Αλαθνξέο
[1] Brian Fox, Chet Ramey. GNU Bash, General Commands Manual.
[2] ISO/IEC 8859-1:1998 - 8-bit single-byte coded graphic character sets, Part 1: Latin alphabet No. 1
(draft dated February 12, 1998, published April 15, 1998)
[3] ISO/IEC 8859-7:1999 - 8-bit single-byte coded graphic character sets, Part 7: Latin/Greek alphabet
(draft dated June 10, 1999; superseded by ISO/IEC 8859-7:2003, published October 10, 2003)
[4] Joel Klecker, Alastair McKinstry. Debian GNU/Linux system, Reference Manual, locale command.
97
Κεθάιαην 5
Οη άδεηεο πξόζβαζεο γηα έλα αξρείν «νξίδνπλ» ηη κπνξεί λα γίλεη κε ηα πεξηερόκελα ηνπ
αξρείνπ.
Οη άδεηεο πξόζβαζεο γηα έλαλ θαηάινγν «νξίδνπλ» ηη κπνξεί λα γίλεη κε ηα πεξηερόκελα ηνπ
θαηαιόγνπ, παξαδείγκαηνο ράξηλ αλ κπνξεί ν ρξήζηεο λα πξνζζέζεη ή λα δηαγξάςεη αξρεία.
Όπσο θαίλεηαη ζην ρήκα 5.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
99
Ο ζπκβνιηζκφο ν νπνίνο αθνινπζείηαη γηα ηελ αλαπαξάζηαζε ησλ αδεηψλ ρξήζεο (κε ηνλ νπνίν
ζπκκνξθψλεηαη θαη ε εληνιή "ls -l") απνηειείηαη απφ ελλέα ραξαθηήξεο. Οπζηαζηηθά απηνί νη ελλέα
ραξαθηήξεο ρσξίδνληαη ζε ηξεηο ηξηάδεο ραξαθηήξσλ. Κάζε ηξηάδα αθνξά θαη δηαθνξεηηθφ “target” ζην νπνίν
αλαθέξεηαη. Έηζη (ρήκα 5.2):
1. Ζ πξψηε ηξηάδα αθνξά ηηο άδεηεο ρξήζεο πνπ έρνπλ νξηζηεί γηα ηνλ ηδηνθηήηε ηνπ αξρείνπ
(ζπκβνιίδεηαη σο “user”).
2. Ζ δεχηεξε ηξηάδα αθνξά ηηο άδεηεο ρξήζεο πνπ έρνπλ νξηζηεί γηα ηελ νκάδα ηδηνθηεζίαο ηνπ αξρείνπ
(ζπκβνιίδεηαη σο “group”).
3. Ζ ηξίηε ηξηάδα αθνξά φιεο ηηο ππφινηπεο πεξηπηψζεηο (ζπκβνιίδεηαη σο “others”).
rwx
Γηθαίσκα αλάγλσζεο (read) ζεκαίλεη φηη ν ρξήζηεο πνπ αλήθεη ζηε ζπγθεθξηκέλε νκάδα
δηθαησκάησλ έρεη ην δηθαίσκα λα δηαβάζεη ηα πεξηερφκελα ηνπ αξρείνπ.
Γηθαίσκα εγγξαθήο (write) ζεκαίλεη φηη ν ρξήζηεο πνπ αλήθεη ζηε ζπγθεθξηκέλε νκάδα
δηθαησκάησλ έρεη ην δηθαίσκα λα κεηαβάιεη ηα πεξηερφκελα ηνπ αξρείνπ.
Γηθαίσκα εθηέιεζεο (execute) ζεκαίλεη φηη ν ρξήζηεο πνπ αλήθεη ζηε ζπγθεθξηκέλε νκάδα
δηθαησκάησλ έρεη ην δηθαίσκα λα εθηειέζεη ην αξρείν, εθφζνλ βέβαηα ην αξρείν είλαη θαηάιιεινπ
ηχπνπ γηα εθηέιεζε (εθηειέζηκν δπαδηθφ ή ζελάξην - script).
Οη ζέζεηο ησλ γξακκάησλ είλαη ζπγθεθξηκέλεο. Όηαλ έρεη αθαηξεζεί ην αληίζηνηρν δηθαίσκα, ζηε
ζέζε ηνπ αληίζηνηρνπ γξάκκαηνο εκθαλίδεηαη κηα παχια “-”. Μεξηθά παξαδείγκαηα είλαη:
100
rwx: ν αληίζηνηρνο ρξήζηεο έρεη ηα δηθαηψκαηα read-write-execute.
r-x: ν αληίζηνηρνο ρξήζηεο έρεη ηα δηθαηψκαηα read-execute, αιιά φρη ην write.
r--: ν αληίζηνηρνο ρξήζηεο έρεη ην δηθαίσκα read, αιιά φρη ηα write θαη execute.
-w-: ν αληίζηνηρνο ρξήζηεο έρεη ην δηθαίσκα write, αιιά φρη ηα read θαη execute !!!
ην ρήκα 5.4 παξνπζηάδεηαη έλα παξάδεηγκα. Οη παξαθάησ ζπκβνιηζκνί ζεκαίλνπλ πσο:
Σα δηθαηψκαηα απηά ζπλήζσο δελ παξέρνληαη θαη θπξίσο ρξεζηκνπνηνχληαη γηα ζπγθεθξηκέλεο
πεξηπηψζεηο:
sticky bit ζε θαηάινγν: Δάλ ζηνλ θαηάινγν έρνπλ δηθαίσκα εγγξαθήο-αλάγλσζεο πνιινί ρξήζηεο,
ηφηε έλαο ρξήζηεο κπνξεί λα δηαγξάςεη ηα αξρεία άιινπ. Δάλ ζηνλ θαηάινγν ππάξρεη ην sticky bit,
ηφηε ε πξφζβαζε ηνπ ρξήζηε πεξηνξίδεηαη κφλν ζηα αξρεία ησλ νπνίσλ είλαη ηδηνθηήηεο. Κιαζζηθφ
παξάδεηγκα είλαη ν θάθεινο /tmp. Όπσο θαίλεηαη παξαθάησ ζηελ πεξίπησζε ηνπ /tmp, ν ραξαθηήξαο
"t" εκθαλίδεηαη «επάλσ» απφ ην ηειεπηαίν "x" θαη ελλνείηαη φηη θαη ην "x" γηα ηνπο ππφινηπνπο
ρξήζηεο (others) είλαη ελεξγνπνηεκέλν.
asidirop@aetos:~$ ls -l /
total 101
drwxr-xr-x 2 root root 4096 Dec 16 04:01 bin
drwxr-xr-x 4 root root 1024 Feb 19 04:29 boot
drwxr-xr-x 12 root root 3000 Mar 11 11:30 dev
drwxr-xr-x 122 root root 12288 Mar 18 15:42 etc
drwxr-xr-x 5 root root 4096 Feb 3 2014 home
lrwxrwxrwx 1 root root 30 Jan 31 2014 initrd.img ->
boot/initrd.img-2.6.32-5-amd64
drwxr-xr-x 12 root root 12288 Mar 7 04:30 lib
101
drwxr-xr-x 4 root root 12288 Mar 7 04:30 lib32
lrwxrwxrwx 1 root root 4 Jan 31 2014 lib64 -> /lib
drwx------ 2 root root 16384 Jan 31 2014 lost+found
drwxr-xr-x 3 root root 4096 Jan 31 2014 media
drwxr-xr-x 8 root root 4096 Feb 3 2014 mnt
drwxr-xr-x 2 root root 4096 Jan 31 2014 opt
dr-xr-xr-x 482 root root 0 Feb 20 01:09 proc
drwxr-x--- 14 root root 4096 Mar 18 13:30 root
drwxr-xr-x 2 root root 4096 Mar 7 04:30 sbin
drwxr-xr-x 2 root root 4096 Jul 21 2010 selinux
drwxr-xr-x 3 root root 4096 Jan 31 2014 srv
drwxr-xr-x 13 root root 0 Feb 20 01:09 sys
drwxrwxrwt 22 root root 4096 Mar 19 17:11 tmp
drwxr-xr-x 12 root root 4096 Feb 3 2014 usr
drwxr-xr-x 18 root root 4096 Feb 5 2014 var
lrwxrwxrwx 1 root root 27 Jan 31 2014 vmlinuz ->
boot/vmlinuz-2.6.32-5-amd64
ε πξνγξάκκαηα ηνπ ζπζηήκαηνο, φηαλ ππάξρεη ην setuid, ηφηε ε δηεξγαζία πνπ πξνέξρεηαη απφ ην
πξφγξακκα έρεη ην δηθαίσκα λα αιιάμεη ηδηνθηήηε. Όηαλ έλαο ρξήζηεο εθηειεί έλα πξφγξακκα, ηφηε
ε δηεξγαζία πνπ πξνθχπηεη έρεη σο ηδηνθηήηε ηνλ ζπγθεθξηκέλν ρξήζηε, άξα θαη ηα δηθαηψκαηα θαη
ηηο άδεηεο ηνπ ρξήζηε. Αλ φκσο ην πξφγξακκα πνπ εθηειέζηεθε έρεη ην setuid, ηφηε ε δηεξγαζία έρεη
ην δηθαίσκα λα αιιάμεη ηδηνθηήηε, π.ρ. λα γίλεη root, άξα θαη ε δηεξγαζία απνθηά φιεο ηηο άδεηεο θαη
ηα δηθαηψκαηα ηνπ ρξήζηε root. Γηα λα ζπκβεί απηφ, βέβαηα, πξέπεη λα ζπλδπάδνληαη αξθεηέο
ζπλζήθεο. Παξφια απηά, ε δπλαηφηεηα απηή είλαη έλα ιεπηφ ζεκείν ζηνλ ηνκέα αζθάιεηαο ηνπ
UNIX, γηα απηφ θαη ππάξρνπλ πνιιέο δηθιείδεο πξνζηαζίαο, παξάδεηγκα νη εμσηεξηθνί ή δηθηπαθνί
δίζθνη νξίδνληαη σο “nosuid”. Απηφ ζεκαίλεη φηη αθφκε θαη αλ έλα πξφγξακκα είλαη καξθαξηζκέλν
σο “setuid”, απηή ε ζήκαλζε ζα αγλνεζεί απφ ην ιεηηνπξγηθφ.
Αληίζηνηρα, ζε πξνγξάκκαηα πνπ έρνπλ ηελ άδεηα “setgid”, πνπ ζπκβνιίδεηαη κε “S”, ε δηεξγαζία
πνπ πξνθχπηεη κε ηελ εθηέιεζε απηψλ ησλ πξνγξακκάησλ έρεη ην δηθαίσκα λα αιιάμεη ηελ νκάδα
ηδηνθηεζίαο ηεο (παξάδεηγκα λα ζέζεη σο νκάδα ην “mail” θαη λα έρεη ην δηθαίσκα λα δηαβάζεη
δεδνκέλα απφ ηα αξρεία ηεο ππεξεζίαο ειεθηξνληθνχ ηαρπδξνκείνπ).
Κάζε bit αληηζηνηρεί θαη ζε έλα δηθαίσκα. Όηαλ ππάξρεη ην δηθαίσκα, ηφηε ην αληίζηνηρν bit είλαη "1".
Όηαλ έρεη αθαηξεζεί ην δηθαίσκα, ηφηε ην αληίζηνηρν bit είλαη "0". Δπεηδή ε ρξήζε ηνπ δπαδηθνχ ζπζηήκαηνο
απφ ηνπο ρξήζηεο είλαη δχζθνιε, θαη επίζεο ε κεηαηξνπή ησλ ηεζζάξσλ ηξηάδσλ απφ bits ζε δεθαδηθφ
102
ζχζηεκα είλαη επίζεο δχζθνιε, γηα ηελ αλαπαξάζηαζε απηψλ ησλ 12 bits ρξεζηκνπνηείηαη πάληα ην νθηαδηθφ
ζχζηεκα. Έηζη, θάζε νκάδα δηθαησκάησλ (3 bits) αληηζηνηρεί ζε έλα νθηαδηθφ ςεθίν. Ζ πξνθαλήο
αληηζηνηρία δπαδηθνχ κε νθηαδηθφ αξηζκφ θαίλεηαη ζηνλ Πίλαθα 5.1. Σν κνλφ νθηαδηθφ ςεθίν ζπκπίπηεη κε
ην δεθαδηθφ, δειαδή ην "5" ζε νθηαδηθφ είλαη ίζν κε ην "5" ζε δεθαδηθφ. Όκσο ην "15" ζε νθηαδηθφ δελ είλαη
ίζν κε "15" ζε δεθαδηθφ, αιιά ίζν κε "13".
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 ζηε δεχηεξε ζηήιε ηνπ πίλαθα.
Γηθαίσκα αλάγλσζεο (read) ζεκαίλεη φηη ν ρξήζηεο πνπ αλήθεη ζηελ ζπγθεθξηκέλε νκάδα
δηθαησκάησλ έρεη ην δηθαίσκα λα δηαβάζεη ηα πεξηερφκελα ηνπ αξρείνπ.
Γηθαίσκα εγγξαθήο (write) ζεκαίλεη φηη ν ρξήζηεο πνπ αλήθεη ζηελ ζπγθεθξηκέλε νκάδα
δηθαησκάησλ έρεη ην δηθαίσκα λα κεηαβάιεη ηα πεξηερφκελα ηνπ αξρείνπ.
Γηθαίσκα εθηέιεζεο (execute) ζεκαίλεη φηη ν ρξήζηεο πνπ αλήθεη ζηελ ζπγθεθξηκέλε νκάδα
δηθαησκάησλ έρεη ην δηθαίσκα λα εθηειέζεη ην αξρείν - εθφζνλ βέβαηα ην αξρείν είλαη θαηάιιεινπ
ηχπνπ γηα εθηέιεζε (εθηειέζηκν δπαδηθφ ή ζελάξην - script).
103
Όκσο γηα ηελ πεξίπησζε ησλ θαηαιφγσλ δελ είλαη πξνθαλέο. Γηα λα θαηαλνήζνπκε θαιχηεξα ηελ
ρξήζε ησλ δηθαησκάησλ ζε θαηαιφγνπο ζα πξέπεη λα κειεηήζνπκε ιίγν ηελ εζσηεξηθή δνκή ελφο θαηαιφγνπ.
Όηαλ ινηπφλ ν ρξήζηεο δίλεη ηελ εληνιή: cat file1, ηφηε ν ππξήλαο, γηα λα βξεη ηα πεξηερφκελα
ηνπ file1, πξψηα απ' φια ςάρλεη ζηνλ θαηάινγν λα βξεη αλ ππάξρεη φλησο αξρείν κε ην φλνκα file1. Αλ
λαη, ηφηε δηαβάδεη απφ πνην i-node ζα βξεη πιεξνθνξίεο γηα ην αξρείν. Αθνχ «δεη» φηη ην file1 αληηζηνηρεί
ζην i-node "134289167", ηφηε αλνίγεη ηνλ πίλαθα ησλ i-nodes θαη δηαβάδεη ην i-node ζηε ζέζε 134289167 ηνπ
πίλαθα. Με απηφλ ηνλ ηξφπν, έρεη δηαβάζεη ηηο πιεξνθνξίεο πνπ αθνξνχλ ην αξρείν. Μέζα ζ’ απηέο ηηο
πιεξνθνξίεο είλαη θαη ε πιεξνθνξία ζε πνηα blocks ηνπ δίζθνπ βξίζθνληαη ηα δεδνκέλα ηνπ αξρείνπ.
Γηαβάδεη ηα ζπγθεθξηκέλα κπινθ θαη «δίλεη» ηα δεδνκέλα ζηε δηεξγαζία ηεο εληνιήο cat. Έηζη,
ε cat θαηάθεξε λα δηαβάζεη ηα δεδνκέλα ηνπ file1 θαη έπεηηα λα ηα εθηππψζεη ζην ηεξκαηηθφ.
Όηαλ, ινηπφλ, δεκηνπξγείηαη έλα αξρείν, πξέπεη λα γξαθηεί ζην αξρείν ηνπ θαηαιφγνπ κηα λέα
γξακκή πνπ ζα αθνξά ην λέν αξρείν. Όηαλ δηαγξάθεηαη απφ έλαλ θαηάινγν έλα αξρείν, ηφηε ζηελ
πξαγκαηηθφηεηα δηαγξάθεηαη ε γξακκή πνπ αθνξά ην αξρείν απφ ηνλ πίλαθα πνπ δηαηεξείηαη ζηνλ θαηάινγν.
Αο ζεσξήζνπκε φηη ν θάζε θαηάινγνο πεξηέρεη απηφλ ηνλ δίζηειν πίλαθα φπσο θαίλεηαη
ζηνλ Πίλαθα 5.3.
Σν δηθαίσκα “read” δίλεη ηε δπλαηφηεηα λα «δηαβάζνπκε» ηα νλφκαηα αξρείσλ ηνπ θαηαιφγνπ απφ
ηελ πξψηε ζηήιε ηνπ πίλαθα.
Σν δηθαίσκα “write” δίλεη ηε δπλαηφηεηα λα «κεηαβάινπκε» ηα πεξηερφκελα ηνπ θαηαιφγνπ, δειαδή
λα πξνζζέζνπκε ή λα αθαηξέζνπκε γξακκέο ζηνλ πίλαθα.
104
Σν δηθαίσκα “execute” δίλεη ηε δπλαηφηεηα λα «δηαβάζνπκε» ηα i-node numbers ησλ αξρείσλ,
δειαδή, φπσο θαίλεηαη ζρεκαηηθά, λα δηαβαζηεί ε δεχηεξε ζηήιε ηνπ πίλαθα. Δπίζεο, γηα λα κπνξεί
έλαο ρξήζηεο λα θάλεη "cd" ζε έλαλ θαηάινγν, πξέπεη λα έρεη θαη δηθαίσκα “execute” ζηνλ
θαηάινγν.
Γηαγξαθή αξρείνπ ή θαηαιόγνπ: Πξέπεη λα έρσ “w” θαη “x” ζηνλ θαηάινγν κέζα ζηνλ νπνίν
βξίζθεηαη ην αξρείν πξνο δηαγξαθή, δηφηη:
o Πξέπεη λα δηαβάζεη ν ππξήλαο ην i-node ηνπ αξρείνπ, ψζηε λα ην καξθάξεη σο ειεχζεξν.
πλεπψο, απαηηείηαη ην “x” ζηνλ θαηάινγν.
o Πξέπεη λα κεηαβιεζνχλ ηα πεξηερφκελα ηνπ θαηαιφγνπ. πλεπψο, απαηηείηαη ην “w” ζηνλ
θαηάινγν.
o Γελ επεξεάδνπλ ηα δηθαηψκαηα ηνπ αξρείνπ πνπ ζα ζβήζσ, δηφηη δελ ζα
δηαβαζηνχλ/κεηαβιεζνχλ ηα πεξηερφκελα ηνπ αξρείνπ. πλεπψο, δελ ρξεηάδεηαη λα έρσ “w” ή
“r” γηα ην αξρείν.
Γεκηνπξγία αξρείνπ ή θαηαιόγνπ: Πξέπεη λα έρσ “w” θαη “x” ζηνλ θαηάινγν.
Δκθάληζε νλνκάησλ αξρείσλ: Πξέπεη λα έρσ “r” ζηνλ θαηάινγν, γηα λα δσ ηα νλφκαηα αξρείσλ.
Δκθάληζε πιεξνθνξηώλ αξρείσλ (πρ. κε ηελ ls –l): Πξέπεη λα έρσ “r” θαη “x” ζηνλ θαηάινγν.
cd ζηνλ θαηάινγν: Πξέπεη λα έρσ “x” ζηνλ θαηάινγν.
Μπνξνχκε ζηελ εληνιή λα δψζνπκε σο φξηζκα έλα ή πεξηζζφηεξα νλφκαηα αξρείσλ. Σα νλφκαηα
αξρείσλ πξέπεη λα είλαη ηα ηειεπηαία νξίζκαηα ζηελ εληνιή. Πξνθαλψο κπνξνχλ λα ρξεζηκνπνηεζνχλ θαη
ραξαθηήξεο κπαιαληέξ. Ζ εληνιή αλαγλσξίδεη ηα δηθαηψκαηα κε δπν ηξφπνπο. Δίηε κπνξεί λα ρξεζηκνπνηεζεί
ν ηεηξαςήθηνο νθηαδηθφο αξηζκφο, είηε θάπνηα ζχκβνια πνπ ζα εμεγήζνπκε παξαθάησ. Όηαλ ζηνλ νθηαδηθφ
αξηζκφ παξαιείπνληαη θάπνηα ςεθία, ηφηε ελλνείηαη φηη αληηζηνηρνχλ ζην κεδέλ. ην παξαθάησ παξάδεηγκα,
νη εληνιέο αλά δπν είλαη ηζνδχλακεο.
Γηα ηνπο ρξήζηεο πνπ δελ ηα πάλε θαιά κε ηνπο αξηζκνχο, ε chmod κπνξεί λα θαηαιάβεη κηα ζεηξά
απφ ζχκβνια πνπ παξνπζηάδνληαη ζηνλ Πίλαθα 5.4:
105
Πίλαθαο 5.4: ύκβνια πνπ ρξεζηκνπνηνύληαη ζηελ εληνιή chmod
ύκβνιν εκαζία
+ πξφζζεζε ηα δηθαηψκαηα πνπ αθνινπζνχλ
- αθαίξεζε ηα δηθαηψκαηα πνπ αθνινπζνχλ
= ζέζε αθξηβψο ηα δηθαηψκαηα πνπ αθνινπζνχλ
r δηθαίσκα read
w δηθαίσκα write
x δηθαίσκα execute
u user - ηδηνθηήηεο ηνπ αξρείνπ
g group - νκάδα ηνπ αξρείνπ
ν others - ππφινηπνη ρξήζηεο
a all - φιεο νη νκάδεο ρξεζηψλ
, δηαρσξηζηήο
ζα ζέζεη ζην αξρείν αξρηθά ηα δηθαηψκαηα "r--r--r--" θαη κεηά ζα πξνζζέζεη "wx" ζηνλ
ηδηνθηήηε. πλεπψο, ην ηειηθφ απνηέιεζκα ζα είλαη: "rwxr--r--".
Όηαλ ρξεζηκνπνηνχληαη νη ελέξγεηεο +/-, ηφηε ηα δηθαηψκαηα πνπ πξνθχπηνπλ ηειηθά εμαξηψληαη θαη
απφ ηα δηθαηψκαηα πνπ ππήξραλ πξηλ.
Σν + πξνζζέηεη ζηα ήδε ππάξρνληα δηθαηψκαηα. Πξνθαλψο, αλ ππάξρεη ήδε ην δηθαίσκα, δελ
πξνζζέηεη θάηη.
Σν - αθαηξεί απφ ηα ππάξρνληα. Πξνθαλψο, αλ δελ ππάξρεη ην δηθαίσκα, δελ κπνξεί λα ην αθαηξέζεη.
106
Έζησ ην file1 έρεη αξρηθά ηα δηθαηψκαηα: "r-xr-xr--". Ζ παξαπάλσ εληνιή ζα πξνζζέζεη ζηνλ
ηδηνθηήηε θαη ζηελ νκάδα ην "w". πλεπψο, ηα ηειηθά δηθαηψκαηα πνπ ζα απνθηήζεη ην αξρείν ζα
είλαη: "rwxrwxr--".
Άλ ην file1 είρε αξρηθά ηα δηθαηψκαηα: "rw-r-----", ε ίδηα εληνιή ζα πξνζζέζεη κφλν ζηελ
νκάδα ην "w", δηφηη ν ηδηνθηήηεο ην έρεη ήδε. πλεπψο, ηα ηειηθά δηθαηψκαηα πνπ ζα απνθηήζεη ην αξρείν ζα
είλαη: "rw-rw----".
Υξήζηκν φξηζκα-ζεκαία ζηελ εληνιή chmod είλαη ην "-R" (recursively). Απηή ε ζεκαία νδεγεί ηελ
εληνιή λα εθαξκφζεη ηηο αιιαγέο ζηα δηθαηψκαηα αλαδξνκηθά ζε νιφθιεξε ηελ ηεξαξρία θαηαιφγσλ.
Πξνθαλψο, έρεη λφεκα, φηαλ έλα απφ ηα νξίζκαηά ηεο είλαη θαηάινγνο. Δδψ λα θάλνπκε ηελ παξαηήξεζε φηη
νη πεξηζζφηεξεο εληνιέο (πρ νη cp, rm θ.ά.) δέρνληαη ηε ζεκαία «αλαδξνκηθά» κε κηθξφ "-r". Γηα
ηελ chmod, φκσο, ην "-r" ζεκαίλεη αθαίξεζε ηνπ δηθαηψκαηνο “read”. πλεπψο, γηα λα κελ ππάξρεη
ζχγρπζε, ε chmod δέρεηαη ηε ζεκαία «αλαδξνκηθά» σο"-R".
rwxrwxrwx (0777)
.
Όηαλ δεκηνπξγείηαη έλα αξρείν, ηφηε θαη απηφ απνθηά φια ηα δηθαηψκαηα εθηφο απφ ην δηθαίσκα
εθηέιεζεο:
rw-rw-rw- (0666)
.
Σν δηθαίσκα εθηέιεζεο απνπζηάδεη απφ ηα αξρεία γηα ιφγνπο αζθάιεηαο. Δπίζεο, ην κεγαιχηεξν
πνζνζηφ αξρείσλ πνπ ππάξρνπλ ζε έλαλ ππνινγηζηή δελ είλαη πξνγξάκκαηα ψζηε λα εθηειεζηνχλ, αιιά
δεδνκέλα (εηθφλεο, βίληεν, θείκελν, θηι.). Μηα εγθαηάζηαζε ελφο παθέηνπ-πξνγξάκκαηνο, ζπλήζσο
πεξηιακβάλεη ηε δεκηνπξγία δπν-ηξηψλ εθηειέζηκσλ αξρείσλ θαη κεξηθψλ δεθάδσλ (ή θαη ρηιηάδσλ)
βνεζεηηθψλ αξρείσλ.
Όκσο ην παξαπάλσ είλαη απηναλαηξνχκελν. Απφ ηε κηα απνπζηάδεη ην δηθαίσκα εθηέιεζεο απφ ηα
αξρεία γηα ιφγνπο αζθαιείαο - ην νπνίν ζεκαίλεη φηη δίλεηαη ηδηαίηεξε βαξχηεηα ζηελ αζθάιεηα - θαη απφ ηελ
άιιε κε ηε δεκηνπξγία ελφο αξρείνπ κπνξνχλ λα ην κεηαβάιινπλ φινη νη ρξήζηεο, δηφηη φινη νη ρξήζηεο ζα
έρνπλ ην δηθαίσκα εγγξαθήο ("w").
Πξνθαλψο, θάηη ηέηνην δελ είλαη πξαθηηθφ, δηφηη θάζε θνξά πνπ έλαο ρξήζηεο δεκηνπξγεί έλα αξρείν
ζα πξέπεη λα ην θιεηδψλεη ακέζσο κεηά. Απφ ηελ άιιε, ζην ρξνληθφ δηάζηεκα πνπ ζα κεζνιαβήζεη απφ ηε
ζηηγκή δεκηνπξγίαο ηνπ αξρείνπ κέρξη ηε ζηηγκή «θιεηδψκαηνο» ηνπ αξρείνπ, κπνξεί θάπνηνο άιινο ρξήζηεο
λα πξνιάβεη λα κεηαβάιεη ή λα δηαβάζεη ηα δεδνκέλα ηνπ. πλεπψο, εδψ ην ζχζηεκα κνηάδεη λα πάζρεη ζην
ζέκα ηεο αζθάιεηαο.
Τπάξρεη κηα κεηαβιεηή ηνπ ζπζηήκαηνο (ε νπνία νξίδεηαη αλά δηεξγαζία) θαη πεξηέρεη ηελ
πιεξνθνξία πνηα δηθαηψκαηα ζα αθαηξνχληαη απηφκαηα απφ ηα αξρεία θαη ηνπο θαηαιφγνπο πνπ ζα
δεκηνπξγήζεη έλαο ρξήζηεο. Απηή ε κεηαβιεηή νλνκάδεηαη umask θαη ν ρεηξηζκφο ηεο γίλεηαη κε ηελ
νκψλπκε εληνιή [1, 4]. Γηα ηελ αλαπαξάζηαζε ηνπ αξηζκνχ umask ρξεζηκνπνηνχληαη 4 νθηαδηθά ςεθία (12
bits). Σν πξψην νθηαδηθφ ςεθίν δελ έρεη λφεκα λα έρεη ηηκή δηαθνξεηηθή απφ ην κεδέλ, δηφηη έηζη θη αιιηψο
ηα δηθαηψκαηα sSt δελ δίλνληαη ζε θακία πεξίπησζε εμαξρήο. Γηα ιφγνπο, φκσο, νκνηνκνξθίαο
ρξεζηκνπνηνχληαη ζπλήζσο ηέζζεξα ςεθία αληί ησλ ηξηψλ πνπ απαηηνχληαη.
Ζ εληνιή umask ρσξίο νξίζκαηα εκθαλίδεη ηελ ηηκή ηεο κάζθαο δηθαησκάησλ (umask). Ζ εληνιή
umask κε φξηζκα έλαλ νθηαδηθφ αξηζκφ ζέηεη λέα ηηκή ζηε κάζθα δηθαησκάησλ.
107
asidirop@antonis-PC:~/tmp/test$ umask
0022
asidirop@antonis-PC:~/tmp/test$ umask 777
asidirop@antonis-PC:~/tmp/test$ umask
0777
asidirop@antonis-PC:~/tmp/test$ touch file1
asidirop@antonis-PC:~/tmp/test$ ls -l
total 0
---------- 1 asidirop asidirop 0 Mar 21 20:15 file1
asidirop@antonis-PC:~/tmp/test$ umask 055
asidirop@antonis-PC:~/tmp/test$ touch file2
asidirop@antonis-PC:~/tmp/test$ ls -l
total 0
---------- 1 asidirop asidirop 0 Mar 21 20:15 file1
-rw--w--w- 1 asidirop asidirop 0 Mar 21 20:15 file2
asidirop@antonis-PC:~/tmp/test$ umask 044
asidirop@antonis-PC:~/tmp/test$ touch file3
asidirop@antonis-PC:~/tmp/test$ ls -l
total 0
---------- 1 asidirop asidirop 0 Mar 21 20:15 file1
-rw--w--w- 1 asidirop asidirop 0 Mar 21 20:15 file2
-rw--w--w- 1 asidirop asidirop 0 Mar 21 20:55 file3
asidirop@antonis-PC:~/tmp/test$ umask 022
asidirop@antonis-PC:~/tmp/test$ touch file4
asidirop@antonis-PC:~/tmp/test$ ls -l
total 0
---------- 1 asidirop asidirop 0 Mar 21 20:15 file1
-rw--w--w- 1 asidirop asidirop 0 Mar 21 20:15 file2
-rw--w--w- 1 asidirop asidirop 0 Mar 21 20:55 file3
-rw-r--r-- 1 asidirop asidirop 0 Mar 21 20:55 file4
asidirop@antonis-PC:~/tmp/test$
ην παξαπάλσ παξάδεηγκα αθνινπζίαο εληνιψλ, αξρηθά εκθαλίδνπκε ηελ ηηκή ηεο umask ε νπνία
είλαη 0022. Με ηελ επφκελε εληνιή, ζέηνπκε ηελ umask ζε 777 θαη επηβεβαηψλνπκε φηη ηέζεθε ε ζσζηή ηηκή.
Δδψ παξαηεξνχκε φηη παξφηη ρξεζηκνπνηήζακε ηξία ςεθία θαηά ηνλ νξηζκφ ηηκήο, θαηά ηελ εκθάληζε
ρξεζηκνπνηνχληαη ηέζζεξα. Θέηνληαο ηελ umask ζε 777 ζεκαίλεη φηη ζα αθαηξνχληαη φια ηα δηθαηψκαηα απφ
ηα αξρεία πνπ ζα δεκηνπξγήζνπκε απφ εδψ θαη ζην εμήο (ρήκα 5.7). Με ηελ επφκελε εληνιή δεκηνπξγνχκε
ην αξρείν "file1" θαη κε ηελ "ls -l" επηβεβαηψλνπκε φηη απφ απηφ ην αξρείν έρνπλ αθαηξεζεί θαηά ηε
δεκηνπξγία ηνπ φια ηα δηθαηψκαηα.
Έπεηηα, ζέηνπκε ηελ umask ζε 055. Απηφ ζεκαίλεη φηη απφ ηνλ ηδηνθηήηε δελ ζα αθαηξείηαη θαλέλα
δηθαίσκα. Απφ ηελ "νκάδα" φκσο θαη απφ ηνπο "ππφινηπνπο" ζα αθαηξνχληαη ηα δηθαηψκαηα "r" θαη "x"
(ρήκα 5.7).
Όκσο, αθνχ δεκηνπξγήζνπκε ην αξρείν file2 θαη αλακέλνπκε απφ ηνλ ηδηνθηήηε λα κελ έρεη
αθαηξεζεί θαλέλα δηθαίσκα, παξαηεξνχκε (κε ηελ ls -l) φηη ην file2 δελ έρεη ζηνλ ηδηνθηήηε ην “x”. Απηφ
ζπλέβε, δηφηη, φπσο αλαθέξακε λσξίηεξα, φηαλ δεκηνπξγνχληαη αξρεία, δελ κπαίλεη ην δηθαίσκα “x”. ηελ
νπζία, ινηπφλ, αθφκε θαη αλ δελ είρακε νξίζεη λα αθαηξείηαη ην “x” απφ ηνπο «ππφινηπνπο» θαη ηελ νκάδα,
απηφ έηζη θη αιιηψο δελ ζα ππήξρε. Απηφ ην απνδεηθλχνπκε κε ηελ επφκελε εληνιή, θαηά ηελ νπνία ζέηνπκε
ην umask 044. Απηφ ζεκαίλεη φηη απφ ηελ «νκάδα» θαη ηνπο «ππνινίπνπο» ζα αθαηξείηαη ην δηθαίσκα “r”.
Γεκηνπξγψληαο ην αξρείν “file3” βιέπνπκε φηη ηειηθά θαη ην file3 (πνπ δεκηνπξγήζεθε κε umask 044) θαη ην
file2 (πνπ δεκηνπξγήζεθε κε umask 055) έρνπλ ηειηθά ηα ίδηα δηθαηψκαηα. Άξα, ηειηθά έρεη λφεκα ην
ηειεπηαίν bit (“x”) ζην umask; Θα δψζνπκε ηελ απάληεζε ζην επφκελν παξάδεηγκα. Σέινο, επαλαθέξνπκε ην
umask ζηελ ηηκή 022, ε νπνία είλαη κηα ζπλεζηζκέλε ηηκή γηα umask (φπσο θαη ε 077).
108
umask 777 umask 055
0 7 7 7 0 0 5 5
0 0 4 4 0 0 2 2
Σν επφκελν πείξακά καο είλαη κε ηελ επίδξαζε ηεο umask θαηά ηε δεκηνπξγία θαηαιφγσλ.
Δπαλαιακβάλνπκε αθξηβψο ηηο ίδηεο ηηκέο κε ην πξνεγνχκελν παξάδεηγκα, αιιά απηή ηε θνξά δεκηνπξγνχκε
θαηαιφγνπο αληί αξρείσλ.
109
drwxr-xr-x 2 asidirop asidirop 4096 Mar 22 21:13 dir4
asidirop@antonis-PC:~/tmp/test$
Ζ πξψηε ηηκή ζηελ umask (777), αθνχ δεκηνπξγήζνπκε ηνλ θαηάινγν dir1, έρεη ην ίδην απνηέιεζκα
κε ηελ πεξίπησζε δεκηνπξγίαο αξρείσλ. Γειαδή ην dir1 δελ ζα έρεη θαλέλα δηθαίσκα ελεξγνπνηεκέλν. Ζ
δεχηεξε ηηκή ηεο umask (055) έρεη θαη απηή ηελ ίδηα επίδξαζε ζηνλ θαηάινγνdir2 κε ην αξρείν file2.
Απφ ηνλ θαηάινγν αθαηξνχληαη ηα δηθαηψκαηα “r” θαη “x” απφ ηελ νκάδα θαη ηνπο ππνινίπνπο. Ζ ηξίηε φκσο
πεξίπησζε, δειαδή ε ηηκή (044) δελ έρεη ηελ ίδηα επίδξαζε ζηνλ θαηάινγν dir3 κε ην αξρείν file3.
Αξρηθά 0 7 7 7 Αξρηθά 0 7 7 7
- 0 7 7 7 - 0 0 5 5
= 0 0 0 0 = 0 7 2 2
Αξρηθά 0 7 7 7 Αξρηθά 0 7 7 7
- 0 0 4 4 - 0 0 2 2
= 0 7 3 3 = 0 7 5 5
ρήκα 5.8: Παξάδεηγκα ππνινγηζκνύ επίδξαζεο ηεο umask ζηε δεκηνπξγία θαηαιόγσλ.
110
Ο θαηάινγνο dir3 παίξλεη ηα δηθαηψκαηα “w” θαη “x” ζηελ νκάδα θαη ζηνπο ππνινίπνπο, ελψ
ην file3 είρε κφλν ην δηθαίσκα “w”. ε απηήλ ηελ πεξίπησζε βιέπνπκε ηε δηαθνξά ηεο επίδξαζεο ρξήζεο
ηεο ηηκήο (055) κε ηελ ηηκή (044), θάηη ην νπνίν δελ ίζρπε ζηελ πεξίπησζε ησλ θαηαιφγσλ. Σέινο, ε ηηκή
(022) δίλεη δηαθνξεηηθά δηθαηψκαηα ζηνλ θαηάινγν dir4 απ’ φηη ζην αξρείν file4.
Απαηηείηαη πξνζνρή ζηελ εθηίκεζε ηεο επίδξαζεο κηαο ηηκήο ηεο umask ζηηο πεξηπηψζεηο ησλ
αξρείσλ θαη θαηαιφγσλ. ηελ πεξίπησζε ησλ θαηαιφγσλ, ηα δηθαηψκαηα πνπ πξνθχπηνπλ σο απνηέιεζκα
κπνξνχλ λα ππνινγηζηνχλ θάλνληαο κηα απιή αθαίξεζε ζην νθηαδηθφ ζχζηεκα ηεο ηηκήο ηεο umask απφ ηελ
ηηκή 777 (ρήκα 5.8).
Αληηζέησο φκσο, ζηελ πεξίπησζε ησλ αξρείσλ, ε αθαίξεζε απφ ην (666) δελ ζα δψζεη ζε φιεο ηηο
πεξηπηψζεηο ηα ζσζηά απνηειέζκαηα. Όπσο δείρλνπκε ζην ρήκα 5.9, κφλν δπν ζηηο ηέζζεξηο πεξηπηψζεηο
καο δίλεη ζην ζσζηφ απνηέιεζκα.
Αξρηθά 0 6 6 6 Αξρηθά 0 6 6 6
- 0 7 7 7 - 0 0 5 5
= - 1 1 1 = 0 6 1 1
Αξρηθά 0 6 6 6 Αξρηθά 0 6 6 6
- 0 0 4 4 - 0 0 2 2
= 0 6 2 2 = 0 6 4 4
ρήκα 5.9: Παξάδεηγκα ιάζνπο ππνινγηζκώλ επίδξαζεο ηεο umask ζηε δεκηνπξγία αξρείσλ.
Ζ θαιχηεξε κέζνδνο είλαη λα ππνινγίδνπκε ηελ αθαίξεζε κε βάζε ηα δηθαηψκαηα. Απηφ ζα καο
δψζεη ην ζσζηφ απνηέιεζκα ζηελ πεξίπησζε ησλ θαηαιφγσλ αιιά θαη ζηελ πεξίπησζε ησλ αξρείσλ.
111
ην ρήκα 5.10 παξνπζηάδνπκε ηνλ ηξφπν ππνινγηζκνχ πνπ πξέπεη λα έρνπκε ζην κπαιφ καο. Φπζηθά, κε
ηελ εθπαίδεπζε θαη ηελ εκπεηξία φινη νη παξαθάησ ππνινγηζκνί πξαγκαηνπνηνχληαη ζρεδφλ απηφκαηα θαη
αζπλαίζζεηα.
Αξρηθά --- rwx rwx rwx Αξρηθά --- rw- rw- rw-
0 0 0 0 0 0
Αξρηθά --- rwx rwx rwx Αξρηθά --- rw- rw- rw-
7 2 2 6 2 2
Σχήμα 5.10(α): Παράδειγμα ςωςτών υπολογιςμών επίδραςησ τησ umask ςτη δημιουργία αρχείων και
καταλόγων.
112
umask 044 (γηα θαηαιόγνπο) umask 044 (γηα αξρεία)
Αξρηθά --- rwx rwx rwx Αξρηθά --- rw- rw- rw-
7 3 3 6 2 2
Αξρηθά --- rwx rwx rwx Αξρηθά --- rw- rw- rw-
7 5 5 6 4 4
Σχήμα 5.10(β): Παράδειγμα ςωςτών υπολογιςμών επίδραςησ τησ umask ςτη δημιουργία αρχείων και
καταλόγων.
113
5.4 Αζθήζεηο γηα εμάζθεζε
ηόρνο
Άδεηεο ρξήζεο. Ο επεμεξγαζηήο θεηκέλνπ vi.
Άζθεζε 1
ε έλα ηεξκαηηθφ δνθηκάζηε ηα εμήο:
1. Γείηε ηελ ηηκή ηεο umask (κάζθα δηθαησκάησλ)
2. Γεκηνπξγήζηε έλαλ θαηάινγν κε φλνκα lab4. Πνηα είλαη ηα δηθαηψκαηα πνπ πεξηκέλεηε λα έρεη ν
θαηάινγνο κε βάζε ηελ ηηκή ηεο umask; Γείηε ηα δηθαηψκαηα ρξεζηκνπνηψληαο ηελ εληνιή stat.
7. Ζ παξαπάλσ εληνιή ζα εκθαλίζεη ην φλνκα ηνπ ηξέρνληνο ρξήζηε. Γελ ζα ην εκθαλίζεη φκσο ζην
ηεξκαηηθφ, ζα απνζεθεχζεη ηα απνηειέζκαηα ηεο ζην αξρείν κε φλνκα myid. Πνηα δηθαηψκαηα ρξήζεο
έρεη ην αξρείν myid; Δίλαη αλακελφκελα κε βάζε ηελ ηηκή ηεο umask;
8. Αιιάμηε ην umask ζε 000 θαη δεκηνπξγείζηε έλα αξρείν κε φλνκα public. Πνηα είλαη ηα δηθαηψκαηά
ηνπ;
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).
114
14. Αθαηξέζηε ην δηθαίσκα “x” απφ ην myls. Μπνξείηε λα ηελ εθηειέζεηε;
15. Πξνζζέζηε ην δηθαίσκα “x” θαη αθαηξέζηε ηα δηθαηψκαηα “w”,”r”. Μπνξείηε λα ηελ εθηειέζεηε;
Όηαλ πιεθηξνινγνύκε κηα εληνιή γηα εθηέιεζε ζην θέιπθνο, ην θέιπθνο δελ ςάρλεη λα ηε
βξεη ζηνλ ηξέρνληα θαηάινγν. Φάρλεη λα βξεη ηα εθηειέζηκα αξρεία εληνιώλ κέζα ζε έλα ζύλνιν
από θαηαιόγνπο. Απηό ην ζύλνιν θαηαιόγσλ νλνκάδεηαη $PATH. To $PATH είλαη κηα κεηαβιεηή
πεξηβάιινληνο, πεξηζζόηεξα γηα ηηο κεηαβιεηέο πεξηβάιινληνο ζα δνύκε ζην Κεθάιαην 8. Απηή ε
κεηαβιεηή είλαη κηα ζπκβνινζεηξά (string) ε νπνία πεξηέρεη δηαδξνκέο θαηαιόγσλ, κέζα ζηνπο
νπνίνπο ην θέιπθνο ζα ςάμεη λα βξεη ην εθηειέζηκν πνπ αληηζηνηρεί ζηελ εληνιή πνπ έδσζε ν
ρξήζηεο. Μπνξείηε λα δείηε ηελ ηηκή απηήο ηεο κεηαβιεηήο κε ηελ εληνιή:
echo $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 ησλ ππνινίπσλ ρξεζηψλ, δνθηκάζηε λα εθηειέζεηε ηελ
εληνιή ηνπ ηχπνπ:
115
Όπνπ dimitris, ην φλνκα ηνπ ρξήζηε πνπ εληνπίζαηε φηη έρεη ην παξαπάλσ αξρείν. Ζ παξαπάλσ εληνιή
εθηειεί ηηο εληνιέο date (εκθαλίδεη ψξα) θαη whoami (εκθαλίδεη πνηνο ρξήζηεο είκαη). Σα απνηειέζκαηά ηνπο,
φκσο, δελ εκθαλίδνληαη ζηελ νζφλε, αιιά γίλνληαη “append” ζην αξρείν πνπ νξίδνπκε. Δάλ δελ ζαο εκθάληζε
ην κήλπκα “Permission denied” ηφηε ε εληνιή εθηειέζηεθε. Δάλ ζαο εκθάληζε ην παξαπάλσ κήλπκα ηφηε
πξνθαλψο δελ έρεηε ην δηθαίσκα λα γξάςεηε ζην παξαπάλσ αξρείν. Γνθηκάζηε ηελ παξαπάλσ εληνιή θαη ζε
αξρεία άιισλ ρξεζηψλ κέρξη λα θαηαθέξεηε λα γξάςεηε ζε αξρεία δπν ή ηξηψλ ηνπιάρηζηνλ ζπκθνηηεηψλ
ζαο.
Δθηειεί ηελ εληνιή. Σα απνηειέζκαηα όκσο ηεο εληνιήο δελ εκθαλίδνληαη ζην ηεξκαηηθό αιιά
απνζεθεύνληαη ζην αξρείν. Αλ ην αξρείν ππάξρεη ήδε, ηόηε ηα απνηειέζκαηα ηεο εληνιήο γξάθνληαη
ζην ηέινο ηνπ αξρείνπ (append).
1. Κάζε θνξά πνπ δνθηκάδεηε ηελ παξαπάλσ εληνιή ζε έλα αξρείν, δνθηκάδεηε αλ κπνξείηε λα δείηε θαη ηα
πεξηερφκελα ηνπ αξρείνπ κε ηελ εληνιή cat. Διέγμηε ηηο άδεηεο ρξήζεο ηνπ θάζε αξρείνπ.
2. Γνθηκάζηε αλ κπνξείηε λα αιιάμεηε ηηο άδεηεο ρξήζεο ελφο αξρείνπ myid πνπ αλήθεη ζε άιινλ ρξήζηε.
3. Πφζνη (θαη πνηνη) ρξήζηεο θαηάθεξαλ λα «πεηξάμνπλ» ην δηθφ ζαο αξρείν; Γείηε ηα πεξηερφκελά ηνπ.
Άζθεζε 3
Δμνηθείσζε κε ηνλ επεμεξγαζηή θεηκέλνπ vi. Γείηε ην Παξάξηεκα Α γηα νδεγίεο ρξήζεο ηνπ vi.
vi myid2
vi
Δηζάγεηε θάπνην θείκελν θαη απνζεθεχζηε ην κε φλνκα ηεο αξεζθείαο ζαο ζην θάθειν /tmp. εκείσζε: ε
εληνιή “:w filename” ζην filename κπνξεί λα δερζεί είηε ζρεηηθή είηε απφιπηε δηαδξνκή γηα έλα φλνκα
αξρείνπ.
5.5 Αλαθνξέο
[1] GNU Linux Programmer's Manual: umask structure.
[2] GNU coreutils Reference Manual: chmod command.
[3] Andrew S. Tanenbaum, Modern Operating Systems, 3rd edition, page 279.
116
[4] Brian Fox, Chet Ramey. GNU Bash, General Commands Manual.
[5] Maurice J. Bach. The Design of the Unix Operating System, 1986.
[6] WikiPedia. inode, February 2015. [ http://en.wikipedia.org/wiki/Inode ]
117
Κεθάιαην 6
6 Καλνληθέο Δθθξάζεηο
Μηα θαλνληθή έθθξαζε [1, 3] είλαη έλαο ζχληνκνο θαη ζαθήο ηξφπνο έθθξαζεο ελφο κνηίβνπ αλαδήηεζεο
ραξαθηήξσλ. Υξεζηκνπνηνχληαη δηάθνξεο ζπληνκνγξαθίεο γηα ηηο θαλνληθέο εθθξάζεηο φπσο: RegExp,
RegEx ή θαη RE. Οη θαλνληθέο εθθξάζεηο απνηεινχληαη απφ ζπλδπαζκφ θαλνληθψλ ραξαθηήξσλ κε έλαλ ή
πεξηζζφηεξνπο κεηαραξαθηήξεο. Οη κεηαραξαθηήξεο είλαη ραξαθηήξεο κε εηδηθή ζεκαζία. Οη θαλνληθέο
εθθξάζεηο ρξεζηκνπνηνχληαη θπξίσο γηα έιεγρν ζπκβνινζεηξψλ ή γηα εχξεζε ζπγθεθξηκέλσλ ζηνηρείσλ κέζα
ζε κηα ζπκβνινζεηξά (ή γεληθφηεξα ζε έλα αξρείν) ή θαη γηα εχξεζε θαη αληηθαηάζηαζε ελφο κνηίβνπ κε έλα
άιιν αλ γηα παξάδεηγκα ζε έλα αξρείν ζέινπκε λα αληηθαηαζηήζνπκε ηηο εκεξνκελίεο ηεο κνξθήο
ΖΖ/ΜΜ/ΔΔΔΔ (πρ. 10/03/2015) κε ηελ κνξθή EEEE-MM-HH (πρ. 2015-03-10).
Ζ ηδέα ησλ θαλνληθψλ εθθξάζεσλ εκθαλίζηεθε ηνλ 1950, φηαλ ν Ακεξηθαλφο καζεκαηηθφο Stephen
Kleene επηζεκνπνίεζε ηελ πεξηγξαθή κηαο «Καλνληθήο Γιψζζαο» (Regular Language). Οη Καλνληθέο
Δθθξάζεηο ρξεζηκνπνηήζεθαλ επξέσο ζην UNIX κε ηηο εληνιέο ed, sed, grep, vi, awk θα.
Οη Καλνληθέο Δθθξάζεηο δελ είλαη κφλν δπλαηφηεηα ηνπ Unix. ην Unix ρξεζηκνπνηνχληαη ηδηαίηεξα
ιφγσ ησλ πξνγξακκάησλ πνπ αλαθέξζεθαλ, αιιά ε ρξήζε ηνπο είλαη ζέκα ππνζηήξημεο απφ ηηο εθαξκνγέο
πνπ ρξεζηκνπνηνχκε.
Όιεο ζρεδφλ νη γιψζζεο πξνγξακκαηηζκνχ ππνζηεξίδνπλ θαλνληθέο εθθξάζεηο. Δίηε κέζσ
βηβιηνζεθψλ, φπσο νη C, C++, είηε ελζσκαησκέλεο ζηε γιψζζα. Όιεο νη λέεο γιψζζεο πξνγξακκαηηζκνχ
έρνπλ ελζσκαησκέλε ηε δπλαηφηεηα ρεηξηζκνχ θαλνληθψλ εθθξάζεσλ, φπσο νη perl, php, JavaScript, θ.ά.
ην παξφλ θεθάιαην ζα κειεηήζνπκε ηηο θαλνληθέο εθθξάζεηο κέζα απφ ηε ρξήζε ηεο εληνιήο grep
(global regular expression print) [2]. ε κεηαγελέζηεξν θεθάιαην ζα κειεηήζνπκε ηε ρξήζε ησλ θαλνληθψλ
εθθξάζεσλ κε ηελ εληνιή sed.
119
Έλα atom κπνξεί λα είλαη θάηη απφ ηα παξαθάησ:
Απφ ηελ άιιε κεξηά, κηα πξάμε κπνξεί λα είλαη κηα απφ ηηο παξαθάησ:
6.2 Σα atoms
Ζ πην απιή πεξίπησζε ελφο atom είλαη έλαο απιφο ραξαθηήξαο. ην Γηαδξαζηηθφ ρήκα 6.4 παξνπζηάδεηαη ε
πην απιή πεξίπησζε κηαο θαλνληθήο έθθξαζεο πνπ απνηειείηαη κφλν απφ έλα atom. Έζησ φηη απηφ ην atom
είλαη ν απιφο ραξαθηήξαο “L”. Μηα θαλνληθή έθθξαζε ειέγρεηαη ψζηε λα εμαθξηβσζεί αλ ηαηξηάδεη ζε
θάπνηα ζπκβνινζεηξά (string). Έζησ φηη ειέγρνπκε ηελ πξνεγνχκελε θαλνληθή έθθξαζε επάλσ ζηε
ζπκβνινζεηξά "HELLO". Δζσηεξηθά, ην φπνην ζχζηεκα ειέγρνπ, πξνζπαζεί λα ηαηξηάμεη ηελ θαλνληθή
120
έθθξαζε ζηε ζπκβνινζεηξά θάλνληαο φινπο ηνπο δπλαηνχο ειέγρνπο κέρξη λα ηαηξηάμεη ε έθθξαζε ζε θάπνην
ζεκείν ή κέρξη λα εμαληιεζνχλ φινη νη δπλαηνί ζπλδπαζκνί.
ην Γηαδξαζηηθφ ρήκα 6.5 θαίλεηαη φηη εμαληινχληαη νη δπλαηνί ζπλδπαζκνί θαη ε θαλνληθή
έθθξαζε "Κ" δελ ηαηξηάδεη ζηε ζπκβνινζεηξά "HELLO". Σφηε ην ηειηθφ απνηέιεζκα ηνπ ειέγρνπ είλαη
αξλεηηθφ.
121
Απηφ ην ρήκα είλαη Γηαδξαζηηθφ.
Αλαηξέμηε ζηελ ειεθηξνληθή έθδνζε.
Σν επφκελν ζρήκα (Γηαδξαζηηθφ ρήκα 6.8) δείρλεη αθφκε δπν απιέο πεξηπηψζεηο. Ζ πξψηε
πεξίπησζε είλαη αλαδήηεζε ηεο θαλνληθήο έθθξαζεο "Δ.", δειαδή αλαδήηεζε ηνπ "Δ" πνπ λα αθνινπζείηαη
απφ έλαλ νπνηνδήπνηε ραξαθηήξα. Απηή ε θαλνληθή έθθξαζε ζα ηαηξηάμεη ζην ηκήκα ηεο ζπκβνινζεηξάο
"EL", δειαδή ε "." ζα ηαηξηάμεη ζην γξάκκα "L". Πξνθαλψο, ζα κπνξνχζε λα ηαηξηάμεη ζε νπνηνδήπνηε
γξάκκα ή ζχκβνιν εθηφο απφ ην «ηίπνηα». ην δεχηεξν παξάδεηγκα, γίλεηαη αλαδήηεζε ηεο θαλνληθήο
έθθξαζεο "Ο.". Σν κφλν ζεκείν πνπ ππάξρεη ν ραξαθηήξαο "Ο" είλαη ζην ηέινο ηεο ζπκβνινζεηξάο
"HELLO". Όκσο, κεηά ην "Ο" δελ αθνινπζεί άιινο ραξαθηήξαο, ζπλεπψο, ε "." δελ κπνξεί λα ηαηξηάμεη κε
θάηη. Άξα ε δεχηεξε θαλνληθή έθθξαζε "Ο." δελ ηαηξηάδεη ζην "HELLO".
ύκβνιν Δμήγεζε
[xyz] ζεκαίλεη έλαο αθξηβψο ραξαθηήξαο απφ ην ζχλνιν ραξαθηήξσλ: ("x", "y", "z" ).
ζεκαίλεη έλαο αθξηβψο ραξαθηήξαο – νπνηνζδήπνηε ραξαθηήξαο εθηφο ησλ ("x", "y", "z" ).
[^xyz]
Σν ζχκβνιν "^" ακέζσο κεηά ηελ αγθχιε "[" δειψλεη άξλεζε.
[abcdxyz] Δάλ νη ραξαθηήξεο ηνπ ζπλφινπ πνπ δειψλνπκε είλαη ζπλερφκελνη ζηνλ πίλαθα
[a-dxyz] ραξαθηήξσλ, ηφηε κπνξεί λα ρξεζηκνπνηεζεί ε παχια "-" γηα λα δειψζεη "απφ - έσο". Όια
[a-dx-z] ηα πξνεγνχκελα είλαη ηζνδχλακα.
Μπνξεί λα γίλεη ζπλδπαζκφο ηνπ εχξνπο ("-") κε ηελ άξλεζε. Σν πξνεγνχκελν ζεκαίλεη
[^a-dxyz] έλαο νπνηνζδήπνηε ραξαθηήξαο, αιιά φρη θάπνηνο απφ ηνπο ("a", "b", "c", "d", "x", "y",
"z").
Δπίζεο, ππάξρνπλ θαη ηα πξνθαζνξηζκέλα ζχλνια ραξαθηήξσλ πνπ αλαθέξζεθαλ ζηνλ Πίλαθα 4.2.
Σα πξνθαζνξηζκέλα ζχλνια ραξαθηήξσλ κπνξνχλ λα ρξεζηκνπνηεζνχλ ζε κηα θιάζε φπσο νπνηνδήπνηε
122
εχξνο ραξαθηήξσλ. Έηζη, ζην παξαθάησ παξάδεηγκα, ζπλδπάδνπκε κέζα ζε κηα θιάζε έλα πξνθαζνξηζκέλν
ζχλνιν θαη ηνπο ραξαθηήξεο "," θαη "+". Ζ ρξήζε ησλ πξνθαζνξηζκέλσλ ζπλφισλ πξνηηκάηαη, φπνπ είλαη
βέβαηα εθηθηή, δηφηη αθνινπζεί ηνπο θαλφλεο ηνπ ζπλφινπ ραξαθηήξσλ (charset) πνπ ρξεζηκνπνηείηαη θάζε
θνξά. Παξάδεηγκα ην [[:upper:]] ζα δνπιέςεη ζσζηά ζε φιεο ηηο γιψζζεο θαη γηα φια ηα γξάκκαηα, είηε
Αγγιηθά, είηε Διιεληθά, είηε Κπξηιιηθά, είηε ... Κηλέδηθα. Αλ ν πξνγξακκαηηζηήο κηαο εθαξκνγήο δελ
επηζπκεί λα ρξεζηκνπνηήζεη ην [[:upper:]], αιιά ην [A-ZA-Χ], ηφηε θαιχπηεη κφλν δπν γιψζζεο (Αγγιηθά-
Διιεληθά) θαη βέβαηα ε θαλνληθή έθθξαζε (θαη ην πξφγξακκα πνπ ζα ηελ πεξηέρεη) ζα πξέπεη λα είλαη
γξακκέλε κε ηε ζσζηή θσδηθνπνίεζε ραξαθηήξσλ.
ύκβνιν Δμήγεζε
^ εκαίλεη αξρή ζπκβνινζεηξάο.
$ εκαίλεη ηέινο ζπκβνινζεηξάο.
\< εκαίλεη αξρή ιέμεο. Οη ιέμεηο νξηνζεηνχληαη απφ ηα θελά θαη ηα ζεκεία ζηίμεο.
\> εκαίλεη ηέινο ιέμεο.
ηνλ Πίλαθα 6.2 βιέπνπκε ηε ζεκαζία ηνπ θάζε ζπκβφινπ, ελψ ζην ρήκα 6.9 κε ηα θφθθηλα βέιε
θαίλνληαη ηα ζεκεία πνπ κπνξεί λα ηαηξηάμεη ε θάζε άγθπξα κέζα ζηε ζπκβνινζεηξά "One line of text.". Ζ
αξρή ιέμεο ( \<) ζην ζπγθεθξηκέλν παξάδεηγκα ηαηξηάδεη θαη ζηελ αξρή ζπκβνινζεηξάο. Δάλ πξηλ απφ ηελ
πξψηε ιέμε ππήξρε θάπνην θελφ δηάζηεκα, ηφηε ε αξρή ιέμεο δελ ζα ηαπηηδφηαλ κε ηελ αξρή ζπκβνινζεηξάο.
Δπίζεο παξαηεξνχκε φηη ην ηέινο ιέμεο δελ ηαπηίδεηαη κε ην ηέινο ζπκβνινζεηξάο, επεηδή ππάξρεη ν
ραξαθηήξαο "." ακέζσο κεηά ηε ιέμε θαη πξηλ απφ ην ηέινο.
123
ρήκα 6.9: Παξάδεηγκα ζέζεσλ αγθπξώλ.
6.3 Σειεζηέο
124
Αλαδήηεζε ηεο αξρήο ζπκβνινζεηξάο, έπεηηα έλα αξηζκεηηθφ ςεθίν θαη λα
^[0-9]$ αθνινπζεί ην ηέινο ζπκβνινζεηξάο. Οπζηαζηηθά, ζα ηαηξηάμεη ζε
ζπκβνινζεηξέο πνπ απνηεινχληαη απφ έλαλ κφλν αξηζκεηηθφ ραξαθηήξα.
Αλαδήηεζε ηεο αξρήο ζπκβνινζεηξάο θαη λα αθνινπζεί ην ηέινο
ζπκβνινζεηξάο. Οπζηαζηηθά ζα ηαηξηάμεη ζε ζπκβνινζεηξέο πνπ είλαη θελέο,
^$ δειαδή έρνπλ κήθνο 0 ςεθία. Πξνζνρή, ε θελή ζπκβνινζεηξά (empty string)
είλαη θάηη δηαθνξεηηθφ απφ κηα ηηκή NULL γηα κηα ζπκβνινζεηξά ζε κηα
γιψζζα πξνγξακκαηηζκνχ.
Αλαδήηεζε ηεο αξρήο ζπκβνινζεηξάο, έπεηηα έλαλ νπνηνλδήπνηε ραξαθηήξα
θαη λα αθνινπζεί ην ηέινο ζπκβνινζεηξάο. Οπζηαζηηθά ζα ηαηξηάμεη ζε
^.$
ζπκβνινζεηξέο πνπ απνηεινχληαη απφ έλαλ κφλν ραξαθηήξα, νπνηνλδήπνηε
ραξαθηήξα, αθφκε θαη ην θελφ δηάζηεκα (space).
Αλαδήηεζε ηνπ "0", έπεηηα έλα νπνηνδήπνηε αξηζκεηηθφ ςεθίν θαη λα
αθνινπζεί πάιη ην "0". Θα ηαηξηάμεη ζε 3ςήθηνπο αξηζκνχο πνπ μεθηλνχλ θαη
ηειεηψλνπλ ζε "0", αιιά φρη κφλν. Θα ηαηξηάμεη ζηε ζπκβνινζεηξά "050"
0[0-9]0
αιιά θαη ζηε ζπκβνινζεηξά "Your score is 805043", δηφηη ππάξρεη ε
δεηνχκελε αθνινπζία ζπλδπαζκψλ ραξαθηήξσλ κέζα ζηε ζπγθεθξηκέλε
ζπκβνινζεηξά.
ύκβνιν Δμήγεζε
job|hobby Θα ηαηξηάμεη, είηε ηελ θαλνληθή έθθξαζε "job", είηε ηελ "hobby".
Θα ηαηξηάμεη κηα απφ ηηο ηξεηο θαλνληθέο εθθξάζεηο. Γελ ππάξρεη πεξηνξηζκφο
here|there|away
ζην πιήζνο ησλ ελαιιαθηηθψλ.
Θα ηαηξηάμεη κηα απφ ηηο ηξεηο θαλνληθέο εθθξάζεηο. Οη θαλνληθέο εθθξάζεηο
^Test|^This|\<Mr\> κπνξνχλ λα πεξηέρνπλ νηηδήπνηε, αθφκε θαη άγθπξεο, θαη είλαη αλεμάξηεηεο
κεηαμχ ηνπο.
{n,m}
θαη δειψλεη πσο ην πξνεγνχκελν atom ζα πξέπεη λα επαλαιεθζεί απφ n έσο m ην πνιχ θνξέο. Δάλ ην m
παξαιείπεηαη, ηφηε ελλνείηαη ην άπεηξν (∞). ηελ πεξίπησζε πνπ ην n είλαη ίζν κε ην m, ηφηε ρξεζηκνπνηείηαη
ε ζχληαμε: {n}.
Οη πεξηζζφηεξν ζπρλνί (θαηά ηε ρξήζε) ζπλδπαζκνί είλαη νη (n=1, m=∞), (n=0, m=∞), (n=0, m=1).
Γη’ απηνχο ηνπο ζπλδπαζκνχο πνπ είλαη ζπρλνί, ππάξρνπλ νη ζπληνκνγξαθίεο "+", "*" θαη "?", φπσο
πεξηγξάθνληαη ζηνλ Πίλαθα 6.5.
125
Πίλαθαο 6.5: Οη ηειεζηέο επαλάιεςεο.
ύκβνιν Δμήγεζε
{n} Σν πξνεγνχκελν atom αθξηβψο n θνξέο.
{n,m} Σν πξνεγνχκελν atom απφ n έσο m θνξέο
{n,} Σν πξνεγνχκελν atom απφ n θνξέο ή πεξηζζφηεξεο.
* ή {0,} Σν πξνεγνχκελν atom 0 θνξέο ή πεξηζζφηεξεο.
+ ή {1,} Σν πξνεγνχκελν atom 1 θνξά ή πεξηζζφηεξεο.
? ή {0,1} Σν πξνεγνχκελν atom 1 θνξά ή θακία.
Όηαλ ν ηειεζηήο επαλάιεςεο είλαη έλαο κφλν αξηζκφο, παξάδεηγκα {5}, ζηελ πξαγκαηηθφηεηα
απνηειεί απιά ζπληνκνγξαθία ηεο θαλνληθήο έθθξαζεο. Αληί, ινηπφλ, λα γξάςνπκε "ΑΒΒΒΒΒC",
γξάθνπκε "ΑΒ{5}C". Κάηη ηέηνην δελ απμάλεη ηελ πνιππινθφηεηα ειέγρνπ ηεο θαλνληθήο έθθξαζεο.
ηελ άιιε πεξίπησζε, αλ ν ηειεζηήο επαλάιεςεο πεξηέρεη εχξνο, παξάδεηγκα {2,7}, ηφηε δεκηνπξγεί
πνιιέο ελαιιαθηηθέο θαλνληθέο εθθξάζεηο. Έηζη ην"ΑΒ{2,7}C", είλαη ηζνδχλακν
κε "ΑΒΒC|ABBBC|ABBBBC|ABBBBB|ABBBBBBC|ABBBBBBBC". Απηφ ζηελ νπζία απμάλεη πνιχ ηελ
πνιππινθφηεηα ειέγρνπ, αθνχ ζα πξέπεη λα ειεγρζνχλ 5 θαλνληθέο εθθξάζεηο αληί γηα κηα. Πξνθαλψο, νη
βηβιηνζήθεο θαλνληθψλ εθθξάζεσλ εκπεξηέρνπλ βειηηζηνπνηήζεηο, ψζηε λα απνθεχγνληαη πεξηηηνί έιεγρνη.
Παξφια απηά, ππάξρεη απμεκέλε πνιππινθφηεηα.
Δηδηθά, αλ πεξηιακβάλεηαη ζηελ θαλνληθή έθθξαζε ν ηειεζηήο "*", φπνπ δελ ππάξρεη άλσ φξην,
δεκηνπξγνχληαη ηδηαίηεξα πνιινί δπλαηνί ζπλδπαζκνί. Έλα κηθξφ παξάδεηγκα παξνπζηάδνπκε
ζην Γηαδξαζηηθφ ρήκα 6.11, γηα λα δείμνπκε ηελ αχμεζε πνιππινθφηεηαο. ην ζπγθεθξηκέλν παξάδεηγκα,
νη δπλαηνί ζπλδπαζκνί πνπ ειέγρνληαη είλαη ζρεηηθά ιίγνη, δηφηη ε θαλνληθή έθθξαζε είλαη απιή
(εθαξκφδεηαη ν ηειεζηήο επαλάιεςεο ζε ραξαθηήξα θαη φρη ζε θιάζε ή "."). Δπηπιένλ, ε ζπκβνινζεηξά
ειέγρνπ είλαη κηθξή. Παξφια απηά, φπσο θαίλεηαη ζην ρήκα 6.12, απαηηνχληαη ηνπιάρηζηνλ 14 έιεγρνη.
126
ρήκα 6.12: Γελδξνεηδήο αλαπαξάζηαζε ησλ δπλαηώλ ζπλδπαζκώλ-ειέγρσλ ηνπ παξαδείγκαηνο από ην Γηαδξαζηηθό
ρήκα 6.11.
Η ρξήζε ησλ ηειεζηώλ επαλάιεςεο απμάλεη ηδηαίηεξα ηνλ ρξόλν ειέγρνπ. Γηα απηό, ζα πξέπεη λα
γίλεηαη πξνζεθηηθή «θαηαζθεπή» κηαο θαλνληθήο έθθξαζεο, ώζηε λα κελ δεκηνπξγεί άρξεζηνπο
ζπλδπαζκνύο, ηδίσο εάλ πξόθεηηαη λα ειεγρζεί ζε κεγάιν όγθν δεδνκέλσλ (πρ. log files).
Καλνληθή
Δμήγεζε Ιζνδύλακν Σαηξηάδεη ζε
Έθθξαζε
Σν πξνεγνχκελν atom
ΑAA, BAAABBB,
Α{3} (ην Α) αθξηβψο 3 ΑAA
XYZAAAAAAATT
θνξέο.
Σν B απφ 2 έσο 4 BB, XYBBBBBZX,
B{2,4} BB|BBB|BBBB
θνξέο QWEBBBBBBBBBB
Σν B απφ 1 έσο 3
ΑΒ{1,3} θνξέο. Πξνζνρή, κφλν AB|ABB|ABBB ABB, ABBBBABB
ην "Β", φρη θαη ην Α.
127
To A απφ 1 έσο 3
ABBB,
A{1,3}B θνξέο θαη κεηά ην Β AB|AAB|AAAB
BAABBBBABBB
κηα θνξά.
To A απφ 1 έσο 3
AB|ABB|ABBB|AAB|AABB| ABBB,
A{1,3}B{1,3} θνξέο θαη κεηά ην B
AABBB|AAAB|AAABB|AAABBB CXZAABBBBBABZX
απφ 1 έσο 3 θνξέο.
ABBBBC,
To A κηα θνξά, κεηά
ΑΒBBBC|ABBBBBC|ABBBBBBC|... CXZAABBBBBBCCB
ην Β 4 θνξέο ή
ΑΒ{4,}C ... B,
πεξηζζφηεξεο θαη κεηά
ABBBBBBBBBBBBBBBBBBBBBBC|... CBABBBBBBCABBB
ην C. BBZX
Ζ θιάζε ραξαθηήξσλ ABB, ABA,
[ΑΒ]{2,3} [ΑΒ] απφ δπν έσο [AB][AB]|[AB][AB][AB] XYZABXYZ,
ηξεηο θνξέο. ZAXBBBXX
Αλαδήηεζε αξρήο
ζπκβνινζεηξάο, λα
αθνινπζνχλ απφ δπν
έσο ηξεηο νπνηνηδήπνηε
ραξαθηήξεο. QWE, 8A0,
^.{2,3}$ ^..$|^...$
Οπζηαζηηθά, ζα WE, $#A, -
ηαηξηάμεη ζε
ζπκβνινζεηξέο πνπ
έρνπλ κήθνο δπν ή
ηξία.
010, 98201122,
Αλαδήηεζε ηνπ 0 ή 1
[01]{3} [01][01][01] 230109901,
ηξεηο θνξέο.
23010990110
ηνλ Πίλαθα 6.6, παξνπζηάδνληαη κεξηθά παξαδείγκαηα κε ηνλ ηειεζηή επαλάιεςεο. Ηδηαίηεξε
πξνζνρή ζα πξέπεη λα δνζεί ζηα ηξία ηειεπηαία παξαδείγκαηα. ην [AB]{2,3} ε επαλάιεςε αθνξά ηελ
θιάζε ραξαθηήξσλ, αιιά φρη ηνλ ραξαθηήξα πνπ ηαίξηαμε. Οκνίσο θαη ζηηο επφκελεο δπν πεξηπηψζεηο. ηελ
ηειεπηαία πεξίπησζε, νη ζπλδπαζκνί πνπ ζα ηαηξηάμνπλ είλαη νη:
1. 000,
2. 001,
3. 010,
4. 011,
5. 100,
6. 101,
7. 110,
8. 111,
δειαδή φινη νη δπλαηνί ζπλδπαζκνί. Αλ ζα ζέιακε κηα θαλνληθή έθθξαζε ε νπνία λα ηαηξηάμεη κφλν ζηνπο
ζπλδπαζκνχο 000 ή 111 ή 555 ή 777, ηφηε ην [0157]{3} δελ είλαη ε ζσζηή ιύζε. Θα δνχκε
ζηελ Παξάγξαθν 6.3.5 πνηνο είλαη ν ζσζηφο θαη κνλαδηθφο ηξφπνο λα ην πεηχρνπκε απηφ.
128
Πίλαθαο 6.7: Παξαδείγκαηα κε ηειεζηέο επαλάιεςεο.
AABXY
AABABXY
AABABABXY
129
Πίλαθαο 6.8: Γπλαηνί ζπλδπαζκνί γηα ηελ Καλνληθή
Έθθξαζε: (This|That) is (a|an|the).
A/A πλδπαζκνί
1. This is a
2. This is an
3. This is the
4. That is a
5. That is an
6. That is the
Η αλαθνξά πίζσ (back reference) θαη νη απνηακηεπηέο \1, \2,...\9 είλαη ν κόλνο ηξόπνο, ώζηε ζε
κηα θαλνληθή έθθξαζε λα δηαηππώζνπκε ηελ έλλνηα ηεο επαλάιεςεο θάπνησλ ραξαθηήξσλ.
130
Αλαδήηεζε ηξηψλ αξηζκεηηθψλ ραξαθηήξσλ θαη
απνζήθεπζή ηνπο ζηνλ 1ν απνηακηεπηή. Να 346346346,
([0-9]{3})\1[Α-
αθνινπζνχληαη απφ ηνπο ίδηνπο. Έπεηηα λα STAR987987TEST987,
Ε]*\1
ππάξρνπλ πξναηξεηηθά θεθαιαία γξάκκαηα θαη
ηέινο πάιη νη ίδηνη ηξεηο αξηζκεηηθνί ραξαθηήξεο. 123123ΣΡ123END
Χαξαθηήξαο Δμήγεζε
* Σειεζηήο επαλάιεςεο. Μεδέλ ή πεξηζζφηεξεο θνξέο.
+ Σειεζηήο επαλάιεςεο. Μηα ή πεξηζζφηεξεο θνξέο.
? Σειεζηήο επαλάιεςεο. Μεδέλ ή κηα θνξά.
[ Έλαξμε θιάζεο ραξαθηήξσλ.
Σέινο θιάζεο ραξαθηήξσλ κόλν όηαλ βξίζθεηαη κεηά από [. Γηαθνξεηηθά, ν απιφο
]
ραξαθηήξαο ]
{ Έλαξμε ηειεζηή επαλάιεςεο.
Σέινο ηειεζηή επαλάιεςεο κόλν όηαλ βξίζθεηαη κεηά από {. Γηαθνξεηηθά, ν απιφο
}
ραξαθηήξαο } .
() Οκαδνπνίεζε.
| Σειεζηήο ελαιιαγήο (OR).
131
εκαίλεη αξρή ζπκβνινζεηξάο φηαλ βξίζθεηαη ζηελ αξρή ηεο θαλνληθήο
έθθξαζεο.
^ εκαίλεη άξλεζε φηαλ βξίζθεηαη ζηελ αξρή ηεο θιάζεο ραξαθηήξσλ, δειαδή
ακέζσο κεηά ην "[".
Γελ έρεη εηδηθή ζεκαζία φηαλ βξίζθεηαη ζε νπνηαδήπνηε άιιε ζέζε.
εκαίλεη ηέινο ζπκβνινζεηξάο φηαλ βξίζθεηαη ζην ηέινο ηεο θαλνληθήο
$ έθθξαζεο.
Γελ έρεη εηδηθή ζεκαζία φηαλ βξίζθεηαη ζε νπνηαδήπνηε άιιε ζέζε.
εκαίλεη εχξνο (απφ-έσο) φηαλ βξίζθεηαη κέζα ζε θιάζε ραξαθηήξσλ.
-
Γελ έρεη εηδηθή ζεκαζία φηαλ βξίζθεηαη ζε νπνηαδήπνηε άιιε ζέζε. .
εκαίλεη ν απιφο ραξαθηήξαο "." φηαλ βξίζθεηαη κέζα ζε θιάζε ραξαθηήξσλ.
. εκαίλεη ην atom ".", δειαδή νπνηνζδήπνηε ραξαθηήξα, φηαλ βξίζθεηαη ζε
νπνηαδήπνηε άιιε ζέζε.
Μέζα ζε κηα θιάζε ραξαθηήξσλ, (ζρεδφλ) φινη νη εηδηθνί ραξαθηήξεο ράλνπλ ηελ
εηδηθή ζεκαζία ηνπο. πρ: [{}*()/+*?|.] ζεκαίλεη έλαο ραξαθηήξαο απφ
ηνπο {}*()/+*?|.
ε φιεο ηηο πξνεγνχκελεο πεξηπηψζεηο, εαλ ζέινπκε λα αλαηξέζνπκε ηελ εηδηθή ζεκαζία ελφο
ραξαθηήξα, ρξεζηκνπνηνχκε ηνλ ραξαθηήξα "\". Δπίζεο, ν ραξαθηήξαο "\" ζε πνιιέο πεξηπηψζεηο πξνζδίδεη
εηδηθή ζεκαζία ζηνλ ραξαθηήξα πνπ αθνινπζεί. Απηφ ζπλεζίδεηαη ζηηο πεξηζζφηεξεο γιψζζεο
πξνγξακκαηηζκνχ. Γηα παξάδεηγκα, ζηελ C θαη ζηελ Java είλαη ραξαθηεξηζηηθή ε ρξήζε ηνπ \n ην νπνίν
ζεκαίλεη αιιαγή γξακκήο (new line). Ο ίδηνο θαλφλαο επεθηείλεηαη θαη ζηηο θαλνληθέο εθθξάζεηο, κε
δηαθνξεηηθά βέβαηα ζχκβνια. ηνλ Πίλαθα 6.11παξνπζηάδνληαη κεξηθέο πεξηπηψζεηο ρξήζεηο ηνπ "\" ζηηο
Καλνληθέο Δθθξάζεηο.
Χαξαθηήξαο Δμήγεζε
\1 .. \2 Αλαθνξά πίζσ (back reference).
\<, \> Άγθπξα (anchor).
πληφκεπζε γηα ην [a-zA-Z0-9_] (word). Υξεζηκνπνηείηαη ρσξίο ηα [],
\w
παξάδεηγκα: \<\w\w\> ζα ηαηξηάμεη ζηηο ιέμεηο κε δπν γξάκκαηα.
πληφκεπζε γηα ην [0-9] (digit). Υξεζηκνπνηείηαη ρσξίο ηα [],
\d
παξάδεηγκα: \<\d\d\> ζα ηαηξηάμεη ζηνπο αξηζκνχο κε δπν ςεθία.
\s πληφκεπζε γηα ην θελφ δηάζηεκα (space).
\W, \D, \S Άξλεζε ησλ παξαπάλσ.
Σα δπν παξαπάλσ ζχλνια θαλνληθψλ εθθξάζεσλ κνηάδνπλ πάξα πνιχ κεηαμχ ηνπο, φκσο δηαθέξνπλ
ζηνπο ζπκβνιηζκνχο πνπ αλαθέξνληαη ζηνλ Πίλαθα 6.12. Οη ηειεζηέο επαλάιεςεο ?, + θαη { } θαζψο θαη ε
132
νκαδνπνίεζε θαη ε ελαιιαγή απαηηνχλ ηνλ ραξαθηήξα "\". ηνλ Πίλαθα 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.
fgrep: Fast grep. Γελ ππνζηεξίδεη θαλνληθέο εθθξάζεηο, αιιά κφλν αλαδήηεζε ζηαζεξψλ
ζπκβνινζεηξψλ. Δίλαη ε πην γξήγνξε απφ φιεο ηεο νηθνγελείαο εμαηηίαο ησλ ιίγσλ δπλαηνηήησλ
ηεο** Έλα πξφγξακκα ή εληνιή, φζν πεξηζζφηεξεο δπλαηφηεηεο έρεη, ηφζν πην αξγφ γίλεηαη. Μπνξεί
λα εθηειεζηεί θαη σο grep -F.
grep: Ζ βαζηθή εληνιή ηεο νηθνγέλεηαο. Τπνζηεξίδεη ην BRE.
egrep: Extended grep. Τπνζηεξίδεη ην ERE. Μπνξεί λα εθηειεζηεί θαη σο grep -E.
rgrep: Recursive grep. Κάλεη αλαδξνκηθή αλαδήηεζε ζε αξρεία θαη θαηαιφγνπο. Δίλαη ζπληφκεπζε
γηα ηε ζεκαία "-r" ηεο grep θαη κπνξεί λα εθηειεζηεί θαη σο: grep -r.
133
Γηα ηηο αλάγθεο ηνπ καζήκαηνο θαη γηα εθπαηδεπηηθνχο ιφγνπο πξνηείλεηαη λα ρξεζηκνπνηείηε ηελ
egrep, δηφηη ην ERE είλαη πην απιφ ζηε δηαηχπσζε, θαζψο απαηηεί ιηγφηεξν ηε ρξήζε ηνπ ραξαθηήξα "\".
Απαηηείηαη φκσο πξνζνρή φηαλ ρξεζηκνπνηείηαη, ηδίσο φηαλ ε αλαδήηεζε γίλεηαη ζε πνιιά ή πνιχ κεγάια
αξρεία, δηφηη, φπσο έγηλε ζαθέο λσξίηεξα ζην παξφλ θεθάιαην, ν έιεγρνο κηαο πεξίπινθεο θαλνληθήο
έθθξαζεο είλαη κηα δηαδηθαζία απαηηεηηθή ζε ππνινγηζηηθή ηζρχ.
ηνλ Πίλαθα 6.13 αλαθέξνληαη νη πεξηζζφηεξν ζπρλέο ζεκαίεο ησλ εληνιψλ grep. Γηα πεξηζζφηεξεο
ιεηηνπξγίεο θαη ιεπηνκέξεηεο κπνξείηε λα αλαηξέμεηε ζην εγρεηξίδην ρξήζεο ηεο εληνιήο (man grep).
εκαία Λεηηνπξγία
-n Δκθάληζε αξηζκνχ γξακκήο πξηλ απφ θάζε γξακκή.
Αληηζηξνθή ιεηηνπξγίαο. Αληί λα εκθαλίζεη ηηο γξακκέο πνπ ηαηξηάδνπλ ζηελ θαλνληθή
-v
έθθξαζε, εκθαλίδεη ηηο γξακκέο πνπ δελ ηαηξηάδνπλ.
Δκθαλίδεη κφλν ηα νλφκαηα αξρείσλ πνπ πεξηείραλ γξακκέο πνπ ηαίξηαμαλ ζηελ θαλνληθή
-l έθθξαζε θαη φρη ηηο γξακκέο ηηο ίδηεο. Έρεη λφεκα ε ρξήζε ηεο φηαλ γίλεηαη αλαδήηεζε ζε
πνιιά αξρεία.
Δκθαλίδεη κφλν ην πιήζνο ησλ γξακκψλ πνπ ηαίξηαμαλ ζηελ θαλνληθή έθθξαζε θαη φρη ηηο
-c
γξακκέο.
-i Αγλνεί ηε δηάθξηζε πεδψλ-θεθαιαίσλ.
Αθνινπζνχλ κεξηθά παξαδείγκαηα ρξήζεο. ην παξαθάησ παξάδεηγκα γίλεηαη αλαδήηεζε ηεο ιέμεο "unix"
αγλνψληαο ηνλ δηαρσξηζκφ θεθαιαίσλ-πεδψλ ραξαθηήξσλ ζην αξρείν κε φλνκα file. ε απηήλ ηελ πεξίπησζε
κπνξεί λα ρξεζηκνπνηεζεί νπνηαδήπνηε εληνιή ηεο νηθνγέλεηαο grep. Δθφζνλ, φκσο, δελ αλαδεηείηαη
θαλνληθή έθθξαζε, αιιά κηα ζηαζεξή αθνινπζία ραξαθηήξσλ, πξνηεηκάηαη ε εληνιή fgrep.
ην επφκελν παξάδεηγκα, αλαδεηνχκε ηε ιέμε 'apa' κέζα ζην αξρείν /etc/passwd. ην απνηέιεζκα
πνπ παξνπζηάδνπκε έρνπκε παξαιείςεη κεξηθά ζηνηρεία θαζψο θαη αξθεηέο γξακκέο απνηειέζκαηνο. Ζ
επφκελε εληνιή, ζηελ νπνία αλαδεηείηαη θαη ε αξρή ζπκβνινζεηξάο, ζα εκθαλίζεη κφλν ηηο γξακκέο πνπ
μεθηλνχλ απφ 'apa'. Γηα ηελ πεξηγξαθή ηεο κνξθήο ηνπ αξρείνπ /etc/passwd, δείηε ην Παξάξηεκα Β.
134
asidirop@aetos:~$ grep 'apa' /etc/passwd
anpapad:x:x:x:Papadopoulos Anastasios:/home/student/x/anpapad:/bin/bash
anpap:x:x:x:Papagiannakis Anastasios:/home/student/x/anpap:/bin/bash
antpapad:x:x:x:Papadopoulos Antonios:/home/student/e/antpapad:/bin/bash
apamp:x:x:x:Ampatzoglou Apostolos:/home/staff/ektaktoi/apamp:/bin/bash
apapadop:x:x:x:Papadopoulos
Anastasios:/home/student/x/apapadop:/bin/bash
apapado:x:x:x:Papadopoulos Alexandros:/home/student/x/apapado:/bin/bash
apapad:x:x:x:Papadopoulos Aristeidis:/home/student/x/apapad:/bin/bash
asidirop@aetos:~$ grep '^apa' /etc/passwd
apamp:x:x:x:Ampatzoglou Apostolos:/home/staff/ektaktoi/apamp:/bin/bash
apapadop:x:x:x:Papadopoulos
Anastasios:/home/student/x/apapadop:/bin/bash
apa:x:x:x:Papadopoulos Alexandros:/home/student/x/apapado:/bin/bash
Oη παξαθάησ εληνιέο αλαδεηνχλ ζην αξρείν /etc/passwd ηνλ ρξήζηε πνπ ην φλνκα ρξήζηε
(username) μεθηλά κε 'asidiro'. Δληνπίδνληαη δπν γξακκέο ζην αξρείν. Αλ ζέιακε λα βξνχκε ηνλ ρξήζηε κε
αθξηβψο username 'asidiro', ηφηε ζα έπξεπε κε θάπνηνλ ηξφπν λα εμαηξεζεί απφ ηα απνηειέζκαηα ε γξακκή
πνπ μεθηλά κε 'asidirop', δειαδή ε γξακκή πνπ κεηά απφ ηε ζπκβνινζεηξά αλαδήηεζεο πεξηέρεη αθφκε έλα
γξάκκα. Απηφ ζα κπνξνχζακε λα ην πεηχρνπκε κε ηελ επφκελε εληνιή, δειαδή κεηά απφ ην 'asidiro' λα
αθνινπζεί θάηη πνπ δελ είλαη [a-z]. Αλ ππήξρε, φκσο, γξακκή πνπ μεθηλνχζε κε 'asidiro5' ζα ηελ εκθάληδε.
Δθφζνλ γλσξίδνπκε φηη ν ηεξκαηηζκφο ηνπ νλφκαηνο ρξήζηε θαζνξίδεηαη κε ηνλ ραξαθηήξα ":", ν πιένλ
αζθαιήο ηξφπνο είλαη λα ρξεζηκνπνηεζεί ε ηειεπηαία εληνιή.
135
asidirop@dellpc:~/tmp/unix$ ls -l
total 40
-rw-r--r-- 1 asidirop asidirop 28 Μάξ 19 2012 f*
-rw-r--r-- 1 asidirop asidirop 17 Μάξ 19 2012 file
-rw-r--r-- 1 asidirop asidirop 32 Μάξ 19 2012 -file
-rw-r--r-- 1 asidirop asidirop 77 Μάξ 12 2012 file1.txt
-rw-r--r-- 1 asidirop asidirop 101 Μάξ 12 2012 file2.txt
-rw-r--r-- 1 asidirop asidirop 274 Απξ 4 2012 file3
-rw-r--r-- 1 asidirop asidirop 3080 Μάξ 12 2012 image1.jpg
-rw-r--r-- 1 asidirop asidirop 17 Μάξ 19 2012 test
-rw-r--r-- 1 asidirop asidirop 35 Μάξ 19 2012 test file
asidirop@dellpc:~/tmp/unix$ cat file3
All characters except the
listed special characters
match a single instance
of themselves. { and } are literal
characters, unless they're part
of a valid regular expression
token (e.g. the {n} quantifier).
this line must match fiiiitttt
this line must match also fttt
asidirop@dellpc:~/tmp/unix$ grep 'fi*t' file3
this line must match fiiiitttt
this line must match also fttt
asidirop@dellpc:~/tmp/unix$ grep fi*t file3
asidirop@dellpc:~/tmp/unix$
Aλ δνθηκάζνπκε λα δψζνπκε φιε ηελ ηειεπηαία εληνιή σο φξηζκα ζηελ εληνιή echo, ε echo απιά
ζα καο εκθαλίζεη ηε ζπκβνινζεηξά πνπ ηεο δφζεθε σο φξηζκα.
Βιέπνπκε, ινηπφλ, παξαθάησ φηη ε echo ζα καο εκθαλίζεη: grep file1.txt file2.txt
file, ην νπνίν ζεκαίλεη φηη ην θέιπθνο εξκήλεπζε ην fi*t θαη ην κεηέθξαζε ζηα νλφκαηα αξρείσλ file1.txt
θαη file2.txt. Έηζη ηειηθά, ζηελ εληνιή grep δίλνληαη ηξία νξίζκαηα. Σν πξψην φξηζκα (εθφζνλ δελ είλαη
ζεκαία) ζεσξεί ε grep φηη είλαη ε θαλνληθή έθθξαζε πξνο αλαδήηεζε. Γειαδή, ζηελ grep δφζεθε σο
θαλνληθή έθθξαζε ην "file1.txt". Όια ηα ππφινηπα νξίζκαηα ζα εθθξάδνπλ νλφκαηα αξρείσλ. πλεπψο, ε
grep απηφ πνπ ζα θάλεη είλαη λα αλαδεηήζεη ηελ θαλνληθή έθθξαζε "file1.txt" κέζα ζηα αξρεία file2.txt θαη
file. Απηή ε ελέξγεηα απέρεη θαηά πνιχ απφ ηελ ελέξγεηα πνπ ζα εθηειεζηεί ρξεζηκνπνηψληαο ηα εηζαγσγηθά.
136
6.7 Αζθήζεηο γηα εμάζθεζε
ηόρνο
Δμάζθεζε κε ηηο θαλνληθέο εθθξάζεηο θαη ηελ εληνιή grep (egrep).
Άζθεζε 1
ην Γηαδξαζηηθφ ρήκα 6.13 δνθηκάζηε δηάθνξεο θαλνληθέο εθθξάζεηο. Δπίζεο, δνθηκάζηε ηηο θαλνληθέο
εθθξάζεηο "to", "t.n" θαη "a[o-t].".
Απηφ ην ρήκα
είλαη Γηαδξαζηηθφ.
Αλαηξέμηε ζηελ
ειεθηξνληθή
έθδνζε.
137
Άζθεζε 2
Απηφ ην ρήκα
είλαη Γηαδξαζηηθφ.
Αλαηξέμηε ζηελ
ειεθηξνληθή
έθδνζε.
Άζθεζε 3
Απηφ ην ρήκα
είλαη Γηαδξαζηηθφ.
Αλαηξέμηε ζηελ
ειεθηξνληθή
έθδνζε.
138
Πεηξακαηηζηείηε θαη δνθηκάζηε ηηο παξαθάησ θαλνληθέο εθθξάζεηο. Βξείηε ζε ηη αληηζηνηρεί ε θάζε
κηα:
1. 'a?'
2. '(a|b)+'
3. '.{2}'
4. '.{2,}'
5. '(.)\1'
6. '(.).*\1'
7. '(..).*\1'
8. '(.{3}).*\1'
Άζθεζε 4
File: file4
The Unix operating system was pioneered by Ken
45
AQ
Feb 9, 1999
November 25, 2003
******* position_9 34567 pos_11
bio-informatics course **** position_01
Thompson! and Dennis Ritchie at Bell && Laboratories
*in the late 1960s. One of the primary goals in
99 77 88 123
11:45
9:30
00:27
2396-044-777
the design of the UNIX? System* was to create an
environment that promoted **** efficient program
development.
2394-222-789
3:00
08:23
12:00
271.27 tty
2310-555-999
2392-022-111
-56.44
123.679
May 29, 1453 phone 2391-333-888
info-question 77.59
-.987
139
Απηφ ην ρήκα
είλαη Γηαδξαζηηθφ.
Αλαηξέμηε ζηελ
ειεθηξνληθή
έθδνζε.
Άζθεζε 5
ls -l | grep '^d'
ζα εθηειέζεη ηελ εληνιή ls -l, αιιά δελ ζα εκθαληζηεί ε έμνδόο ηεο ζην ηεξκαηηθό. Θα δνζεί ε
έμνδνο ηεο 1εο εληνιήο σο είζνδνο ζηελ επόκελε εληνιή. Η επόκελε εληνιή αλαδεηά ηηο γξακκέο
πνπ μεθηλνύλ κε ηνλ ραξαθηήξα "d". Άξα, πξαθηηθά ζα εκθαληζηνύλ κόλν νη θαηάινγνη.
asidirop@aetos:~$ cd /tmp
asidirop@aetos:/tmp$ ls -l
total 116
-rw------- 1 kvisnia x1415 57 Μάξ 23 21:11 adminer.invalid
-rw-r--r-- 1 gpseirak x1415 158 Μάξ 20 22:08 ankanogradiel
-rw-r--r-- 1 antomi x1415 1737 Μάξ 20 18:40 Domi
-rw-r--r-- 1 asidirop it 17 Μάξ 30 17:09 file1
-rw-r--r-- 1 asidirop it 25 Μάξ 30 17:09 file2
-rw-r--r-- 1 asidirop it 22 Μάξ 30 17:09 file3
-rw-r--r-- 1 aspyros x1415 28 Μάξ 21 00:07 first
-rw-r--r-- 1 asidirop it 17686 Μάξ 30 17:34 index.html
140
-rw-r--r-- 1 kxouvero x1415 93 Μάξ 25 12:01 JustATest
-rw-r--r-- 1 gkintzon x1415 41 Μάξ 20 21:13 kintzovi
drwxr-xr-x 2 asidirop it 4096 Μάξ 27 15:39 lab5
drwxr-xr-x 2 malexiou e1314 4096 Μάξ 27 12:34 lab5m
drwxr-xr-x 2 ekastia e1314 4096 Μάξ 27 12:44 lab5x
drwx------ 2 root root 16384 Ηαλ 31 2014 lost+found
-rw-r--r-- 1 arika x1314 58 Μάξ 25 21:59 TEST
asidirop@aetos:/tmp$ ls -l | grep '^d'
drwxr-xr-x 2 asidirop it 4096 Μάξ 27 15:39 lab5
drwxr-xr-x 2 malexiou e1314 4096 Μάξ 27 12:34 lab5m
drwxr-xr-x 2 ekastia e1314 4096 Μάξ 27 12:44 lab5x
drwx------ 2 root root 16384 Ηαλ 31 2014 lost+found
asidirop@aetos:/tmp$
Γεκηνπξγήζηε ζε έλαλ θαηάινγν ηεο επηινγήο ζαο ηα αξρεία f1, f2, f3, f4, f5, f6 ,f7 κε ηα εμήο
δηθαηψκαηα:
f1, 757
f2, 313
f3, 010
f4, 642
f5, 551
f6, 133
f7, 111
Δλαιιαθηηθά, δνθηκάζηε ηηο θαλνληθέο εθθξάζεηο ζην παξαθάησ πεξηβάιινλ (Γηαδξαζηηθφ ρήκα
6.17).
141
Απηφ ην ρήκα
είλαη Γηαδξαζηηθφ.
Αλαηξέμηε ζηελ
ειεθηξνληθή
έθδνζε.
Άζθεζε 6
πλδεζείηε ζηνλ ππνινγηζηή aetos (ή ζε φπνην ζχζηεκα κε πνιινχο ρξήζηεο έρεηε πξφζβαζε). Θεσξήζηε φηη
ζην 5ν πεδίν ηνπ αξρείνπ /etc/passwd βξίζθεηαη ην νλνκαηεπψλπκν ρξήζηε κε πξψην ην «Δπώλπκν»«θελό
δηάζηεκα»«Όλνκα». Σν πξψην πεδίν πεξηέρεη ην φλνκα ρξήζηε (username). Σα πεδία κεηαμχ ηνπο
δηαρσξίδνληαη κε ":". Διέγρνληαο απηφ ην αξρείν θαη θάλνληαο ρξήζε ηεο εληνιήο egrep (ρξεζηκνπνηήζηε ηελ
επηινγή -i, γηα λα κε γίλεηαη δηάθξηζε κεηαμχ θεθαιαίσλ θαη πεδψλ), λα βξείηε φινπο ηνπο ρξήζηεο ηνπ
ζπζηήκαηνο πνπ:
1. Σνπιάρηζηνλ ηα 7 πξψηα γξάκκαηα ηνπ επηζέηνπ ηνπο απνηεινχλ κέξνο θαη ηνπ νλφκαηνο ρξήζηε
(username) ηνπο.
2. Σνπιάρηζηνλ ηα 4 πξψηα γξάκκαηα ηνπ επηζέηνπ ηνπο θαη ηα 4 πξψηα γξάκκαηα ηνπ νλφκαηφο ηνπο
απνηεινχλ κέξνο θαη ηνπ νλφκαηνο ρξήζηε (username) ηνπο
3. Σνπιάρηζηνλ ηα 5 πξψηα γξάκκαηα ηνπ επηζέηνπ ηνπο θαη ηα 5 πξψηα γξάκκαηα ηνπ νλφκαηφο ηνπο
απνηεινχλ κέξνο θαη ηνπ νλφκαηνο ρξήζηε (username) ηνπο
εκείσζε: Γηα ηηο πεξηπηψζεηο 2 θαη 3 ζα πξέπεη λα ζπλδπάζεηε δπν εληνιέο egrep, παξάδεηγκα:
ε πξψηε εληνιή ζα βξεη ηηο γξακκέο πνπ μεθηλνχλ κε ην γξάκκα “a”. Απηά ηα απνηειέζκαηα ζα δνζνχλ σο
είζνδνο ζηελ επφκελε εληνιή, ε νπνία ζα εληνπίζεη ηηο γξακκέο πνπ ηειεηψλνπλ ζε “b”. Πξνζνρή, ζηε
δεχηεξε εληνιή δελ μαλανξίδεηαη φλνκα αξρείνπ.
142
6.8 Αλαθνξέο
[1] http://www.regular-expressions.info/
[2] GNU User Commands Reference Manual: grep, egrep, fgrep, rgrep commands.
[3] WikiPedia. Regular expression, February 2015. [ http://en.wikipedia.org/wiki/Regular_expression ]
143
Κεθάιαην 7
7.1 Γηεξγαζίεο
Μηα δηεξγαζία (process) είλαη έλα ζηηγκηφηππν ελφο πξνγξάκκαηνο πνπ βξίζθεηαη ζε εθηέιεζε. Κάζε
δηεξγαζία έρεη ηνλ δηθφ ηεο «ρψξν» κλήκεο (memory space). Με απιά ιφγηα, φηαλ κηα δηεξγαζία πξνζπαζεί
λα δηαβάζεη ην πεξηερφκελν ηεο ζέζεο κλήκεο 10, ελλνείηαη φηη ζα δηαβάζεη ηε ζέζε κλήκεο 10 απφ ηε κλήκε
πνπ έρεη εθρσξεζεί ζηε ζπγθεθξηκέλε δηεξγαζία θαη φρη ηελ απφιπηε δηεχζπλζε κλήκεο 10 ηνπ ππνινγηζηή.
Πνιιέο θνξέο αληί ηνπ φξνπ δηεξγαζία ρξεζηκνπνηείηαη θαη ν φξνο εξγαζία (task). Γηα παξάδεηγκα, ν
“Task Manager” («Γηαρεηξηζηήο Δξγαζηψλ») ηνπ ιεηηνπξγηθνχ ζπζηήκαηνο ησλ Microsoft Windows καο
δείρλεη ηηο ελεξγέο δηεξγαζίεο. Δπίζεο, ππάξρεη ν φξνο “multi-tasking” Λεηηνπξγηθφ χζηεκα. Όκσο, ν φξνο
εξγαζία (task) θαίλεηαη πσο ηείλεη πιένλ λα εγθαηαιεηθζεί θαη ρξεζηκνπνηείηαη ν φξνο δηεξγαζία (process).
Μηα απφ ηηο θχξηεο αξκνδηφηεηεο ηνπ Λεηηνπξγηθνχ πζηήκαηνο είλαη ε δηαρείξηζε ησλ δηεξγαζηψλ
[ 4, 3, 5 ]. Σν Λεηηνπξγηθφ χζηεκα δεκηνπξγεί, «θαηαζηξέθεη», θαη ζπγρξνλίδεη ηηο δηεξγαζίεο. Γηα
παξάδεηγκα, φηαλ ν ρξήζηεο πιεθηξνινγεί κηα εληνιή (πρ ηελ ls) ζην θέιπθνο, ηφηε ην θέιπθνο δίλεη ηελ
νδεγία ζηνλ ππξήλα λα δεκηνπξγήζεη κηα λέα δηεξγαζία απφ ην εθηειέζηκν αξρείν "ls". Ο ππξήλαο ζα θάλεη
ηηο απαξαίηεηεο ελέξγεηεο, ψζηε λα δεκηνπξγεζεί ε λέα δηεξγαζία.
Μηα δηεξγαζία, αθνχ έρεη δεκηνπξγεζεί, κπνξεί λα βξίζθεηαη ζε δηάθνξεο θαηαζηάζεηο. Ζ πξνθαλήο
θαηάζηαζε είλαη απηή θαηά ηελ νπνία βξίζθεηαη ζε εθηέιεζε. Χζηφζν, δελ είλαη ε κνλαδηθή. Μηα δηεξγαζία
κπνξεί λα βξίζθεηαη ζε θαηάζηαζε αλακνλήο, γηα λα δηαβάζεη θάηη απφ ην δίθηπν. Καηά ηε δηάξθεηα ηνπ
ρξφλνπ αλακνλήο ζα ήηαλ ζπαηάιε πφξσλ απηή ε δηεξγαζία λα απαζρνιεί ηελ Κεληξηθή Μνλάδα
Δπεμεξγαζίαο (ΚΜΔ). Έηζη κπαίλεη ζε θαηάζηαζε “blocked”, ψζηε λα κελ απαζρνιήζεη ηελ ΚΜΔ, κέρξη λα
ιάβεη ηελ απάληεζε πνπ πεξηκέλεη απφ ην δίθηπν, άξα ζα κπνξεί λα ζπλερίζεη ηελ εθηέιεζή ηεο.
ηα πεξηζζφηεξα ιεηηνπξγηθά ζπζηήκαηα έρνπκε ηηο εμήο θαηαζηάζεηο φπσο θαίλνληαη ζην ρήκα
7.1:
145
Created Terminated
Main Memory
Running
Waiting Blocked
Swapped Swapped
out and out and
Waiting Blocked
Swap Memory
Ο ππξήλαο δηαηεξεί ζηε κλήκε ηνπ κηα ιίζηα κε φιεο ηηο δηεξγαζίεο, ηηο νπνίεο θαη ρεηξίδεηαη. Γηα
θάζε δηεξγαζία ν ππξήλαο δηαηεξεί έλα ζχλνιν πιεξνθνξηψλ:
7.1.1 Η εληνιή ps
H εληνιή ps [2] ρξεζηκνπνηείηαη γηα λα δεη ν ρξήζηεο ηηο δηεξγαζίεο πνπ εθηεινχληαη ή γηα λα δεη
πιεξνθνξίεο γη’ απηέο.
146
Ζ ζχληαμε ηεο εληνιήο ps είλαη σο εμήο:
ps [options]
Καηά ηε ρξήζε ηεο εληνιήο ρξεηάδεηαη ηδηαίηεξε πξνζνρή ζηε ζχληαμε ησλ νξηζκάησλ, δηφηη θάπνηεο
ζεκαίεο απαηηνχλ ηελ χπαξμε ηεο παχιαο (-), ελψ θάπνηεο άιιεο φρη. Αθνινπζνχλ νξηζκέλα παξαδείγκαηα
ρξήζεο ηεο εληνιήο κε ζπλήζε νξίζκαηα, αιιά γηα ηηο πιήξεο δπλαηφηεηεο ηεο εληνιήο ζα πξέπεη λα
αλαηξέμεηε ζην εγρεηξίδην ρξήζεο ηεο εληνιήο. Δπίζεο, πξέπεη λα αλαθεξζεί φηη ππάξρνπλ πνιιέο
παξαιιαγέο ηεο εληνιήο (ζε δηάθνξεο παξαιιαγέο ηνπ UNIX) νη νπνίεο δελ είλαη ζπκβαηέο κεηαμχ ηνπο.
Αθφκε κπνξεί λα ππάξρνπλ δηαθνξέο ζε δηαθνξεηηθέο εθδφζεηο γηα ην ίδην ιεηηνπξγηθφ. πλεπψο ζα πξέπεη
λα γίλεηαη πξνζεθηηθά ε ρξήζε ηεο θαη ζπκβνπιεπφκελνη πάληα ην εγρεηξίδην ρξήζεο.
asidirop@aetos:~$ ps uxww
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
asidirop 4041 0.0 0.0 11116 1172 ? SNs 20:15 0:00 /bin/sh -c (cd
/home/staff/ektaktoi/asidirop/public_html/rss_notifier/bin;./r2e run)
asidirop 4046 0.0 0.0 11116 632 ? SN 20:15 0:00 /bin/sh -c (cd
/home/staff/ektaktoi/asidirop/public_html/rss_notifier/bin;./r2e run)
asidirop 4049 0.0 0.0 11124 1348 ? SN 20:15 0:00 /bin/sh ./r2e run
asidirop 4057 42.0 0.4 134488 22488 ? SNl 20:15 2:28 python rss2email.py
feeds.dat run
asidirop 7160 0.0 0.0 16872 1144 pts/0 RN+ 20:20 0:00 ps uxww
asidirop 31887 0.0 0.0 97344 1648 ? SN 18:44 0:00 sshd: asidirop@pts/0
asidirop 31892 0.0 0.0 19840 2120 pts/0 SNs 18:44 0:00 -bash
asidirop@aetos:~$ ps lxww
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 1143 4041 4034 25 5 11116 1172 - SNs ? 0:00 /bin/sh -c
(cd /home/staff/ektaktoi/asidirop/public_html/rss_notifier/bin;./r2e run)
1 1143 4046 4041 25 5 11116 632 - SN ? 0:00 /bin/sh -c
(cd /home/staff/ektaktoi/asidirop/public_html/rss_notifier/bin;./r2e run)
0 1143 4049 4046 25 5 11124 1348 - SN ? 0:00 /bin/sh
./r2e run
0 1143 4057 4049 25 5 134488 22488 - SNl ? 3:39 python
rss2email.py feeds.dat run
0 1143 8967 31892 25 5 8456 744 - RN+ pts/0 0:00 ps lxww
5 1143 31887 31832 25 5 97344 1648 ? SN ? 0:00 sshd:
asidirop@pts/0
0 1143 31892 31887 25 5 19840 2120 - SNs pts/0 0:00 -bash
ην παξαπάλσ παξάδεηγκα ρξεζηκνπνηνχληαη νη ίδηεο ζεκαίεο κε ηελ πξνεγνχκελε πεξίπησζε εθηφο
απφ ην l πνπ αληηθαζηζηά ην u. Σν απνηέιεζκα είλαη ην ίδην, αιιά δηαθέξεη σο πξνο ηηο ζηήιεο πνπ
ρξεζηκνπνηνχληαη ζηελ εθηχπσζε.
147
asidirop@aetos:~$ ps uw -e
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 8404 160 ? Ss Apr03 0:43 init [2]
root 2 0.0 0.0 0 0 ? S Apr03 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Apr03 0:26 [ksoftirqd/0]
root 6 0.0 0.0 0 0 ? S Apr03 0:05 [migration/0]
root 7 0.0 0.0 0 0 ? S Apr03 0:02 [watchdog/0]
root 8 0.0 0.0 0 0 ? S Apr03 0:05 [migration/1]
root 10 0.0 0.0 0 0 ? S Apr03 0:21 [ksoftirqd/1]
root 12 0.0 0.0 0 0 ? S Apr03 0:01 [watchdog/1]
root 13 0.0 0.0 0 0 ? S Apr03 0:04 [migration/2]
......................
root 31832 0.0 0.0 97344 3876 ? SNs 18:44 0:00 sshd: asidirop
asidirop 31887 0.0 0.0 97344 1648 ? SN 18:44 0:00 sshd: asidirop
asidirop 31892 0.0 0.0 19840 2120 pts/0 SNs 18:44 0:00 -bash
psarnik 31944 0.0 0.0 19600 1652 ? S 20:11 0:00 imap [psarnik]
www-data 32457 0.0 0.1 320604 7440 ? Sl 19:45 0:01 apache2
www-data 32488 0.0 0.1 320496 7308 ? Sl 19:45 0:01 apache2
www-data 32489 0.1 0.1 386072 7416 ? Sl 19:45 0:02 apache2
psarnik 32723 0.0 0.0 19680 1724 ? S 20:12 0:00 imap [psarnik]
To w ζα εκθαλίζεη ζρεδφλ νιφθιεξε ηελ εληνιή θαη ηα νξίζκαηά ηεο (φζα ρσξάλε ζην ηεξκαηηθφ).
Σν -e εκθαλίδεη φιεο ηηο δηεξγαζίεο φισλ ησλ ρξεζηψλ θαη ηέινο ην u δειψλεη ηε κνξθνπνίεζε ηνπ
απνηειέζκαηνο.
asidirop@antonis-PC:~$ pstree
init-T-NetworkManager-T-dhclient
¦ L-2*[{NetworkManager}]
+-VBoxSVC-T-VirtualBox---24*[{VirtualBox}]
¦ L-11*[{VBoxSVC}]
+-VBoxXPCOMIPCD
+-VirtualBox---5*[{VirtualBox}]
+-acpid
+-apache2---6*[apache2]
+-atd
+-avahi-daemon---avahi-daemon
+-avgd-T-avgavid---3*[{avgavid}]
¦ +-avgoad-T-avgscand---6*[{avgscand}]
¦ ¦ L-6*[{avgoad}]
¦ +-avgsched---3*[{avgsched}]
¦ +-avgtcpd-T-avgscand---6*[{avgscand}]
¦ ¦ L-8*[{avgtcpd}]
¦ L-5*[{avgd}]
+-bamfdaemon
+-3*[bonobo-activati---2*[{bonobo-activat}]]
+-chrome-T-chrome
148
¦ +-chrome---{chrome}
¦ +-chrome---2*[{chrome}]
¦ L-24*[{chrome}]
+-chrome-T-8*[chrome---2*[{chrome}]]
¦ L-2*[chrome---3*[{chrome}]]
+-2*[clock-applet---{clock-applet}]
+-console-kit-dae---64*[{console-kit-da}]
+-cpufreq-applet---{cpufreq-applet}
+-cron
+-cupsd
+-5*[dbus-daemon]
+-3*[dbus-launch]
7.1.3 Οη Γηεξγαζίεο
Όπσο έγηλε θαλεξφ απφ ην πξνεγνχκελν παξάδεηγκα, θάζε δηεξγαζία έρεη κηα γνληθή δηεξγαζία. Γνληθή
δηεξγαζία είλαη ε δηεξγαζία πνπ έδσζε «εληνιή» ζην Λεηηνπξγηθφ χζηεκα λα δεκηνπξγεζεί ε λέα. Ζ
ηαπηφηεηα ηεο θάζε δηεξγαζίαο είλαη ην PID (Process ID) θαη γηα θάζε δηεξγαζία ππάξρεη ε πιεξνθνξία PID
θαη PPID (Parent Process ID). Γελ ππάξρεη θακία δηεξγαζία ρσξίο γνλέα εθηφο απφ ηε δηεξγαζία 0 (κεδέλ). Ζ
δηεξγαζία 0 (κεδέλ) δελ έρεη γνλέα θαη είλαη ε πξψηε δηεξγαζία πνπ εθηειείηαη κε ην boot (εθθίλεζε) ηνπ
ζπζηήκαηνο. Ζ δηεξγαζία 0 αλαθέξεηαη ζπλήζσο θαη σο “swapper” ή “sched”. Δίλαη ν ππξήλαο θαη δελ
εκθαλίδεηαη ζηε ιίζηα ησλ δηεξγαζηψλ.
Ση γίλεηαη φκσο αλ ν γνλέαο κηαο δηεξγαζίαο ηεξκαηίζεη πξηλ ηεξκαηίζνπλ ηα ηέθλα; Σα ηέθλα ζα έρνπλ
σο PPID κηα δηεξγαζία πνπ δελ ππάξρεη πιένλ; Πξνθαλψο φρη. Ζ ζπκπεξηθνξά ζε απηήλ ηελ πεξίπησζε
εμαξηάηαη απφ ηελ έθδνζε ηνπ Λεηηνπξγηθνχ πζηήκαηνο. πλήζεο ηαθηηθή είλαη λα νξίδεηαη σο γνλέαο ζηηο
«νξθαλέο» δηεξγαζίεο ε δηεξγαζία 1, δειαδή ε init.
1. Ο boot loader, δειαδή ην πξφγξακκα πνπ θνξηψλεηαη απφ ηνλ boot sector ηνπ δίζθνπ, μεθηλά ηνλ
ππξήλα (κε PID 0).
2. Ο ππξήλαο μεθηλά ηε δηεξγαζία init. Απηή, αλάινγα κε ηηο ξπζκίζεηο πνπ είλαη απνζεθεπκέλεο ζα
ελεξγνπνηήζεη φιεο ηηο ππφινηπεο δηεξγαζίεο ζην ζχζηεκά καο.
149
Ο δεχηεξνο ηξφπνο είλαη κε ηε δηαδηθαζία exec. Όηαλ κηα δηεξγαζία θάλεη exec κε φξηζκα έλα
εθηειέζηκν πξφγξακκα (θαιεί ηελ αληίζηνηρε ζπλάξηεζε ηνπ ππξήλα), ηφηε δεκηνπξγείηαη κηα λέα δηεξγαζία
πνπ ηξέρεη ην εθηειέζηκν. Ζ λέα δηεξγαζία θιεξνλνκεί ηα πάληα απφ ηε γνληθή ηεο, αθφκε θαη ηα PID, PPID.
Ζ παιηά δηεξγαζία θαηαζηξέθεηαη, θαη νπζηαζηηθά αληηθαζίζηαηαη απφ ηε λέα.
πλήζσο νη ιεηηνπξγίεο fork/exec εθηεινχληαη ζε ζπλδπαζκφ. Γηα παξάδεηγκα, έζησ φηη ζε έλα
θέιπθνο έρεη πιεθηξνινγήζεη ν ρξήζηεο ηελ εληνιή ls. Σν θέιπθνο, αθνχ εξκελεχζεη ηελ εληνιή, θάλεη
fork ηνλ εαπηφ ηνπ. Ζ γνληθή δηεξγαζία ηνπ θειχθνπο απιά πεξηκέλεη ηε ζπγαηξηθή λα ηεξκαηίζεη. Ζ
ζπγαηξηθή δηεξγαζία ηνπ θειχθνπο θάλεη “exec /bin/ls”, νπφηε θαη ηειηθά εθηειείηαη ε εληνιή ls.
H ls ζα έρεη σο PPID ην PID ηνπ γνληθνχ θειχθνπο. Με ηνλ ίδην ηξφπν έλα πξφγξακκα-δηεξγαζία κπνξεί λα
εθηειέζεη θάπνην άιιν πξφγξακκα. ην Γηαδξαζηηθφ ρήκα 7.2 θαίλεηαη ε δηαδηθαζία εθηέιεζεο ηεο εληνιήο
“whoami” απφ ην θέιπθνο. Κάληε θιηθ ζην θνπκπί “1. whoami”, γηα λα μεθηλήζεη ε πξνβνιή. ε θάζε βήκα
ζα πξέπεη λα παηάηε «Δπφκελν».
150
Πίλαθαο 7.1: Λίζηα κε ηα ζήκαηα από ην ιεηηνπξγηθό Linux.
Αξηζκόο ζην
ήκα Πεξηγξαθή
"Linux x86"
SIGABRT Process aborted 6
SIGALRM Signal raised by alarm 14
SIGBUS Bus error: "access to undefined portion of memory object" 7
SIGCHLD Child process terminated, stopped (or continued*) 17
SIGCONT Continue if stopped 18
SIGFPE Floating point exception: "erroneous arithmetic operation" 8
SIGHUP Hangup 1
SIGILL Illegal instruction 4
SIGINT Interrupt 2
SIGKILL Kill (terminate immediately) 9
SIGPIPE Write to pipe with no one reading 13
SIGQUIT Quit and dump core 3
SIGSEGV Segmentation violation 11
SIGSTOP Stop executing temporarily 19
SIGTERM Termination (request to terminate) 15
SIGTSTP Terminal stop signal 20
SIGTTIN Background process attempting to read from tty ("in") 21
SIGTTOU Background process attempting to write to tty ("out") 22
SIGUSR1 User-defined 1 10
SIGUSR2 User-defined 2 12
SIGPOLL Pollable event 29
SIGPROF Profiling timer expired 27
SIGSYS Bad syscall 31
SIGTRAP Trace/breakpoint trap 5
SIGURG Urgent data available on socket 23
Signal raised by timer counting virtual time: "virtual timer
SIGVTALRM 26
expired"
SIGXCPU CPU time limit exceeded 24
SIGXFSZ File size limit exceeded 25
151
Κάπνηα ζήκαηα έρεη λφεκα λα ηα ζηείιεη ν ρξήζηεο ζε κηα δηεξγαζία, ελψ θάπνηα άιια φρη. Απηά ηα
δεχηεξα ρξεζηκνπνηνχληαη γηα εζσηεξηθνχο ζθνπνχο απφ ην ιεηηνπξγηθφ ζχζηεκα.
Σα πεξηζζφηεξν ζπρλά ρξεζηκνπνηνχκελα ζήκαηα είλαη:
15 (TERM): Γίλεη ηελ νδεγία ζηε δηεξγαζία λα ηεξκαηίζεη. Ζ δηεξγαζία ζα ηεξκαηίζεη αλ ην ζέιεη.
9 (KILL): Σεξκαηίδεη βίαηα ηε δηεξγαζία. Ζ δηεξγαζία ζα ηεξκαηίζεη είηε ην ζέιεη είηε φρη.
19 (STOP): Γίλεη ηελ νδεγία ζηε δηεξγαζία (νπζηαζηηθά ζην ιεηηνπξγηθφ) λα κπεη ζε θαηάζηαζε
παχζεο (STOP mode). H δηεξγαζία ζηακαηά λα εθηειείηαη, αιιά δελ ηεξκαηίδεηαη.
18 (CONT): Γίλεη ηελ νδεγία ζηε δηεξγαζία πνπ ήηαλ ζε θαηάζηαζε παχζεο λα ζπλερίζεη λα
εθηειείηαη.
Κάπνηα ζήκαηα κπνξνχλ λα ζηαινχλ ζε κηα δηεξγαζία θαη απφ ην πιεθηξνιφγην (δεδνκέλνπ φηη ε
δηεξγαζία εθηειείηαη ζε έλα ηεξκαηηθφ). Απηά είλαη:
asidirop@aetos:~$ ls -l /proc
total 0
dr-xr-xr-x 7 root root 0 Apr 26 17:11 1
dr-xr-xr-x 7 root root 0 Apr 26 17:11 10
dr-xr-xr-x 7 dovecot dovecot 0 Apr 26 20:03 10359
dr-xr-xr-x 7 dovecot dovecot 0 Apr 26 19:48 10566
dr-xr-xr-x 7 dimver x0607 0 Apr 26 19:48 10617
dr-xr-xr-x 7 dovecot dovecot 0 Apr 26 19:48 10618
dr-xr-xr-x 7 dimver x0607 0 Apr 26 19:48 10620
dr-xr-xr-x 7 dimver x0607 0 Apr 26 19:49 10656
dr-xr-xr-x 7 dimver x0607 0 Apr 26 19:49 10682
dr-xr-xr-x 7 kourou conit 0 Apr 26 08:01 10717
dr-xr-xr-x 7 dovecot dovecot 0 Apr 26 20:04 11076
dr-xr-xr-x 7 dovecot dovecot 0 Apr 26 16:02 1122
dr-xr-xr-x 7 bind bind 0 Apr 26 10:58 11570
dr-xr-xr-x 7 root root 0 Apr 26 20:04 11669
dr-xr-xr-x 7 root root 0 Apr 26 13:15 1176
dr-xr-xr-x 7 root root 0 Apr 26 18:05 11798
dr-xr-xr-x 7 dovecot dovecot 0 Apr 26 18:06 11866
Όπσο θαίλεηαη ζην παξαπάλσ παξάδεηγκα, κέζα ζηνλ θαηάινγν /proc ππάξρνπλ πνιινί
ππνθαηάινγνη κε νλφκαηα αξηζκνχο. Καζέλαο απφ ηνπο θαηαιφγνπο απηνχο αληηζηνηρεί ζε κηα δηεξγαζία. Σν
φλνκα ηνπ θαηαιφγνπ είλαη ν θσδηθφο ηεο δηεξγαζίαο (PID) ζηελ νπνία αληηζηνηρεί. ε απηφ ην ζεκείν λα
παξαηεξήζνπκε φηη σο κέγεζνο γηα ηνλ θάζε θαηάινγν θαίλεηαη ην κέγεζνο κεδέλ.
ε θάζε έλαλ απφ απηνχο ηνπο θαηαιφγνπο κπνξνχλ λα βξεζνχλ φιεο νη πιεξνθνξίεο πνπ δηαηεξεί ν
ππξήλαο γηα ηελ αληίζηνηρε δηεξγαζία.
asidirop@aetos:~$ ls -l /proc/22967
152
total 0
dr-xr-xr-x 2 asidirop conit 0 Apr 26 20:19 attr
-r-------- 1 asidirop conit 0 Apr 26 20:19 auxv
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 cgroup
--w------- 1 asidirop conit 0 Apr 26 20:19 clear_refs
-r--r--r-- 1 asidirop conit 0 Apr 26 20:09 cmdline
-rw-r--r-- 1 asidirop conit 0 Apr 26 20:19 comm
-rw-r--r-- 1 asidirop conit 0 Apr 26 20:19 coredump_filter
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 cpuset
lrwxrwxrwx 1 asidirop conit 0 Apr 26 20:19 cwd ->
/home/staff/ektaktoi/asidirop
-r-------- 1 asidirop conit 0 Apr 26 20:19 environ
lrwxrwxrwx 1 asidirop conit 0 Apr 26 20:19 exe -> /bin/bash
dr-x------ 2 asidirop conit 0 Apr 26 20:09 fd
dr-x------ 2 asidirop conit 0 Apr 26 20:19 fdinfo
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 io
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 limits
-rw-r--r-- 1 asidirop conit 0 Apr 26 20:19 loginuid
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 maps
-rw------- 1 asidirop conit 0 Apr 26 20:19 mem
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 mountinfo
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 mounts
-r-------- 1 asidirop conit 0 Apr 26 20:19 mountstats
dr-xr-xr-x 7 asidirop conit 0 Apr 26 20:19 net
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 numa_maps
-rw-r--r-- 1 asidirop conit 0 Apr 26 20:19 oom_adj
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 oom_score
-rw-r--r-- 1 asidirop conit 0 Apr 26 20:19 oom_score_adj
-r-------- 1 asidirop conit 0 Apr 26 20:19 pagemap
-r-------- 1 asidirop conit 0 Apr 26 20:19 personality
lrwxrwxrwx 1 asidirop conit 0 Apr 26 20:19 root -> /
-rw-r--r-- 1 asidirop conit 0 Apr 26 20:19 sched
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 sessionid
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 smaps
-r-------- 1 asidirop conit 0 Apr 26 20:19 stack
-r--r--r-- 1 asidirop conit 0 Apr 26 20:09 stat
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 statm
-r--r--r-- 1 asidirop conit 0 Apr 26 20:09 status
-r-------- 1 asidirop conit 0 Apr 26 20:19 syscall
dr-xr-xr-x 3 asidirop conit 0 Apr 26 20:19 task
-r--r--r-- 1 asidirop conit 0 Apr 26 20:19 wchan
Παξαπάλσ βιέπνπκε φηη ππάξρνπλ 38 αξρεία πνπ πεξηέρνπλ δηάθνξεο πιεξνθνξίεο γηα θάζε
δηεξγαζία. Καη πάιη πξέπεη λα παξαηεξεζεί φηη φια απηά ηα αξρεία θαίλεηαη λα έρνπλ κέγεζνο κεδέλ.
Έλα ρξήζηκν αξρείν είλαη ην αξρείν stat, ηνπ νπνίνπ ηα πεξηερφκελα εκθαλίδνληαη παξαθάησ γηα
κηα ηπραία δηεξγαζία. Βιέπνπκε φηη πεξηέρνληαη πιεξνθνξίεο πνπ αθνξνχλ ηελ θαηάζηαζε ηεο δηεξγαζίαο,
θσδηθνί (PID, PPID, UID θ.ά.), θαζψο θαη πιεξνθνξίεο γηα ηε ρξήζε κλήκεο απφ ηε δηεξγαζία. Ζ
εληνιή ps ζηελ νπζία δηαβάδεη απηέο ηηο πιεξνθνξίεο θαη ηηο εκθαλίδεη κε κνξθή πνπ νξίδεηαη απφ ηα
νξίζκαηα πνπ δίλεη ν ρξήζηεο.
153
asidirop@aetos:~$ more /proc/22967/status
Name: bash
State: S (sleeping)
Tgid: 22967
Pid: 22967
PPid: 22963
TracerPid: 0
Uid: 1143 1143 1143 1143
Gid: 993 993 993 993
FDSize: 256
Groups: 993
VmPeak: 19904 kB
VmSize: 19840 kB
VmLck: 0 kB
VmHWM: 2096 kB
VmRSS: 2096 kB
VmData: 424 kB
VmStk: 136 kB
VmExe: 868 kB
VmLib: 1972 kB
VmPTE: 60 kB
VmSwap: 0 kB
Threads: 1
SigQ: 0/16382
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000010000
SigIgn: 0000000000384004
SigCgt: 000000004b813efb
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Cpus_allowed: ff
Cpus_allowed_list: 0-7
Mems_allowed: 00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 152
nonvoluntary_ctxt_switches: 1
γηα λα δψζνπλ πιεξνθνξίεο απφ ην ζχζηεκα πξνο ηνλ ρξήζηε (πρ. USER, SHELL, PWD).
γηα λα δψζεη ν ρξήζηεο πιεξνθνξίεο (ξπζκίζεηο) ζην ζχζηεκα ή ζε δηεξγαζίεο (πρ. PATH, LANG,
LS_COLORS).
154
γηα λα δψζεη κηα δηεξγαζία πιεξνθνξίεο ζε θάπνηα ζπγαηξηθή ηεο (πρ:
XDG_SESSION_COOKIE=ad911ed4a37cbe23249debec4bc87826-1335941063.445049-1438191725).
Όιεο νη Μεηαβιεηέο Πεξηβάιινληνο θιεξνδνηνχληαη απφ ηηο δηεξγαζίεο ζηηο ζπγαηξηθέο ηνπο. Έηζη,
ζηελ πξαγκαηηθφηεηα φιεο νη δηεξγαζίεο θιεξνλνκνχλ ηηο κεηαβιεηέο πεξηβάιινληνο πνπ αξρηθνπνηνχληαη
απφ ηε δηεξγαζία init. Πξνθαλψο ε θάζε δηεξγαζία κπνξεί λα ηξνπνπνηήζεη ηηο Μεηαβιεηέο
Πεξηβάιινληφο ηεο, νη νπνίεο βέβαηα ζα θιεξνδνηεζνχλ ζηηο ζπγαηξηθέο ηεο.
Μέζα απφ ην θέιπθνο ν ρξήζηεο κπνξεί λα εκθαλίζεη ηηο κεηαβιεηέο πεξηβάιινληνο
ρξεζηκνπνηψληαο ηελ εληνιή env φπσο θαίλεηαη παξαθάησ:
asidirop@aetos:~$ env
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=94.68.138.167 55038 22
SSH_TTY=/dev/pts/0
USER=asidirop
MAILCHECK=3600
MAIL=/var/mail/asidirop
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/home/staff/ektaktoi/asidi
rop/bin
PWD=/home/staff/ektaktoi/asidirop
LANG=en_US.UTF-8
SHLVL=1
HOME=/home/staff/ektaktoi/asidirop
LOGNAME=asidirop
SSH_CONNECTION=94.68.138.167 55038 195.251.123.232 22
DISPLAY=:0
_=/usr/bin/env
Μέζα απφ ην θέιπθνο Bourne Shell κπνξεί ν ρξήζηεο λα ηξνπνπνηήζεη ηηο κεηαβιεηέο πεξηβάιινληνο
ηεο δηεξγαζίαο πνπ αληηζηνηρεί ζην θέιπθνο. Απηφ κπνξεί λα γίλεη απιά κε κηα εληνιή εθρψξεζεο φπσο
θαίλεηαη παξαθάησ:
asidirop@aetos:~$ LANG=el_GR.UTF-8
asidirop@aetos:~$ env
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=94.68.138.167 55038 22
SSH_TTY=/dev/pts/0
USER=asidirop
MAILCHECK=3600
MAIL=/var/mail/asidirop
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/home/staff/ektaktoi/asidi
rop/bin
PWD=/home/staff/ektaktoi/asidirop
LANG=el_GR.UTF-8
SHLVL=1
HOME=/home/staff/ektaktoi/asidirop
LOGNAME=asidirop
SSH_CONNECTION=94.68.138.167 55038 195.251.123.232 22
DISPLAY=:0
_=/usr/bin/env
155
Δάλ ν ρξήζηεο ζέιεη λα νξίζεη κηα λέα κεηαβιεηή πεξηβάιινληνο, ζα πξέπεη λα ρξεζηκνπνηήζεη ηελ
εληνιή export. Απηφ κπνξεί λα γίλεη κε δπν ηξφπνπο. Ο πξψηνο ηξφπνο είλαη φπσο παξαθάησ, δειαδή
νξίδνληαο αξρηθά ηε κεηαβιεηή ηνπ θειχθνπο TEST θαη κεηά εθηειψληαο ηελ εληνιή export. Οπζηαζηηθά
δίλεη ζην θέιπθνο ηελ νδεγία λα κεηαηξέςεη ηελ ηνπηθή κεηαβιεηή TEST ζε Μεηαβιεηή Πεξηβάιινληνο.
asidirop@aetos:~$ TEST=xyz
asidirop@aetos:~$ export TEST
asidirop@aetos:~$ env
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=94.68.138.167 55038 22
SSH_TTY=/dev/pts/0
USER=asidirop
MAILCHECK=3600
MAIL=/var/mail/asidirop
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/home/staff/ektaktoi
/asidirop/bin
PWD=/home/staff/ektaktoi/asidirop
LANG=el_GR.UTF-8
TEST=xyz
SHLVL=1
Ο ελαιιαθηηθφο ηξφπνο είλαη λα ρξεζηκνπνηεζεί ε εληνιή export ζηελ ίδηα εληνιή κε ηελ
εθρψξεζε:
Άιια θειχθε εθηφο ηνπ Bourne Shell παξέρνπλ άιινπο ηξφπνπο γηα ηνλ ρεηξηζκφ ησλ κεηαβιεηψλ
πεξηβάιινληνο. Γηα παξάδεηγκα ζηα θειχθε ηεο νηθνγέλεηαο csh ρξεζηκνπνηείηαη ε εληνιή setenv. Μέζα
απφ πξνγξάκκαηα κπνξεί ν πξνγξακκαηηζηήο λα δηαβάζεη ή λα ηξνπνπνηήζεη ηηο κεηαβιεηέο πεξηβάιινληνο
ρξεζηκνπνηψληαο ζπλαξηήζεηο πνπ αληηζηνηρνχλ ζηηο θιήζεηο ζπζηήκαηνο setenv θαη getenv.
Δλαιιαθηηθά, αλάινγα κε ηε γιψζζα πξνγξακκαηηζκνχ κπνξεί λα παξέρεηαη θαη άιινο ηξφπνο γηα πξφζβαζε
ζηηο κεηαβιεηέο πεξηβάιινληνο, γηα παξάδεηγκα ζηε γιψζζα πξνγξακκαηηζκνχ php ππάξρεη ν
πίλαθαο $_ENV ηνλ νπνίνλ ν πξνγξακκαηηζηήο κπνξεί λα ρξεζηκνπνηήζεη, φπσο νπνηνλδήπνηε άιινλ πίλαθα
ηεο γιψζζαο.
ηηο κεηαβιεηέο πεξηβάιινληνο ππάξρεη πξφζβαζε θαη κέζσ ησλ αξρείσλ ζην /proc. Γηα θάζε
δηεξγαζία ππάξρεη ην αξρείν environ ην νπνίν πεξηέρεη ηνλ πίλαθα κεηαβιεηψλ πεξηβάιινληνο. Βέβαηα αλ
πξνζπαζήζεη ν ρξήζηεο λα δεη απηφ ην αξρείν κε κηα εληνιή cat ην απνηέιεζκα δελ εκθαλίδεηαη
"ζηνηρηζκέλν", παξφια απηά πεξηέρνληαη φιεο νη πιεξνθνξίεο.
156
asidirop@aetos:~$ ps
PID TTY TIME CMD
20870 pts/0 00:00:00 bash
29411 pts/0 00:00:00 ps
asidirop@aetos:~$ cat /proc/20870/environ
LANG=en_US.UTF-
8USER=asidiropLOGNAME=asidiropHOME=/home/staff/ektaktoi/asidiropP
ATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/gamesMAIL=/var
/mail/asidiropSHELL=/bin/bashSSH_CLIENT=94.68.138.167 55038
22SSH_CONNECTION=94.68.138.167 55038 195.251.123.232
22SSH_TTY=/dev/pts/0TERM=xterm
LANG,
LANGUAGE,
LC_CTYPE,
LC_NUMERIC,
LC_TIME,
LC_COLLATE,
LC_MONETARY,
LC_MESSAGES,
LC_PAPER,
LC_NAME,
LC_ADDRESS,
LC_TELEPHONE,
LC_MEASUREMENT,
LC_IDENTIFICATION.
Απηέο νη κεηαβιεηέο πεξηβάιινληνο ρξεζηκνπνηνχληαη απφ ηηο βηβιηνζήθεο ηνπ ζπζηήκαηνο θαη ησλ
γισζζψλ πξνγξακκαηηζκνχ γηα ηε ζσζηή εκθάληζε κελπκάησλ. Βαζηθέο κεηαβιεηέο είλαη
νη LANG θαη LANGUAGE. Απηέο νη δπν κεηαβιεηέο νξίδνπλ ηε γιψζζα επηθνηλσλίαο ησλ πξνγξακκάησλ θαη
ηνλ ρξήζηε. Κάπνηα πξνγξάκκαηα ιακβάλνπλ ππφςε ηε κεηαβιεηή LANG, ελψ θάπνηα άιια ηε κεηαβιεηή
LANGUAGE, γη' απηφ ζα πξέπεη λα ηίζεληαη θαη νη δπν ζηελ ίδηα ηηκή. Βιέπνπκε, γηα παξάδεηγκα, παξαθάησ
ηελ εκθάληζε ιαζψλ απφ ηελ εληνιή ls. ηε κηα πεξίπησζε ην κήλπκα ιάζνπο εκθαλίδεηαη ζηα Αγγιηθά,
ελψ ζηελ άιιε ζηα Διιεληθά. Γελ έρνπλ φια ηα πξνγξάκκαηα κεηαθξάζεηο γηα φιεο ηηο γιψζζεο, ζπλεπψο
πνιιέο θνξέο ε κεηάθξαζε είλαη εκηηειήο, φπσο παξαθάησ. Παξφηη ε ls εκθαλίδεη ζηα Διιεληθά ην κήλπκα:
«Γελ ππάξρεη ηέηνην αξρείν ή θαηάινγνο», εκθαλίδεηαη θαη ην κήλπκα “cannot access”, γηα ην νπνίν δελ έρεη
νξηζηεί ε θαηάιιειε κεηάθξαζε ζηελ εληνιή ls.
157
asidirop@aetos:~$ ls /dfg
ls: cannot access /dfg: No such file or directory
asidirop@aetos:~$ export LANG=el_GR.UTF-8
asidirop@aetos:~$ ls /dfg
ls: cannot access /dfg: Γελ ππάξρεη ηέηνην αξρείν ή θαηάινγνο
asidirop@aetos:~$
Δπφκελε ηδηαίηεξα ζεκαληηθή κεηαβιεηή πεξηβάιινληνο είλαη ε PATH. Μέζσ απηήο νξίδεηαη ζε
πνηνπο θαηαιφγνπο ζα ςάρλεη ην θέιπθνο γηα λα βξεη ην εθηειέζηκν ηεο εληνιήο πνπ έρεη πιεθηξνινγήζεη ν
ρξήζηεο. Ζ κεηαβιεηή πεξηιακβάλεη δηαδξνκέο πξνο θαηαιφγνπο ρσξηζκέλεο κε ηνλ ραξαθηήξα ":" φπσο
παξαθάησ:
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/home/staff/ektaktoi
/asidirop/bin
Κάζε θνξά πνπ ν ρξήζηεο πιεθηξνινγεί κηα εληνιή (πρ ls), ην θέιπθνο ςάρλεη κε ηε ζεηξά φινπο
ηνπο θαηαιφγνπο πνπ νξίδνληαη ζην PATH, γηα λα βξεη ην εθηειέζηκν ηεο ls. ηελ πξψηε ζέζε πνπ ζα ην
βξεη, ζηακαηά ηελ αλαδήηεζε θαη εθηειεί ηελ εληνιή απφ ηνλ θαηάινγν πνπ βξέζεθε.
Δάλ έλα εθηειέζηκν δελ βξίζθεηαη ζην PATH (δειαδή δελ είλαη απνζεθεπκέλν ζε θαηάινγν πνπ
πεξηιακβάλεηαη ζην ΡΑΣΖ), γηα λα ην εθηειέζεη ν ρξήζηεο, ζα πξέπεη λα δψζεη ηε δηαδξνκή πξνο απηφ, είηε
απφιπηε είηε ζρεηηθή. Παξάδεηγκα, παξαθάησ ε εληνιή fsck είλαη απνζεθεπκέλε ζηνλ θαηάινγν /sbin, ν
νπνίνο δελ βξίζθεηαη ζην PATH. Έηζη, δελ κπνξεί ν ρξήζηεο λα ηελ εθηειέζεη πιεθηξνινγψληαο κφλν ην
φλνκά ηεο αιιά πξέπεη λα πιεθηξνινγήζεη ηε δηαδξνκή πξνο απηήλ.
asidirop@aetos:~$ fsck
-bash: fsck: command not found
asidirop@aetos:~$ /sbin/fsck
fsck from util-linux-ng 2.17.2
If you wish to check the consistency of an XFS filesystem or
repair a damaged filesystem, see xfs_check(8) and xfs_repair(8).
e2fsck 1.41.12 (17-May-2010)
158
Βιέπνληαο ηνλ θάθειν fd απφ ην /proc κηαο δηεξγαζίαο, κπνξεί ν ρξήζηεο λα δεη πνηα αξρεία έρεη
αλνηρηά κηα δηεξγαζία (αξθεί λα ην επηηξέπνπλ νη άδεηεο πξφζβαζεο). ην παξαθάησ παξάδεηγκα βιέπνπκε ηα
αξρεία πνπ έρεη αλνηρηά ε δηεξγαζία πνπ αληηζηνηρεί ην πξφγξακκα “firefox” (ζηελ πξαγκαηηθφηεηα είλαη
10άδεο ζηελ πεξίπησζε ηνπ firefox).
asidirop@antonis-PC:~$ ls -l /proc/10569/fd
total 0
lr-x------ 1 asidirop asidirop 64 2012-04-26 19:14 0 -> /dev/null
lrwx------ 1 asidirop asidirop 64 2012-04-26 19:14 1 ->
/home/asidirop/.xsession-errors
l-wx------ 1 asidirop asidirop 64 2012-04-26 19:14 10 -> pipe:[46911]
lrwx------ 1 asidirop asidirop 64 2012-04-26 19:14 101 -> socket:[3928988]
lrwx------ 1 asidirop asidirop 64 2012-04-26 19:14 102 -> socket:[637537]
lr-x------ 1 asidirop asidirop 64 2012-04-26 19:14 103 ->
/home/asidirop/.mozilla/firefox/9nb3c2bh.default/places.sqlite
lrwx------ 1 asidirop asidirop 64 2012-04-26 19:14 106 ->
/home/asidirop/.mozilla/firefox/9nb3c2bh.default/places.sqlite-wal
.......
Όιεο νη δηεξγαζίεο έρνπλ εμ’ νξηζκνχ ηξεηο αλνηρηέο ξνέο εηζφδνπ-εμφδνπ, νπζηαζηηθά ηξία αλνηρηά
αξρεία. Γηα παξάδεηγκα, αλ θηηάμνπκε έλα απιφ πξφγξακκα ην νπνίν δελ θάλεη ηίπνηε θαη ην εθηειέζνπκε, αλ
ειέγμνπκε ηα αλνηρηά αξρεία ζηνλ θάθειν /proc/PID/fd ζα δνχκε ηξεηο εγγξαθέο:
asidirop@antonis-PC:~$ ls -l /proc/13238/fd
total 0
lrwx------ 1 asidirop asidirop 64 Jul 17 15:46 0 -> /dev/pts/2
lrwx------ 1 asidirop asidirop 64 Jul 17 15:46 1 -> /dev/pts/2
lrwx------ 1 asidirop asidirop 64 Jul 17 15:46 2 -> /dev/pts/2
Απηφ ηζρχεη ζρεδφλ γηα φια ηα Λεηηνπξγηθά πζηήκαηα θαη πξνθαλψο δελ εμαξηάηαη απφ ηε γιψζζα
πξνγξακκαηηζκνχ κε ηελ νπνία δεκηνπξγήζεθε ην εθηειέζηκν πνπ αληηζηνηρεί ζηε δηεξγαζία. ε φιεο ηηο
γιψζζεο πξνγξακκαηηζκνχ ππάξρνπλ κεηαβιεηέο ή αληηθείκελα πνπ αληηζηνηρνχλ ζε απηέο ηηο ξνέο εηζφδνπ-
εμφδνπ. ε θάζε γιψζζα πξνγξακκαηηζκνχ κπνξεί λα αλαθέξνληαη κε δηαθνξεηηθφ φλνκα, αληηζηνηρνχλ
φκσο ζην ίδην ζηνηρείν:
159
fprintf(stdout,"TEST\n");
printf("TEST\n");
Αληίζηνηρα, φηαλ πξφθεηηαη γηα αλάγλσζε ηα δπν παξαθάησ ζηε γιψζζα C είλαη ηζνδχλακα:
fscanf(stdin,"%s",tmp);
scanf("%s",tmp);
O "file descriptor" είλαη έλαο αθέξαηνο (integer) πνπ δείρλεη ηε ζέζε ηνπ αξρείνπ ζηνλ πίλαθα κε ηα
αλνηρηά αξρεία ηεο δηεξγαζίαο. Μηα δηεξγαζία έρεη εμ νξηζκνχ ηξία αλνηρηά αξρεία ηα νπνία βξίζθνληαη ζηηο
ζέζεηο 0,1,2 ηνπ πίλαθα αλνηρηψλ αξρείσλ θαη αληηζηνηρνχλ ζηελ θαλνληθή είζνδν, θαλνληθή έμνδν θαη έμνδν
ιαζψλ, φπσο θαίλεηαη ζηνλ Πίλαθα 7.2.
Θέζε Αληηζηνηρία
0 Καλνληθή είζνδνο (stdin)
1 Καλνληθή έμνδνο (stdout)
2 Έμνδνο Λαζψλ (stderr)
Σν Λεηηνπξγηθφ χζηεκα θξαηάεη ζε θάζε ζέζε ηνπ πίλαθα δηάθνξεο πιεξνθνξίεο πνπ αληηζηνηρνχλ
ζην αλνηρηφ αξρείν φπσο ηε ζέζε ηνπ Κέξζνξα ζην αξρείν, ηελ θαηάζηαζε αλνίγκαηνο (read, write, append),
θ.ά.
Μπνξνχκε λα ειέγμνπκε πνηα αξρεία έρεη αλνηρηά έλα θέιπθνο θαζψο εθηειείηαη. ην παξαθάησ
παξάδεηγκα θαίλεηαη φηη ην ηξέρνλ θέιπθνο έρεη ηξία αλνηρηά αξρεία πνπ αληηζηνηρνχλ ζε ζπζθεπή
ηεξκαηηθνχ (/dev/pts/1). Απηφ ζεκαίλεη φηη ην ζπγθεθξηκέλν θέιπθνο γξάθεη θαη δηαβάδεη απφ ην ηεξκαηηθφ
/dev/pts/1. Άξα, αλ ηππψζεη θάηη ζηελ θαλνληθή έμνδν, ζα ηππσζεί ζην /dev/pts/1 θαη ηειηθά ζα εκθαληζηεί
(ππφ θπζηνινγηθέο ζπλζήθεο) ζηελ νζφλε ηνπ ρξήζηε.
Κάζε δηεξγαζία θιεξνλνκεί απφ ηε γνληθή ηεο ηνλ πίλαθα αλνηρηψλ αξρείσλ. Αλαιπηηθφηεξα, κε ηε
κέζνδν exec θιεξνλνκνχληαη κφλν νη ηξεηο πξψηεο ζέζεηο ηνπ πίλαθα, ελψ κε ηε κέζνδν fork θιεξνλνκείηαη
νιφθιεξνο ν πίλαθαο. Όηαλ ν ρξήζηεο πιεθηξνινγεί κηα εληνιή ζην θέιπθνο, ην θέιπθνο πξψηα θάλεη fork
θαη κεηά exec ηελ εληνιή (φπσο δείμακε ζην Γηαδξαζηηθφ ρήκα 7.2) , ζπλεπψο ε λέα δηεξγαζία πνπ ζα
πξνθχςεη ζα έρεη θιεξνλνκήζεη απφ ην αξρηθφ θέιπθνο ηα stdin, stdout θαη stderr, φπσο παξνπζηάδεηαη ζην
160
ρήκα 7.3. Παξαηεξήζηε φηη ζην ζρήκα (θαη ζε θάζε επφκελν ζρήκα) αλαπαξηζηψληαη κε δηαθνξεηηθά βέιε
νη ξνέο θαλνληθήο εμφδνπ θαη εμφδνπ ιαζψλ.
stdout
stdin
Terminal (write)
Terminal (read)
Shell stderr
Program
ρήκα 7.3: Μηα δηεξγαζία θιεξνλνκεί από ηε γνληθή ηεο ηηο ξνέο εηζόδνπ-εμόδνπ.
ην Γηαδξαζηηθφ ρήκα 7.4 εκθαλίδνληαη ηέζζεξα παξαδείγκαηα εληνιψλ γηα ηελ θαηαλφεζε ηνπ
ηξφπνπ ιεηηνπξγίαο ησλ ξνψλ εηζφδνπ-εμφδνπ θαη ηνπ ηεξκαηηθνχ. ηα δπν πξψηα γηα ιφγνπο απινπνίεζεο
δελ πεξηιακβάλεηαη ε δηαδηθαζία ηνπ θειχθνπο fork-exec, ελψ πεξηιακβάλεηαη ζηα δπν επφκελα. ην
παξαθάησ δηαδξαζηηθφ ζρήκα επηιέμηε έλα απφ ηα ηέζζεξα παξαδείγκαηα (θαηά πξνηίκεζε κε ηε ζεηξά), γηα
λα δείηε ηα βήκαηα πνπ ζπκβαίλνπλ ζε ζρέζε κε ηηο ξνέο εηζφδνπ-εμφδνπ, φηαλ εθηειείηαη κηα εληνιή.
ρήκα 7.4: Η δηαδηθαζία δεκηνπξγίαο ησλ ξνώλ εηζόδνπ-εμόδνπ θαηά ηελ εθηέιεζε κηαο εληνιήο.
161
έμνδφο ηεο ζα απνζεθεπηεί ζην αξρείν file1. ην ρήκα 7.5 παξνπζηάδνληαη ζρεκαηηθά νη ξνέο εηζφδνπ-
εμφδνπ ηνπ παξαδείγκαηνο.
Terminal (write)
Terminal (read) stdout
stdin
Shell stderr
ls -l
file1
Αλ, φκσο, ε ls εκθαλίζεη κήλπκα ιάζνπο, ηφηε απηφ ζα ζηαιεί ζην “stderr”, άξα ζηελ νζφλε. Κάηη
ηέηνην ζα ήηαλ ην απνηέιεζκα ηεο παξαθάησ εληνιήο:
Τπάξρεη ε γεληθή πνιηηηθή: κέζα από έλα πξόγξακκα αλ ζέινπκε λα ηππώζνπκε έλα κήλπκα
ιάζνπο, ηόηε απηό ζα πξέπεη λα ηππσζεί ζηελ έξοδο λαθών (stderr) θαη ΌΧΙ ζηην ηςπική
έξοδο (stdout). Απηή ε πνιηηηθή πξέπεη λα αθνινπζείηαη ζε όιεο ηηο πεξηπηώζεηο θαη κέζα από
όιεο ηηο γιώζζεο πξνγξακκαηηζκνύ θαη ζε όια ηα Λεηηνπξγηθά πζηήκαηα (unix ή windows).
ηνλ Πίλαθα 7.3 ζπλνςίδνληαη ηα ζχκβνια πνπ ρξεζηκνπνηνχληαη γηα ηελ αιιαγή ησλ ξνψλ εηζφδνπ-
εμφδνπ. Πξηλ απφ ην ζχκβνιν ">" κπαίλεη ν αξηζκφο ηνπ αλνηρηνχ αξρείνπ πξνο αλαθαηεχζπλζε. Αλ απηφο ν
αξηζκφο παξαιείπεηαη, ηφηε ελλνείηαη ην έλα (1) ην νπνίν αληηζηνηρεί ζηελ θαλνληθή έμνδν. To (2) αληηζηνηρεί
ζηελ έμνδν ιαζψλ. Έηζη, αλ ρξεζηκνπνηήζνπκε ην "2>", κφλν ε έμνδνο ιαζψλ ζα αλαθαηεπζπλζεί ζε αξρείν,
φπσο ζην επφκελν παξάδεηγκα:
162
Terminal (write)
Terminal (read)
stdout
stdin
Shell stderr
ls -l
file2
ύκβνιν Πεξηγξαθή
>file Άιιαμε ην stdout, ψζηε λα «γξάθεη» ζην αξρείν file θαη φρη ζην πξνθαζνξηζκέλν. Σν file,
1> file αλ ππάξρεη, ζα δηαγξαθεί, αλ δελ ππάξρεη ζα δεκηνπξγεζεί.
Άιιαμε ην stdout, ψζηε λα «γξάθεη» ζην αξρείν file θαη φρη ζην πξνθαζνξηζκέλν. Σν file,
>>file
αλ ππάξρεη, ΓΔΝ ζα δηαγξαθεί, αλ δελ ππάξρεη ζα δεκηνπξγεζεί. Σα δεδνκέλα απφ ηελ
1>> file
εληνιή ζα γίλνπλ append ζην file.
Άιιαμε ην stderr, ψζηε λα «γξάθεη» ζην αξρείν file θαη φρη ζην πξνθαζνξηζκέλν. Σν file,
2> file
αλ ππάξρεη, ζα δηαγξαθεί, αλ δελ ππάξρεη ζα δεκηνπξγεζεί.
Άιιαμε ην stderr, ψζηε λα «γξάθεη» ζην αξρείν file θαη φρη ζην πξνθαζνξηζκέλν. Σν file,
2>> file αλ ππάξρεη, ΓΔΝ ζα δηαγξαθεί, αλ δελ ππάξρεη ζα δεκηνπξγεζεί. Σα δεδνκέλα απφ ηελ
εληνιή ζα γίλνπλ append ζην file.
Άιιαμε ην stdin, ψζηε λα «δηαβάδεη» απφ ην αξρείν file θαη φρη απφ ην πξνθαζνξηζκέλν
< file
(ηεξκαηηθφ). Αλ δελ ππάξρεη ην file, ηφηε ζα πάξνπκε ζθάικα.
Άιιαμε, ψζηε ην stdin λα «δηαβάδεη» απφ ην θέιπθνο. Σν θέιπθνο ζα πεξηκέλεη λα
<< STRING πιεθηξνινγήζνπκε δεδνκέλα, κέρξη λα πιεθηξνινγήζνπκε ηε γξακκή STRING. Σφηε, φ,ηη
πιεθηξνινγήζακε ζα ην ζηείιεη ζην stdin ηεο δηεξγαζίαο.
ηείιε ηελ έμνδν απφ ην 1 (stdout) ζην 2 (stderr). ηε γεληθή πεξίπησζε, x>&y, ζηείιε ην x
1>&2
ζην y.
Δάλ ε εληνιή (δηεξγαζία) ζηείιεη δεδνκέλα θαη ζηελ θαλνληθή έμνδν, αιιά θαη ζηελ έμνδν ιαζψλ,
ηφηε ην θάζε ηη ζα απνζεθεπηεί ή ζα εκθαληζηεί ζηε ξνή πνπ ηνπ αληηζηνηρεί.
163
asidirop@aetos:~$ ls /tmp /foo 2> file2
/tmp:
20112xeim-adopse.tar.bz2 cake filename myid2 t textVi.txt
arx fff leleris.txt myid9 test too2l
arxeio2 file1 ls myidnik test01 too3l
asd file1.txt mc-antant o test.txt
ask3erg4 file3 mybest otinane testvi1
asidirop@aetos:~$ cat file2
ls: cannot access /foo: No such file or directory
asidirop@aetos:~$
ηελ παξαπάλσ εληνιή ls δφζεθε ε νδεγία λα εκθαλίδεη ηα πεξηερφκελα ησλ θαηαιφγσλ /tmp θαη
/foo. Ο /tmp ππάξρεη, θαη ε εληνιή εκθαλίδεη ηα πεξηερφκελά ηνπ ζηελ θαλνληθή έμνδν, δειαδή εκθαλίδνληαη
ζην ηεξκαηηθφ. Ο /foo δελ ππάξρεη, θαη ε εληνιή εκθαλίδεη κήλπκα ιάζνπο, ην νπνίν ζηέιλεη ζηελ έμνδν
ιαζψλ, ε νπνία αληηζηνηρεί ζην αξρείν file2. Αλ εκθαλίζνπκε ηα πεξηερφκελα ηνπ file2, είλαη μεθάζαξν φηη
πεξηέρεη ην κήλπκα ιάζνπο ηεο ls.
ε κηα εληνιή είλαη δπλαηφ λα αιιάμεη ν ρξήζηεο πνιιέο ξνέο εηζφδνπ-εμφδνπ. Έηζη, παξαθάησ
αιιάδνπλ θαη νη δπν ξνέο. Ζ θαλνληθή έμνδνο απνζεθεχεηαη ζην file1, ελψ ε έμνδνο ιαζψλ ζην file2.
ρεκαηηθή αλαπαξάζηαζε απηήο ηεο εληνιήο θαίλεηαη ζην ρήκα 7.7.
Terminal
stdout
(write)
stdin
Shell stderr
ls -l file1
file2
ρήκα 7.7: Αιιαγή ηεο θαλνληθήο εμόδνπ θαη ηεο εμόδνπ ιαζώλ πξνο δηαθνξεηηθά αξρεία.
164
ηελ ηειεπηαία γξακκή ηνπ Πίλαθα 7.3 αλαθέξεηαη ε δπλαηφηεηα αλαθαηεχζπλζεο κηαο ξνήο ζε κηα
άιιε. Με ηελ παξαθάησ εληνιή αλαθαηεπζχλεηαη ε έμνδνο ιαζψλ ζηελ θαλνληθή έμνδν (ρήκα 7.8). Απφ ην
απνηέιεζκα δελ είλαη πξνθαλέο ηη ζπλέβε, δηφηη θαη νη δπν ξνέο έηζη θη αιιηψο αληηζηνηρνχλ ζην ηεξκαηηθφ.
Όκσο απηφ πνπ ζπλέβε εζσηεξηθά είλαη λα δηαγξαθεί ε ζέζε 2 ηνπ πίλαθα κε ηα αλνηρηά αξρεία θαη λα
αληηθαηαζηαζεί ην πεξηερφκελφ ηεο κε φ,ηη πεξηέρεη ε ζέζε 1 (θαλνληθή έμνδνο).
Terminal (write)
Terminal (read)
stdout
stdin
Shell stderr
ls -l
ρήκα 7.8: Αιιαγή ηεο εμόδνπ ιαζώλ πξνο ηελ θαλνληθή έμνδν.
165
Terminal (read)
Terminal
stdout
(write)
stdin
Shell stderr
file1
ls -l
ρήκα 7.9: Αιιαγή ηεο θαλνληθήο εμόδνπ πξνο αξρείν θαη ηεο εμόδνπ ιαζώλ πξνο ηελ θαλνληθή έμνδν.
ηελ πεξίπησζε πνπ γίλεηαη αλαθαηεχζπλζε κηαο ξνήο ζε κηα άιιε, είλαη ζεκαληηθή ε ζεηξά κε ηελ
νπνία νξίδνληαη νη αλαθεηεπζχλζεηο (ελψ ζε άιιεο πεξηπηψζεηο δελ παίδεη ξφιν ε ζεηξά). Έηζη γηα
παξάδεηγκα, αλ γίλεη πξψηα ε 2>&1 θαη κεηά ην >file όπωο παξαθάηω:
ηφηε έρνπκε έλα εληειψο δηαθνξεηηθφ ζρήκα αλαθαηεπζχλζεσλ ζε ζρέζε κε ηελ πξνεγνχκελε πεξίπησζε.
Πξψηα γίλεηαη ε αλαθαηεχζπλζε ηεο εμφδνπ ιαζψλ πξνο ηελ θαλνληθή έμνδν ( 2>&1). Καηά ηε ζπγθεθξηκέλε
ρξνληθή ζηηγκή ε θαλνληθή έμνδνο δελ έρεη αιιάμεη αθφκε θαη "δείρλεη" πξνο ην ηεξκαηηθφ. ε δεχηεξν βήκα
γίλεηαη ε αλαθαηεχζπλζε ηεο θαλνληθήο εμφδνπ πξνο ην αξρείν file1. Όκσο ηειηθά ε έμνδνο ιαζψλ παξακέλεη
λα "δείρλεη" πξνο ην ηεξκαηηθφ (ρήκα 7.10).
Terminal (read)
Terminal
stdout
(write)
stdin
Shell stderr
file1
ls -l
ρήκα 7.10: Αιιαγή ηεο εμόδνπ ιαζώλ πξνο ηελ θαλνληθή έμνδν θαη ηεο θαλνληθήο εμόδνπ πξνο αξρείν.
166
7.4.2 Γηαζσιήλσζε (Pipelining)
ην Unix ππάξρεη έλα εηδηθνχ ηχπνπ αξρείν (Βιέπε Παξάγξαθν 1.3.7 θαη Τπνθεθάιαην 3.5) ην νπνίν
νλνκάδεηαη pipe (ζσιήλα). Έλα αξρείν ηχπνπ pipe είλαη νπζηαζηηθά κηα δίνδνο δεδνκέλσλ. ε απηνχ ηνπ
ηχπνπ ηα αξρεία πξέπεη κηα δηεξγαζία λα γξάθεη θαη κηα άιιε (αθφκε θαη ε ίδηα, αιιά δελ έρεη πξαθηηθή
ρξήζε) λα δηαβάδεη. Απηφο ν ηχπνο αξρείσλ είλαη ηχπνπ FIFO (First-In First-Out). Έηζη φ,ηη γξάθεη ε πξψηε
δηεξγαζία ην δηαβάδεη ε δεχηεξε κε ηελ ίδηα ζεηξά. Δδψ λα ζεκεησζεί φηη ππάξρνπλ δηαθνξέο ζηελ εζσηεξηθή
πινπνίεζε ησλ pipes ζηηο δηάθνξεο εθδφζεηο ηνπ unix. ην linux πινπνηνχληαη κέζσ ηνπ pipefs αιιά δελ
αληηζηνηρνχλ θαηά αλάγθε ζε πξαγκαηηθφ ρψξν ζηνλ δίζθν.
Μπνξνχκε λα αλαθαηεπζχλνπκε ηελ θαλνληθή έμνδν κηαο εληνιήο Α ζε έλα αξρείν pipe θαη ηελ
θαλνληθή είζνδν κηαο εληνιήο Β ζην ίδην αξρείν pipe. Με απηφλ ηνλ ηξφπν, φ,ηη ηππψλεη ε εληνιή Α ζα ην
δηαβάδεη ε εληνιή Β. Απηφ επηηπγράλεηαη κε ην ζχκβνιν "|" (pipe), ρσξίο λα νξίζεη ν ρξήζηεο φλνκα γηα
απηφ ην αξρείν:
Α | Β
Ζ παξαπάλσ εληνιή, ινηπφλ, δεκηνπξγεί έλα αξρείν pipe. ε απηφ ην αξρείν γξάθεη ε εληνιή Α θαη
δηαβάδεη ε εληνιή Β. Έηζη πξαθηηθά, ε έμνδνο ηεο εληνιήο Α γίλεηαη είζνδνο γηα ηελ εληνιή Β.
ηε γεληθή πεξίπησζε κπνξνχλ λα ζπλδπαζηνχλ απεξηφξηζηεο εληνιέο κέζα ζε κηα ζπλερφκελε
δηαζσιήλσζε. Έηζη ζην παξαθάησ παξάδεηγκα (ρήκα 7.11) ε δηεξγαζία Α ζηέιλεη ηελ έμνδφ ηεο σο είζνδν
ζηε δηεξγαζία Β. Ζ δηεξγαζία Β ζηέιλεη ηελ έμνδφ ηεο ζηε δηεξγαζία C θαη απηφ ζα κπνξνχζε λα ζπλερηζηεί
κε πεξηζζφηεξεο δηεξγαζίεο.
Α | Β | C
Shell
Terminal (write)
Terminal (read)
C
B
A
Δδψ πξέπεη λα παξαηεξεζεί φηη κε ηε δηαζσιήλσζε (|) αιιάδεη κφλν ε θαλνληθή έμνδνο ηεο εληνιήο
θαη φρη ε έμνδνο ιαζψλ. Έηζη, ε έμνδνο ιαζψλ γηα φιεο ηηο δηεξγαζίεο ηνπ παξαπάλσ παξαδείγκαηνο
παξακέλεη φπσο ήηαλ, δειαδή απηφ πνπ θιεξνλνκήζεθε απφ ην γνληθφ θέιπθνο, δειαδή ην ηεξκαηηθφ.
Αο δνχκε κεξηθά παξαδείγκαηα. Έζησ ε απιή πεξίπησζε:
asidirop@aetos:~$ ls | wc
7 7 42
asidirop@aetos:~$
167
Όπσο θαίλεηαη ζην ρήκα 7.12, ην θέιπθνο δεκηνπξγεί δπν ζπγαηξηθέο δηεξγαζίεο, ηελ ls θαη ηελ wc.
Γεκηνπξγείηαη έλα pipe ζην νπνίν γξάθεη ε ls θαη απφ ην νπνίν δηαβάδεη ε wc. Ζ εληνιή ls ζα γξάςεη ζην pipe
ηε ιίζηα κε ηα νλφκαηα ησλ αξρείσλ. Ζ wc ζα δηαβάζεη απηή ηε ιίζηα απφ ηελ θαλνληθή ηεο είζνδν. Ζ
ιεηηνπξγία ηεο wc είλαη λα κεηξά γξακκέο, ιέμεηο, ραξαθηήξεο. Έηζη ζα ηα κεηξήζεη (απηά πνπ ζα δηαβάζεη
απφ ηελ είζνδφ ηεο) θαη ζα ηππψζεη ζηελ θαλνληθή έμνδν (δειαδή ζην ηεξκαηηθφ) ηνπο ηξεηο αξηζκνχο.
Terminal (write)
Terminal (read)
Shell
wc
ls
BAKS 7 7 42
dbii_bin
soft
DBII
File1
test
tests
Δλδηαθέξνλ έρεη ε πεξίπησζε πνπ κηα απφ ηηο εληνιέο πνπ ππάξρνπλ ζε κηα αθνινπζία εληνιψλ κε
δηαζσιελψζεηο παξνπζηάζεη θάπνην ζθάικα. Αο επαλαιάβνπκε ηελ πξνεγνχκελε αθνινπζία εληνιψλ κε
ηέηνην ηξφπν ψζηε ε πξψηε λα δψζεη κήλπκα ζθάικαηνο:
asidirop@aetos:~$ ls /foo | wc
access /foo: No such file or directory
0 0 0
asidirop@aetos:~$
Terminal (write)
Terminal (read)
Shell
wc
ls /foo
0 0 0
168
Απηφ πνπ ζπκβαίλεη είλαη λα εκθαληζηεί ζην ηεξκαηηθφ κήλπκα ζθάικαηνο θαη ε εληνιή wc λα
εκθαλίζεη ηξία κεδεληθά. Θα ξσηνχζε θάπνηνο: «αθνχ ε πξψηε εληνιή έδσζε ζθάικα, γηαηί εθηειείηαη θαη ε
επφκελε εληνιή; Καη γηαηί ε επφκελε εληνιή εκθαλίδεη κεδεληθά;»
Γειαδή νη δπν δηεξγαζίεο μεθηλνχλ ζρεδφλ ηαπηφρξνλα, άξα θαηά ηελ ελεξγνπνίεζε ηεο δεχηεξεο δελ
είλαη γλσζηφ ην απνηέιεζκα ηεο πξψηεο. Έηζη, ινηπφλ, είλαη αλαπφθεπθην λα εθηειεζηνχλ θαη νη δπν εληνιέο.
Απηφ πνπ ζπκβαίλεη θαίλεηαη ζρεκαηηθά ζην ρήκα 7.13. Ζ εληνιή "ls /foo" ηππψλεη ζηελ έμνδν ιαζψλ
ην κήλπκα ζθάικαηνο. Ζ έμνδνο ιαζψλ αληηζηνηρεί ζην ηεξκαηηθφ, άξα ην κήλπκα ζθάικαηνο εκθαλίδεηαη
ζην ηεξκαηηθφ. ηελ θαλνληθή έμνδφ ηεο ε εληνιή ls δελ ζα ηππψζεη θάηη, δειαδή 0 bytes. Ζ δηεξγαζία πνπ
αληηζηνηρεί ζηελ wc ζα δηαβάζεη απφ ηελ θαλνληθή ηεο είζνδν 0 bytes (δειαδή θαηεπζείαλ ηνλ ραξαθηήξα
ειέγρνπ End-Of_File), θαη απηά ζα κεηξήζεη, δειαδή κεδέλ γξακκέο, κεδέλ ιέμεηο, κεδέλ ραξαθηήξεο.
ηόρνο
Δμνηθείσζε κε ηνλ ρεηξηζκφ δηεξγαζηψλ, αλαθαηεχζπλζε, δηαζσιήλσζε, θίιηξα.
Άζθεζε 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 κπνξείηε λα βγάιεηε ζπκπεξάζκαηα γηα
169
Άζθεζε 2
Μηα δηεξγαζία όηαλ εθηειείηαη από έλα ηεξκαηηθό, ηόηε «παίξλεη» ηνλ έιεγρν ηνπ ηεξκαηηθνύ,
δειαδή ό,ηη πιεθηξνινγήζνπκε ζα δηαβαζηεί από ηε δηεξγαζία (αλ ε δηεξγαζία δελ ζέιεη λα
δηαβάζεη από ην ηεξκαηηθό, ηόηε ό,ηη παηάκε παξακέλεη ζηνλ buffer ηνπ ηεξκαηηθνύ κέρξη θάπνηνο
λα ην δηαβάζεη). Σν shell δελ κπνξεί λα δηαβάζεη από ην ηεξκαηηθό κέρξη λα απνδεζκεύζεη ην
ηεξκαηηθό ε δηεξγαζία.
1. Αλνίμηε έλα ηεξκαηηθφ (ηνπηθά, φρη απνκαθξπζκέλα). Απφ ην ηεξκαηηθφ δψζηε πάιη ηελ εληνιή kcalc.
Σν πξφγξακκα «Κνκπηνπηεξάθη» εθηειείηαη. ην ηεξκαηηθφ δελ κπνξνχκε λα δψζνπκε εληνιέο. Όηαλ
πιεθηξνινγνχκε, δελ γίλεηαη ηίπνηε. Παηήζηε ηα πιήθηξα Cntrl-Z(ζπκβνιίδεηαη κε ^Ε).
To θέιπθνο έρεη ηε δπλαηόηεηα λα ρεηξηζηεί ηηο δηεξγαζίεο πνπ εθηειέζακε κέζα από απηό. Σηο
νλνκάδεη jobs. Έλα job είλαη κηα δηεξγαζία πνπ εθηειέζηεθε από ην θέιπθνο θαη ζηακάηεζε (ή
κπήθε ζην παξαζθήλην). Παηώληαο ^Ε, ε ηξέρνπζα δηεξγαζία γίλεηαη job.
asidirop@dellpc:~$ kcalc
^Z
[1]+ Stopped kcalc
asidirop@dellpc:~$
Σα jobs έρνπλ ηε δηθή ηνπο αξίζκεζε απφ ην θέιπθνο. ηελ παξαπάλσ πεξίπησζε είλαη ην jobs [1].
To + καο δειψλεη φηη είλαη ην ηξέρνλ job.
kwrite &
To & ζην ηέινο κηαο εληνιήο δειώλεη ζην θέιπθνο λα εθηειέζεη ηελ εληνιή, θαη λα ηε βάιεη λα
εθηειείηαη ζην παξαζθήλην (δειαδή ε εληνιή δελ ζα κπνξεί λα δηαβάζεη από ην ηεξκαηηθό, αλ ην
ζειήζεη). Σν ηεξκαηηθό παξακέλεη ζηνλ έιεγρν ηνπ θειύθνπο.
170
3. Γψζηε ηελ εληνιή:
jobs
καο δείρλεη φια ηα jobs ηνπ ηξέρνληνο θειχθνπο θαη ην status ηνπ θαζελφο. Αλ ε έμνδνο απφ ηελ εληνιή jobs
είλαη ε:
asidirop@dellpc:~$ jobs
[1]+ Stopped kcalc
[2]- Running kwrite &
bg %1
δειαδή % θαη ηνλ αξηζκφ ηνπ job πνπ αληηζηνηρεί ζην ζηακαηεκέλν job.
Η εληνιή bg ζηέιλεη ην ζήκα CONT ζηε δηεξγαζία πνπ αληηζηνηρεί, θαη ηε βάδεη λα εθηειείηαη ζην
παξαζθήλην.
fg %1
H εληνιή fg ζηέιλεη ην ζήκα CONT ζηε δηεξγαζία πνπ αληηζηνηρεί, θαη ηελ βάδεη λα εθηειείηαη ζην
πξνζθήλην, δειαδή ηεο δίλεη ηνλ έιεγρν ηνπ ηεξκαηηθνύ.
Ζ εθαξκνγή kcalc ηεξκαηίζηεθε. Σψξα σο “job” έρνπκε κφλν ην kwrite. Γψζηε ηελ εληνιή:
kcharselect &
Σψξα έρνπκε δπν jobs πνπ ηξέρνπλ. Κιείζηε ην ηεξκαηηθφ απφ ην νπνίν ηξέμαηε ηα πξνεγνχκελα jobs
(παηψληαο ζην παξάζπξν ην θνπκπί γηα θιείζηκν). Σν bash, φηαλ ηεξκαηίδεηαη, ηεξκαηίδεη θαη φια ηα jobs
171
ηνπ (ζηέιλεη ζε φια ηα jobs ην ζήκα SIGHUP). Δάλ δελ ζέινπκε έλα job λα ηεξκαηηζηεί κε ηελ έμνδν απφ ην
θέιπθνο, ηφηε πξέπεη λα δψζνπκε ηελ εληνιή disown %x (φπνπ x ην job number).
H εληνιή disown απνδεζκεχεη έλα job απφ ην ηξέρνλ shell. H δηεξγαζία, φκσο, παξακέλεη ζε
εθηέιεζε.
Άζθεζε 3
Να βξεζεί ην απνηέιεζκα ηεο εθηέιεζεο ησλ παξαθάησ εληνιψλ :
# 1
who > file1
# 2
cat file1
# 3
wc file1
# 4
wc < file1
# 5
ls –l file1
# 6
echo "Hello world" > file2
# 7
more file2
# 8
wc file2
# 9
sort < file1 > file3
# 10
cat file3
Οη εληνιέο wc, grep, sort (θαη όιεο νη αληίζηνηρεο) ζπλήζσο νλνκάδνληαη εληνιέο θίιηξα.
Απηέο νη εληνιέο (εάλ δελ ηηο δνζεί σο όξηζκα όλνκα αξρείνπ) δηαβάδνπλ δεδνκέλα από ηελ
θαλνληθή είζνδν θαη ηππώλνπλ ηα απνηειέζκαηα ζηελ θαλνληθή έμνδν.
wc
Θα λνκίζεηε φηη ην ηεξκαηηθφ «θφιιεζε». Χζηφζν, δελ θφιιεζε. Ζ δηεξγαζία πνπ αληηζηνηρεί ζηελ
εληνιή πεξηκέλεη λα δηαβάζεη απφ ηελ θαλνληθή είζνδν. Ζ θαλνληθή είζνδνο (εθφζνλ δελ νξίζακε
δηαθνξεηηθά) είλαη ην ηεξκαηηθφ. Μφλν πνπ ε εληνιή δελ καο εκθαλίδεη θάπνηα πξνηξνπή (prompt) φπσο ην
θέιπθνο, γηα λα ην αληηιεθζνχκε.
Πιεθηξνινγήζηε θείκελν. Πφηε ζα ζηακαηήζεη λα δηαβάδεη ε δηεξγαζία;
172
Όηαλ έλα πξόγξακκα δηαβάδεη από ηελ θαλνληθή είζνδν, δηαβάδεη κε ηνλ ίδην αθξηβώο
ηξόπν κε ηνλ νπνίν ζα δηάβαδε δεδνκέλα από έλα αξρείν. Αλ κέζα από έλα πξόγξακκα ζέιακε λα
δηαβάζνπκε όια ηα πεξηερόκελα ελόο αξρείνπ, ζα δηαβάδακε byte-byte ή γξακκή-γξακκή, κέρξη λα
θηάζνπκε ζην ηέινο ηνπ αξρείνπ. Όηαλ δηαβάδνληαο έλα αξρείν θηάζνπκε ζην ηέινο ηνπ θαη δελ
ππάξρνπλ άιια δεδνκέλα, ηόηε ην ιεηηνπξγηθό ζηέιλεη έλαλ εηδηθό ραξαθηήξα ζην πξόγξακκά καο
πνπ νλνκάδεηαη “End-Of-File” θαη ζπλήζσο ζπκβνιίδεηαη κε ην EOF. Σόηε ην πξόγξακκα
αληηιακβάλεηαη όηη δελ ππάξρεη θάηη άιιν λα δηαβάζεη από ην αξρείν.
Σν ίδην θάλεη θαη ε εληνιή wc όηαλ δηαβάδεη από ηελ θαλνληθή είζνδν (αιιά αθόκε θαη
όηαλ δηαβάδεη από αξρείν, ε ζπκπεξηθνξά είλαη ίδηα). Γηαβάδεη ζπλερώο κέρξη λα θηάζεη ζηνλ
εηδηθό ραξαθηήξα EOF. Απηόλ ηνλ εηδηθό ραξαθηήξα, κπνξνύκε λα ηνλ δεκηνπξγήζνπκε από ην
πιεθηξνιόγην (θαη άξα λα ηνλ δηαβάζεη ε εληνιή) παηώληαο Cntrl-D (^D). Μόιηο
παηήζνπκε ^D, ε δηεξγαζία ζα ζηακαηήζεη λα δηαβάδεη θαη ζα καο εκθαλίζεη ην απνηέιεζκα.
grep test
Ζ εληνιή grep ζα αλαδεηήζεη ηε ζπκβνινζεηξά “test”. Πνχ φκσο; Δθφζνλ δελ νξίζακε αξρείν,
ηφηε ζα δηαβάζεη απφ ηελ θαλνληθή είζνδν (stdin), δειαδή ην ηεξκαηηθφ.
Πιεθηξνινγήζηε κεξηθέο γξακκέο, αλάκεζα ζε απηέο θαη κεξηθέο πνπ λα πεξηέρνπλ ην "test". Ση
παξαηεξείηε; Παηήζηε ^D ψζηε λα νινθιεξσζεί ε εληνιή.
Άζθεζε 4
Να βξεζεί ην απνηέιεζκα ηεο εθηέιεζεο ησλ παξαθάησ εληνιψλ :
# 1
ls | wc -l
# 2
who | wc -l
# 3
ls *.c | wc -l
# 4
who | sort | more
# 5
ls /tmp | wc -l
# 6
ls /ttt | wc –l
Πνηα είλαη ε δηαθνξά ζηελ πεξίπησζε (5) κε (6); ηελ πεξίπησζε (6) ε wc κεηξάεη ην κέγεζνο ηνπ
κελχκαηνο ζθάικαηνο;
173
Άζθεζε 5
1. Βξείηε ηα αξρεία ηνπ ηξέρνληνο θαηαιφγνπ θαη εκθαλίζηε ηα, ηαμηλνκεκέλα κε βάζε ην κέγεζνο ζε
θζίλνπζα ζεηξά (δείηε ην man ηεο εληνιήο sort).
2. Δκθαλίζηε ηα πεξηερφκελα ηνπ αξρείνπ /etc/passwd κε θεθαιαίνπο ραξαθηήξεο. (δείηε ην man ηεο
εληνιήο tr).
3. Βξείηε ηα αξρεία πνπ ην φλνκά ηνπο μεθηλάεη κε d θαη εκθαλίζηε ηα νλφκαηά ηνπο κε θεθαιαία γξάκκαηα
ζε θζίλνπζα αιθαβεηηθή ζεηξά.
5. Μεηξήζηε πφζνη ρξήζηεο ππάξρνπλ ζην ζχζηεκα (κεηξήζηε ηηο γξακκέο ηνπ /etc/passwd).
6. Μεηξήζηε πφζνη ρξήζηεο ηνπ αεηνχ (ή ελφο ζπζηήκαηνο κε πνιινχο ρξήζηεο) έρνπλ username πνπ
8. Βξείηε ηε δηεξγαζία κε ην κεγαιχηεξν PID (ζπκεζείηε ηηο εληνιέο sort, head, tail).
7.6 Αλαθνξέο
[1] GNU User Commands Reference Manual: kill command.
[2] GNU User Commands Reference Manual: ps command.
[3] Brian L Stuart. Principles of operating systems: design & applications. Course Technology, 2009.
[4] Peter H. Salus. A quarter century of UNIX. Addison-Wesley, 1994.
[5] U. Vahalia. Unix Internals: The New Frontiers. Dorling Kindersley Pvt. Limited, 2008.
[ https://books.google.gr/books?id=Z7qfu9NK7WQC ]
174
Κεθάιαην 8
Χρήστες
Εφαρμογές
Κελφφη
Πυρήνας
Υλικό
ε θάζε ζχζηεκα UNIX ππάξρνπλ ηνπιάρηζηνλ δχν δηαζέζηκα θειχθε θαη απηά ζπλήζσο είλαη ην
Bourne shell (sh) θαη ην C-shell (csh). Χζηφζν, ε γιψζζα θαη ε ζχληαμε πνπ ρξεζηκνπνηείηαη γηα ηελ
επηθνηλσλία κε θαζέλα απφ απηά είλαη δηαθνξεηηθή. Όπσο βιέπνπκε ζηε ιίζηα πνπ αθνινπζεί, ππάξρνπλ
πνιιά δηαθνξεηηθά θειχθε:
Οηθνγέλεηα Bourne Shell: Bourne Shell (sh), Bourne-Again Shell (bash), Korn Shell (ksh), MirBSD Korn
Shell (mksh), Almquist shell (ash),
Z-sh
Οηθνγέλεηα C-shell: C-shell (csh), Tc-shell (tcsh).
Καηά ηε ζπγγξαθή ηνπ παξφληνο ην πεξηζζφηεξν δηαδεδνκέλν θέιπθνο είλαη ην Bourne again shell
(bash). Σν bash είλαη βειηησλέλε έθδνζε ηνπ sh θαη είλαη πιένλ ν εμ νξηζκνχ θινηφο ζε ζπζηήκαηα linux.
Μάιηζηα ζε αξθεηέο πεξηπηψζεηο ε βαζηθή έθδνζε Bourne Shell δελ ππάξρεη θαλ, θαη ε εληνιή sh είλαη
ζχλδεζκνο ζηελ εληνιή bash.
175
Αλεμάξηεηα από ην θέιπθνο πνπ ρξεζηκνπνηείηαη, όια ηα θειύθε έρνπλ σο ζηόρν λα παξέρνπλ
ζην UNIX κηα δηεπαθή ρξήζηε (user interface).
Δθηειψληαο ηελ εληνιή "sh file1" εθηειείηαη ην sh (ην θέιπθφο καο) κε φξηζκα ην
αξρείν file1. Όηαλ ζα δεκηνπξγεζεί ε δηεξγαζία ηνπ sh, ζα αλαγλσξίζεη φηη δφζεθε φξηζκα, νπφηε θαη δελ
ζα πεξηκέλεη λα δηαβάζεη εληνιέο απφ ηελ θαλνληθή είζνδν, αιιά ζα αλνίμεη ην αξρείν file1 γηα αλάγλσζε θαη
ζα δηαβάδεη απφ εθεί γξακκή-γξακκή. Κάζε γξακκή αληηζηνηρεί ζε κηα εληνιή. πλεπψο, κεηά ηελ αλάγλσζε
κηαο γξακκήο, ην θέιπθνο εθηειεί ηελ εληνιή πνπ πεξηέρεηαη ζε απηήλ. Έηζη, είλαη ην ίδην κε ην λα έγξαθε ν
ρξήζηεο ηηο εληνιέο ζην ηεξκαηηθφ. Αληί λα δηαβαζηνχλ νη εληνιέο απφ ην ηεξκαηηθφ, δηαβάδνληαη απφ ην
αξρείν.
176
Όηαλ έλα αξρείν πεξηέρεη text ην νπνίν είλαη εληνιέο, ηόηε απηό ην αξρείν νλνκάδεηαη ζελάξην
(script).
Όηαλ ην ζελάξην πεξηέρεη εληνιέο γηα ην θέιπθνο (shell), νλνκάδεηαη ζελάξην θειύθνπο (shell
script).
Μεηνλέθηεκα ζηνλ παξαπάλσ ηξφπν είλαη φηη πξέπεη λα γλσξίδεη ν ρξήζηεο αλ ην ζελάξην θειχθνπο
είλαη γξακκέλν γηα ην θέιπθνο sh, ή γηα ην θέιπθνο bash, ή γηα ην csh θηι. Όπσο αλαθέξακε πξηλ, ηα δηάθνξα
θειχθε έρνπλ αζπκβαηφηεηεο κεηαμχ ηνπο. πλεπψο, αλ ν ρξήζηεο πξνζπαζήζεη λα εθηειέζεη έλα ζελάξην
πνπ είλαη γξακκέλν γηα csh ρξεζηκνπνηψληαο ην bash, ην πην πηζαλφ είλαη λα ππάξμεη απνηπρία ζηελ
εθηέιεζε.
Όπσο αλαθέξακε πξηλ, ζην Unix ηα ζελάξηα ρξεζηκνπνηνχληαη ζπρλά (shell scripts, perl scripts,
python scripts, awk scripts θ.α.). Δπεηδή, ινηπφλ, δελ είλαη δπλαηφ λα γλσξίδεη ν ρξήζηεο γηα θάζε ζελάξην
πνπ πξνζπαζεί λα εθηειέζεη ηε γιψζζα πξνγξακκαηηζκνχ γηα ηελ νπνία είλαη γξακκέλν, ππάξρεη ε εμήο
ζχκβαζε: ηελ αξρή ηνπ ζελαξίνπ κπαίλνπλ νη ραξαθηήξεο #! αθνινπζνχκελνη απφ ηελ απφιπηε δηαδξνκή
ηνπ αληίζηνηρνπ δηεξκελεπηή. Έηζη, έλα ζελάξην γηα bash ζα πξέπεη λα μεθηλά κε:
#!/bin/bash
Αληίζηνηρα, έλα ζελάξην γηα perl μεθηλά κε #!/usr/bin/perl, έλα ζελάξην γηα csh μεθηλά
κε #!/bin/csh θηι.
Ο ππξήλαο ηνπ Unix, φηαλ πξνζπαζεί λα εθηειέζεη έλα πξφγξακκα, αξρηθά ειέγρεη αλ είλαη binary
θαη αληηζηνηρεί ζηελ αξρηηεθηνληθή ηνπ ηξέρνληνο επεμεξγαζηή. Δάλ λαη, ηφηε μεθηλά ηε δηεξγαζία
θνξηψλνληαο ηνλ δπαδηθφ θψδηθα (binary code) ζηε κλήκε. Δάλ φρη, ηφηε ειέγρεη εάλ είλαη αξρείν θεηκέλνπ
(text file). Όια ηα ζελάξηα είλαη αξρεία θεηκέλνπ. Δάλ, ινηπφλ, είλαη αξρείν θεηκέλνπ, ηφηε ειέγρεη ηνπο δπν
πξψηνπο ραξαθηήξεο ηνπ αξρείνπ. Δάλ απηνί νη δπν πξψηνη ραξαθηήξεο είλαη νη #! ηφηε αληηιακβάλεηαη φηη
πξφθεηηαη γηα ζελάξην, θαη δηαβάδεη ηελ ππφινηπε πξψηε γξακκή γηα λα βξεη ηνλ δηεξκελεπηή πνπ πξέπεη λα
εθηειέζεη.
Έζησ έλα αξρείν κε φλνκα file1 πνπ πεξηέρεη:
#!/path/command
Lala
Foo
./file1
ηφηε ην UNIX ζα αλαγλσξίζεη φηη δελ πξφθεηηαη γηα αξρείν κε δπαδηθφ θψδηθα (binary file) αιιά γηα
αξρείν θεηκέλνπ (text). Θα δηαβάζεη ηελ πξψηε γξακκή θαη ζα εθηειέζεη ηελ εληνιή:
/path/command ./file1
177
Άξα, αλ ε πξψηε γξακκή ηνπ αξρείνπ file2 είλαη #!/usr/bin/perl, ηφηε εθηειψληαο ην file2 ν
ππξήλαο εθηειεί ηελ εληνιή:
/usr/bin/perl ./file2
Αλ ε πξψηε γξακκή ηνπ file3 είλαη #!/bin/bash, ηφηε εθηειψληαο ην file3 ν ππξήλαο εθηειεί ηελ
εληνιή:
/bin/bash ./file3
Με ην παξαπάλσ, μεθηλά νπζηαζηηθά κηα λέα δηεξγαζία θειχθνπο κε φξηζκα ην αξρείν file3.
πλεπψο, μεθηλά έλα θέιπθνο ην νπνίν ζα δηαβάδεη εληνιέο απφ ην αξρείν file3.
Όηαλ δεκηνπξγνύκε ζελάξηα, πξέπεη λα ηνπο δώζνπκε ηελ άδεηα πξόζβαζεο “execute”. Η άδεηα
“execute”, όπσο έρνπκε αλαθέξεη ζηελ Παξάγξαθν 5.3.1, δελ ηίζεηαη από κόλε ηεο, όηαλ
δεκηνπξγνύληαη αξρεία, αιιά πξέπεη λα δνζεί εθ ησλ πζηέξσλ.
Αλ ην αξρείν δελ έρεη άδεηα “execute”, ζα πάξνπκε ην κήλπκα “Permission denied”, φπσο θάζε θνξά
πνπ γίλεηαη πξνζπάζεηα εθηέιεζεο πξνγξάκκαηνο γηα ην νπνίν δελ ππάξρνπλ ηα θαηάιιεια δηθαηψκαηα:
aetos_test_27_$ ./file1
./file1: Permission denied.
aetos_test_27_$ ls -l
total 24
-rw-r--r-- 1 asidirop it 314 Jan 11 2003 cc
-rw------- 1 asidirop it 28 Nov 20 18:40 file1
-rw-r--r-- 1 asidirop it 183 Jan 8 2003 list
ε αληίζεζε κε ηα πξνγξάκκαηα ηχπνπ binary, γηα ηα νπνία αξθεί ην δηθαίσκα “execute” γηα ηελ
εθηέιεζή ηνπο ρσξίο λα ρξεηάδεηαη ην δηθαίσκα “read”, ζηελ πεξίπησζε ησλ ζελαξίσλ ππάξρνπλ επηπιένλ
πεξηνξηζκνί.
Έζησ, ινηπφλ, ζην πξνεγνχκελν παξάδεηγκα έρνπκε δψζεη ζην file1 ηελ άδεηα “execute” αιιά φρη
ηελ άδεηα “read”. Όηαλ πξνζπαζήζνπκε λα εθηειέζνπκε ην file1, ζα πάξνπκε ην δηαθνξεηηθφ απφ ηελ
πξνεγνχκελε πεξίπησζε κήλπκα “cannot open: Permission denied”. Απηφ πνπ ζπλέβε είλαη φηη ην file1
πέξαζε ηνλ έιεγρν άδεηαο “execute”, ν ππξήλαο έιεγμε ηνλ ηχπν ηνπ αξρείνπ θαη δηάβαζε ηελ πξψηε γξακκή
θαη κεηά εθηέιεζε ηελ εληνιή "/bin/sh file1". Ζ εληνιή εθηειείηαη θαλνληθά, μεθηλά ην θέιπθνο θαη
(ην θέιπθνο) πξνζπαζεί λα αλνίμεη ην αξρείν file1, γηα ηελ αλάγλσζε ησλ εληνιψλ. Δπεηδή, φκσο δελ ππάξρεη
ην δηθαίσκα αλάγλσζεο (read), ην θέιπθνο εκθαλίδεη ην κήλπκα ζθάικαηνο.
178
aetos_test_27_$ ./file1
/bin/sh: ./file1: cannot open: Permission denied
aetos_test_45_$ /bin/sh file1
/bin/sh: file1: cannot open: Permission denied
aetos_test_27_$ ls -l
total 24
-rw-r--r-- 1 asidirop it 314 Jan 11 2003 cc
--wx------ 1 asidirop it 28 Nov 20 18:48 file1
-rw-r--r-- 1 asidirop it 183 Jan 8 2003 list
Αλ αιιάμνπκε ην -v ζε -x, ηφηε ην θέιπθνο δελ ζα εκθαλίδεη φιεο ηηο γξακκέο αιιά κφλν ηηο
εληνιέο πνπ πξφθεηηαη λα εθηειεζηνχλ κε έλαλ ζηαπξφ απφ κπξνζηά:
179
bash-2.05a$
Αλ δελ δψζνπκε δηαδξνκή γηα ην αξρείν 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.
180
Χο νλόκαηα κεηαβιεηώλ ν ρξήζηεο κπνξεί λα ζέζεη νπνηνλδήπνηε ζπλδπαζκό γξακκάησλ θαη
αξηζκώλ (αξρίδνληαο από γξάκκα), ελώ από ηνπο εηδηθνύο ραξαθηήξεο ν κόλνο πνπ κπνξεί λα
ρξεζηκνπνηείηαη κε αζθάιεηα είλαη ε ππνγξάκκηζε “_”. Γελ επηηξέπνληαη θελά θαη άιινη εηδηθνί
ραξαθηήξεο πνπ κπνξεί λα έρνπλ θάπνηα εηδηθή ζεκαζία γηα ην θέιπθνο (π.ρ. $ \ # ; θ.ν.θ.).
Σν θέιπθνο sh (θαη ην bash) ρεηξίδεηαη ηηο κεηαβιεηέο πεξηβάιινληνο κε ηνλ ίδην ηξφπν πνπ ρεηξίδεηαη
ηηο κεηαβιεηέο ηνπ shell. Γηα λα δηαρσξίδνληαη εχθνια, ζπλεζίδεηαη λα ρξεζηκνπνηνχληαη γηα ηηο κεηαβιεηέο
πεξηβάιινληνο κφλν θεθαιαίνη ραξαθηήξεο ελψ γηα ηηο κεηαβιεηέο ηνπ θειχθνπο κφλν πεδνί.
Οη κεηαβιεηέο ηνπ θειύθνπο απνζεθεύνληαη ζηε κλήκε πνπ ρξεζηκνπνηεί ην ίδην ην shell, είλαη
ηνπηθέο θαη δελ θιεξνδνηνύληαη από ηηο δηεξγαζίεο ζηηο ζπγαηξηθέο.
Οη κεηαβιεηέο πεξηβάιινληνο απνζεθεύνληαη από ηνλ ππξήλα ζην ρώξν κλήκεο πνπ
δηαηεξνύληαη ηα δηάθνξα ζηνηρεία ησλ δηεξγαζηώλ θαη θιεξνδνηνύληαη από ηηο δηεξγαζίεο ζηηο
ζπγαηξηθέο ηνπο.
a=5
a="5"
Ππιν και μεηά ηον σαπακηήπα "=" δεν ππέπει να ςπάπσοςν κενά.
Δάλ ζηελ ηηκή πξνο εθρώξεζε πεξηέρνληαη εηδηθνί ραξαθηήξεο (πρ: space * ; < > | θ.ν.θ.) ηόηε
πξέπεη λα ρξεζηκνπνηεζνύλ εηζαγσγηθά (κνλά ή δηπιά) ή λα αλαηξεζεί ε εηδηθή ζεκαζία απηώλ
ησλ ραξαθηήξσλ κε ην \ (αλάπνδε θάζεηνο - back slash).
181
Β: command not found
asidirop@dellpc:~$ a="5 Β" # Δθρώξεζε 2
asidirop@dellpc:~$ a= 5 # Δθρώξεζε 3
5: command not found
asidirop@dellpc:~$ a=" 5" # Δθρώξεζε 4
asidirop@dellpc:~$ a =5 # Δθρώξεζε 5
a: command not found
Με ην παξαπάλσ δίλεηαη ε εληνιή εθηέιεζεο command, φκσο επηπιένλ πξηλ ηελ εθηέιεζή ηεο
ηίζεληαη θαη νη κεηαβιεηέο πεξηβάιινληνο ENV_VAR1, ENV_VAR2, θηι.
Αθξηβψο ην ίδην ζθάικα ζπκβαίλεη θαη ζηελ επφκελε πεξίπησζε (Δθρψξεζε 3). Σν θέιπθνο
πξνζπαζεί λα εθηειέζεη ηελ εληνιή κε φλνκα "5" κε αξρηθνπνίεζε ηεο κεηαβιεηήο πεξηβάιινληνο a ζε θελή
ηηκή. Ζ ιχζε πξνθαλψο είλαη ε ρξήζε εηζαγσγηθψλ (εθρψξεζε 4).
ηελ ηειεπηαία πεξίπησζε (εθρψξεζε 5) έρεη κπεη θελφ δηάζηεκα πξηλ απφ ηνλ ραξαθηήξα =. Σν
κήλπκα ζθάικαηνο απφ ην θέιπθνο είλαη: “a: command not found”. Δίλαη ζρεδφλ πξνθαλέο πσο εξκήλεπζε
ηελ εληνιή ην θέιπθνο. Θεψξεζε φηη δφζεθε ε εληνιή a κε φξηζκα ην "=5".
Ππιν και μεηά ηον σαπακηήπα "=" δεν ππέπει να ςπάπσοςν κενά.
182
bash-2.05a$ read b
foo bar
bash-2.05a$ echo $b
foo bar
bash-2.05a$ echo "$b"
foo bar
bash-2.05a$
ην παξαπάλσ παξάδεηγκα εκθαλίδνπκε κε ππνγξάκκηζε ηελ πιεθηξνιφγεζε ηνπ ρξήζηε. ηε
κεηαβιεηή b εθρσξήζεθε αθξηβψο απηφ πνπ πιεθηξνινγήζεθε. Δπεηδή φκσο πεξηέρεη εηδηθνχο ραξαθηήξεο
(ηα θελά δηαζηήκαηα), ζα πξέπεη λα ρξεζηκνπνηείηαη κε εηζαγσγηθά.
Δίλαη πνιχ ζπλεζηζκέλν θαηά ηελ εθηέιεζε ελφο πξνγξάκκαηνο λα ππάξρεη ε αλάγθε γηα είζνδν απφ
ηνλ ρξήζηε. ε απηήλ ηελ πεξίπησζε πξνθαλψο ρξεζηκνπνηείηαη ε εληνιή read. Δίλαη πνιχ θιαζηθφο
ζπλδπαζκφο ηεο εληνιήο read κε ηελ echo, φπνπ ε πξψηε εκθαλίδεη ηελ πξνηξνπή γηα ηνλ ρξήζηε:
Αρχείο: read_demo
#!/bin/bash
echo -n "Enter some text > "
read text
echo "You entered: $text"
Παξαθάησ θαίλεηαη ε εθηέιεζε ηνπ ζελαξίνπ read_demo. Ζ ρξήζε ηνπ νξίζκαηνο -n ζηελ
εληνιή echo νδεγεί ηελ εληνιή λα κελ αιιάμεη γξακκή κεηά ηελ εκθάληζε ηνπ κελχκαηνο, ζπλεπψο ν
θέξζνξαο παξακέλεη ζηελ ίδηα γξακκή θαη ν ρξήζηεο «γξάθεη» ζηελ ίδηα γξακκή κε ηελ πξνηξνπή. Ζ εληνιή
ζα δηαβάζεη, ηελ είζνδν κέρξη λα δηαβαζηεί ν ραξαθηήξαο αιιαγήο γξακκήο, ν νπνίνο βέβαηα αληηζηνηρεί ζην
πιήθηξν “Enter”.
asidirop@aetos:/tmp$ ./read_demo
Enter some text > My name is Antonis
You entered: My name is Antonis
asidirop@aetos:/tmp$
Ο ραξαθηήξαο $ δίλεη ηελ νδεγία ζην θέιπθνο λα ζεσξήζεη ηε ιέμε (string) πνπ αθνινπζεί σο
όλνκα κεηαβιεηήο θαη λα ηελ αληηθαηαζηήζεη κε ηελ ηηκή ηεο.
183
asidirop@dellpc:/tmp$ a=Hello
asidirop@dellpc:/tmp$ echo $a
Hello
Σα απιά εηζαγσγηθά ('single quotes') αθπξψλνπλ ηελ εηδηθή ζεκαζία φισλ ησλ ζπκβφισλ εθηφο απφ
ηνλ εαπηφ ηνπο.
Σα δηπιά εηζαγσγηθά ("double quotes") αθπξψλνπλ ηελ εηδηθή ζεκαζία φισλ ησλ ζπκβφισλ εθηφο
απφ ηνλ εαπηφ ηνπο, ηελ αλάπνδε θάζεην (backslash \ ) θαη ην δνιάξην ($).
Σα αλάπνδα εηζαγσγηθά (`back quotes`) πξνθαινχλ ηελ εθηέιεζε ηεο εληνιήο πνπ πεξηθιείνπλ.
Αθξηβψο ηελ ίδηα ζεκαζία έρνπλ ηα εηζαγσγηθά θαη ζε άιιεο γιψζζεο πξνγξακκαηηζκνχ, νη νπνίεο
έρνπλ θιεξνλνκήζεη αξθεηά ραξαθηεξηζηηθά ηνπ θειχθνπο φπσο ε perl θαη ε php.
Ζ ρξήζε εηζαγσγηθψλ (κνλά ή δηπιά) είλαη ζρεδφλ ππνρξεσηηθή, φηαλ κέζα ζε έλα αιθαξηζκεηηθφ
πεξηιακβάλνληαη εηδηθνί ραξαθηήξεο. Ο πεξηζζφηεξν ζπρλφο εηδηθφο ραξαθηήξαο είλαη ην θελφ δηάζηεκα
(space). ην παξαθάησ παξάδεηγκα ε ρξήζε ή φρη εηζαγσγηθψλ ζηηο ηξεηο πξψηεο πεξηπηψζεηο δελ έρεη
δηαθνξά. Δίηε ρξεζηκνπνηεζνχλ κνλά εηζαγσγηθά, είηε δηπιά, είηε θαζφινπ, ην απνηέιεζκα είλαη ην ίδην θαη
ζσζηφ, εθφζνλ ζην αιθαξηζκεηηθφ δελ πεξηιακβάλεηαη θάπνηνο εηδηθφο ραξαθηήξαο.
ηηο ηξεηο επφκελεο εληνιέο ην αιθαξηζκεηηθφ πεξηιακβάλεη πνιιαπιά θελά δηαζηήκαηα (spaces). Γηα
ην θέιπθνο (γηα φια ηα θειχθε) ην θελφ δηάζηεκα είλαη εηδηθφο ραξαθηήξαο θαη ζεκαίλεη δηαρσξηζκφο
νξηζκάησλ κεηαμχ ηνπο ή δηαρσξηζκφο εληνιήο απφ ηα νξίζκαηα. Μάιηζηα, ην θέιπθνο αγλνεί ηα πνιιαπιά
θελά δηαζηήκαηα. Βιέπνπκε, ινηπφλ, ζην παξάδεηγκα φηη ην απνηέιεζκα είλαη ζσζηφ κε ηε ρξήζε
εηζαγσγηθψλ (κνλψλ ή δηπιψλ), αιιά φρη αθξηβέο ρσξίο ηε ρξήζε εηζαγσγηθψλ. Οπζηαζηηθά αγλννχληαη
(ράλνληαη) ηα πνιιαπιά θελά δηαζηήκαηα. Άξα, ε ρξήζε ησλ εηζαγσγηθψλ είλαη ελδεδεηγκέλε ζηελ
πεξίπησζε πνπ ην αιθαξηζκεηηθφ πεξηέρεη έλαλ ή πεξηζζφηεξνπο εηδηθνχο ραξαθηήξεο. ηελ πεξίπησζε πνπ ν
ρξήζηεο δελ επηζπκεί ηε ρξήζε ησλ εηζαγσγηθψλ, ηφηε ζα πξέπεη λα αθπξσζεί ε εηδηθή ζεκαζία ησλ εηδηθψλ
ραξαθηήξσλ κε ηε ρξήζε ηεο αλάπνδεο θαζέηνπ (back slash). Θα πξέπεη πξηλ απφ θάζε εκθάληζε εηδηθνχ
ραξαθηήξα λα ρξεζηκνπνηείηαη ε αλάπνδε θάζεηνο (ηειεπηαία εληνιή). Απηή ε κέζνδνο, βέβαηα, δελ είλαη
ηδηαίηεξα πξαθηηθή, εηδηθά φηαλ ππάξρνπλ πνιιέο εκθαλίζεηο εηδηθψλ ραξαθηήξσλ.
184
8.3.1 Δηζαγσγηθά θαη κεηαβιεηέο θειύθνπο
Όηαλ ζπκπεξηιακβάλνληαη εηδηθνί ραξαθηήξεο ζηελ ηηκή κηαο κεηαβιεηήο απαηηείηαη πξνζνρή ψζηε λα κελ
εξκελεπηνχλ απηνί νη εηδηθνί ραξαθηήξεο. ην παξαθάησ παξάδεηγκα έγηλε εθρψξεζε ζηε κεηαβιεηή a ελφο
αιθαξηζκεηηθνχ ην νπνίν πεξηέρεη πνιιαπιά θελά δηαζηήκαηα. Αλ ρξεζηκνπνηεζεί ην $aρσξίο εηζαγσγηθά,
ην απνηέιεζκα είλαη ην ίδην κε ηελ πξνεγνχκελε πεξίπησζε, δειαδή θαηαζηξέθνληαη ηα πνιιαπιά θελά
δηαζηήκαηα. Θα πξέπεη ινηπφλ θαη νη κεηαβιεηέο λα ρξεζηκνπνηνχληαη κέζα ζε εηζαγσγηθά. Πξνθαλψο, αλ ε
κεηαβιεηή δελ πεξηείρε εηδηθνχο ραξαθηήξεο, δελ ζα ππήξρε πξφβιεκα ζηε ρξήζε ηεο θαη ρσξίο εηζαγσγηθά.
Όκσο απηφ δελ κπνξεί λα ην γλσξίδεη ν πξνγξακκαηηζηήο εθ ησλ πξνηέξσλ. πλεπψο, κέζα ζε έλα ζελάξην
θειχθνπο νη κεηαβιεηέο ζα πξέπεη λα ρξεζηκνπνηνχληαη κέζα ζε δηπιά εηζαγσγηθά. Δδψ λα ζπκίζνπκε φηη
κέζα ζηα δηπιά εηζαγσγηθά αθπξψλνληαη φινη νη εηδηθνί ραξαθηήξεο εθηφο απφ ηνπο $, \, ". Άξα, κέζα ζε
δηπιά εηζαγσγηθά νη κεηαβιεηέο, νη νπνίεο ζεκαηνδνηνχληαη κε ην $, εξκελεχνληαη. Μέζα ζε κνλά
εηζαγσγηθά αθπξψλνληαη όινη νη εηδηθνί ραξαθηήξεο, ζπλεπψο θαη ν ραξαθηήξαο $.
Μάιηζηα, φηαλ ζηηο κεηαβιεηέο πεξηέρνληαη πεξηζζφηεξν «θξίζηκνη» ραξαθηήξεο απφ ην θελφ
δηάζηεκα, ηφηε ηα απνηειέζκαηα κπνξεί λα είλαη ηξαγηθά άζηνρα, ελδερνκέλσο θαη θαηαζηξνθηθά γηα ηε
ζσζηή ιεηηνπξγία ηνπ ζελαξίνπ θειχθνπο, φπσο ζην παξαθάησ παξάδεηγκα. Δδψ ν εηδηθφο ραξαθηήξαο " *"
αληηθαζίζηαηαη κε φια ηα νλφκαηα αξρείσλ ηνπ ηξέρνληνο θαηαιφγνπ (ζπκεζείηε φηη είλαη wildcard -
Κεθάιαην 4).
bash-2.05a$ a='*'
bash-2.05a$ echo $a
file1 file5 test8
bash-2.05a$ echo "$a"
*
bash-2.05a$
185
bash-2.05a$ echo "x\$x"
x$x
bash-2.05a$ echo 'x$x'
x$x
bash-2.05a$ echo "x$x" # Με " θαη ρωξίο \$ ην απνηέιεζκα
# δελ είλαη ην δεηνύκελν.
x
bash-2.05a$
asidirop@aetos:/tmp$ a='test'
asidirop@aetos:/tmp$ b='foo'
asidirop@aetos:/tmp$ echo "$a$b"
testfoo
asidirop@aetos:/tmp$
asidirop@aetos:/tmp$ a='test'
asidirop@aetos:/tmp$ echo "$afoo"
asidirop@aetos:/tmp$
186
ην παξαπάλσ παξάδεηγκα ην θέιπθνο απνηπγράλεη λα ηππψζεη ηε κεηαβιεηή $a θαη ακέζσο κεηά ηε
ζπκβνινζεηξά "foo", δηφηη ζεσξεί φηη ην φλνκα ηεο κεηαβιεηήο είλαη afoo. Σέηνηα κεηαβιεηή δελ έρεη
νξηζηεί, ζπλεπψο εθηππψλεη θελφ. Τπάξρνπλ πνιιέο ιχζεηο, γηα λα παξαθακθζεί ην παξαπάλσ πξφβιεκα:
asidirop@aetos:/tmp$ a='test'
asidirop@aetos:/tmp$ echo "$a""foo"
testfoo
asidirop@aetos:/tmp$ echo "$a"foo
testfoo
asidirop@aetos:/tmp$ echo "$a"'foo'
testfoo
asidirop@aetos:/tmp$ echo $a'foo' #όρη θαιή ιύζε
testfoo
asidirop@aetos:/tmp$
Όιεο νη παξαπάλσ ιχζεηο είλαη ηνπ ηχπνπ WorkAround, δειαδή πξφρεηξε παξάθακςε ηνπ
πξνβιήκαηνο. Ζ νξζή θαη γεληθή ιχζε είλαη λα ρξεζηκνπνηνχληαη ηα άγθηζηξα: {}.
asidirop@aetos:/tmp$ a='test'
asidirop@aetos:/tmp$ echo "${a}foo"
testfoo
Όπσο έρνπκε αλαθέξεη θαη γηα άιιεο πεξηπηψζεηο, ε νξηνζέηεζε κεηαβιεηήο κε ηα άγθηζηξα είλαη
ραξαθηεξηζηηθφ θαη άιισλ γισζζψλ πξνγξακκαηηζκνχ πνπ έρνπλ θιεξνλνκήζεη ραξαθηεξηζηηθά απφ ην
θέιπθνο, φπσο ε php θαη ε perl.
asidirop@aetos:~$ date
Mon Jul 27 10:54:27 EEST 2015
asidirop@aetos:~$ a=`date`
asidirop@aetos:~$ echo "$a"
Mon Jul 27 10:54:32 EEST 2015
asidirop@aetos:~$ echo "$a"
Mon Jul 27 10:54:32 EEST 2015
asidirop@aetos:~$
Γηα παξάδεηγκα ε εληνιή date εκθαλίδεη ζηελ θαλνληθή έμνδν ηελ ηξέρνπζα εκεξνκελία θαη ψξα. Αλ
γίλεη αλάζεζε ηεο date κε αλάπνδα εηζαγσγηθά ζε κηα κεηαβιεηή a, ηφηε ε κεηαβιεηή ζα πεξηέρεη απηφ πνπ
187
έζηεηιε ε εληνιή ζηελ θαλνληθή έμνδν ηελ ψξα ηεο αλάζεζεο. Πξνθαλψο, φζεο θνξέο θαη λα εκθαλίζνπκε ηε
κεηαβιεηή ζα πεξηέρεη ηελ ψξα θαηά ηε ζηηγκή ηεο αλάζεζεο θαη φρη ηελ ψξα θαηά ηε ζηηγκή ηεο ρξήζεο.
Γειαδή ε εληνιή έρεη εθηειεζηεί κηα θνξά θαηά ηε ζηηγκή ηεο αλάζεζεο.
Δπηπιένλ, κέζα ζηα αλάπνδα εηζαγσγηθά κπνξεί λα ζπκπεξηιεθζεί νπνηνζδήπνηε ζπλδπαζκφο
εληνιψλ κε δηαζσιήλσζε, αλαθαηεχζπλζε θαη νηηδήπνηε άιιν ζα κπνξνχζε λα γξαθηεί ζηε γξακκή
εληνιψλ. ηελ πξαγκαηηθφηεηα, φηαλ ην θέιπθνο βξεη αλάπνδα εηζαγσγηθά δεκηνπξγεί έλα λέν θέιπθνο
(δηεξγαζία), ην νπνίν είλαη ππεχζπλν λα εθηειέζεη ηηο εληνιέο πνπ πεξηθιείνληαη ζηα εηζαγσγηθά. Ζ θαλνληθή
έμνδνο απφ ην λέν θέιπθνο δεζκεχεηαη θαη γίλεηαη αλάζεζε ζηε κεηαβιεηή. Όιεο νη εληνιέο πνπ ζα
εθηειεζηνχλ απφ ην λέν θέιπθνο, θιεξνλνκνχλ ηελ θαλνληθή έμνδν ηνπ λένπ θειχθνπο.
asidirop@aetos:~$ a=`ls|wc`
asidirop@aetos:~$ echo "$a"
33 33 257
asidirop@aetos:~$
Ζ έμνδνο ησλ εληνιψλ κέζα ζηα αλάπνδα εηζαγσγηθά κπνξεί λα πεξηέρεη πνιιέο γξακκέο, φπσο γηα
παξάδεηγκα ε έμνδνο απφ ηελ εληνιή ls -l:
188
Υξεηάδεηαη ηδηαίηεξε πξνζνρή! Όηαλ ζε έλα θέιπθνο ρξεζηκνπνηνύληαη δπλαηόηεηεο ηνπ bash
νη νπνίεο δελ ππνζηεξίδνληαη από ην sh, ζα πξέπεη νπσζδήπνηε ην ζελάξην λα μεθηλά
κε #!/bin/bash θαη όρη κε #!/bin/sh.
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 ζηνλ ηξφπν κε ηνλ νπνίν ζα
δνζνχλ ηα νξίζκαηα θαζψο θαη ζηελ πξάμε ηνπ πνιιαπιαζηαζκνχ.
Δθφζνλ ε πξάμε ηνπ πνιιαπιαζηαζκνχ ζπκβνιίδεηαη κε ηνλ ραξαθηήξα *, ν νπνίνο φκσο είλαη θαη
εηδηθφο ραξαθηήξαο γηα ην θέιπθνο, ζα πξέπεη λα αθπξσζεί ε εηδηθή ηνπ ζεκαζία. Γηαθνξεηηθά, φπσο
θαίλεηαη ζηελ πξψηε εληνιή παξαπάλσ ε expr ζα δψζεη ζπληαθηηθφ ζθάικα, δηφηη ην "*" ζα έρεη
αληηθαηαζηαζεί απφ ην θέιπθνο, πξηλ εθηειεζηεί ε expr κε ηα νλφκαηα αξρείσλ ηνπ ηξέρνληνο θαηαιφγνπ.
ηε δεχηεξε θαη ηξίηε εληνιή παξαπάλσ, έρεη αθπξσζεί ε εηδηθή ζεκαζία ηνπ "*", ζηε κηα κε ηελ αλάπνδε
θάζεην ελψ ζηελ άιιε κε ηα εηζαγσγηθά. Πξνζνρή φκσο (ηέηαξηε εληνιή) δελ ζα κπνξνχζακε λα βάινπκε ζε
εηζαγσγηθά νιφθιεξε ηελ αξηζκεηηθή παξάζηαζε. Ζ expr απαηηεί θάζε ηειεζηήο θαη ηειεζηένο λα απνηειεί
δηαθνξεηηθφ φξηζκα ζηελ εληνιή.
189
Δθφζνλ ε expr ζηέιλεη ην απνηέιεζκα ζηελ θαλνληθή έμνδν, κπνξνχκε λα δεζκεχζνπκε ηελ
θαλνληθή έμνδν κε ηε ρξήζε ησλ αλάπνδσλ εηζαγσγηθψλ θαη λα ηελ εθρσξήζνπκε ζε θάπνηα κεηαβιεηή.
asidirop@aetos:~$ c=`expr 7 / 2`
asidirop@aetos:~$ echo "$c"
3
asidirop@aetos:~$ a=4000
asidirop@aetos:~$ b=5
asidirop@aetos:~$ d=`expr "$a" + "$b"`
asidirop@aetos:~$ echo "$d"
4005
asidirop@aetos:~$
Ο πξνεγνχκελνο, ινηπφλ, είλαη ν γεληθφο ηξφπνο ρξήζεο ηεο expr ζε φια ηα θειχθε. Όκσο
ρξεηάδεηαη ηδηαίηεξε πξνζνρή θαηά ηε ρξήζε. ην παξαθάησ παξάδεηγκα θαίλνληαη δπν πνιχ ζπλεζηζκέλεο
πεξηπηψζεηο ζθάικαηνο. ηελ πξψηε πεξίπησζε νιφθιεξε ε αξηζκεηηθή παξάζηαζε απνηειεί έλα θαη κφλν
φξηζκα, θάηη πνπ δελ έρεη ηε δπλαηφηεηα λα ην δηαρεηξηζηεί ε expr. ηε δεχηεξε πεξίπησζε δελ δηαρσξίδεηαη
ε πξάμε απφ ηνλ δεχηεξν αξηζκφ, ζπλεπψο ε εληνιή ζεσξεί ην "+" σο πξφζεκν ηνπ δεχηεξνπ αξηζκνχ, άξα
ιείπεη ε πξάμε. Σν απνηέιεζκα θαη ζηηο δπν πεξηπηψζεηο είλαη εζθαικέλν.
Δπίζεο, πξφβιεκα κπνξεί λα δεκηνπξγεζεί θαη ζηηο πεξηπηψζεηο πνπ ρξεζηκνπνηνχληαη κεηαβιεηέο,
αιιά απηέο δελ έρνπλ αξρηθνπνηεζεί. ηα παξαθάησ παξαδείγκαηα, ζηελ πξψηε πεξίπησζε, έρεη
αξρηθνπνηεζεί ε κεηαβιεηή a αιιά φρη ε w. πλεπψο, ε εληνιή expr $a + $w είλαη ζαλ λα έρνπκε
γξάςεη expr 1 +, ην νπνίν πξνθαλψο είλαη ιαλζαζκέλε αξηζκεηηθή παξάζηαζε. Αθφκε θαη αλ
ρξεζηκνπνηεζνχλ εηζαγσγηθά (εληνιή ηξίηε), ην ηξίην φξηζκα ("$w") ζα είλαη θελφ (empty string), ην νπνίν
ε expr δελ κπνξεί λα ην κεηαηξέςεη ζε αξηζκφ.
bash-2.05a$ a=1
bash-2.05a$ expr $a + $w # πεξίπηωζε 1
Syntax error
bash-2.05a$ expr 1 + # πεξίπηωζε 2
Syntax error
bash-2.05a$ expr "$a" + "$w" # πεξίπηωζε 3
non-numeric argument
bash-2.05a$ expr 0"$a" + 0"$w" # πεξίπηωζε 4
1
bash-2.05a$ b=x
bash-2.05a$ expr 0"$a" + 0"$b" # πεξίπηωζε 5
expr: non-integer argument
bash-2.05a$ k=`expr $c + $w` # πεξίπηωζε 6
Syntax error
bash-2.05a$ echo $k
190
bash-2.05a$
Μηα πξφρεηξε παξάθακςε ηνπ πξνβιήκαηνο κπνξεί λα γίλεη ρξεζηκνπνηψληαο ην "0" πξηλ απφ θάζε
κεηαβιεηή, έηζη ψζηε, αλ ε κεηαβιεηή είλαη θελή ν ηειεζηένο λα είλαη "0", αλ δελ είλαη θελή, παξάδεηγκα "1",
ν ηειεζηένο ζα είλαη "01", δειαδή αξηζκεηηθά "1". Παξφια απηά, πάιη κπνξνχλ λα πξνθχςνπλ ζθάικαηα
ζηελ πεξίπησζε πνπ κηα κεηαβιεηή δελ πεξηέρεη αξηζκφ αιιά ραξαθηήξεο (πεξίπησζε 5).
Σέινο, ηα πξνβιήκαηα κπνξνχλ λα πνιιαπιαζηαζηνχλ, φηαλ γίλεηαη αλάζεζε ηνπ απνηειέζκαηνο ζε
κεηαβιεηή, αιιά ε θιήζε ηεο expr έδσζε θάπνην ζθάικα φπσο ζηελ πεξίπησζε 6. Ζ εληνιή δελ ζα
ηππψζεη ηίπνηε ζηελ θαλνληθή έμνδν, ζπλεπψο ε κεηαβιεηή ζα έρεη θελή ηηκή. Άξα, φηαλ ζα ηε
ρξεζηκνπνηήζνπκε αξγφηεξα ζην ζελάξην ζα δεκηνπξγήζεη πξφβιεκα.
Πξηλ από ηε ρξήζε ηεο expr απαηηείηαη νπσζδήπνηε έιεγρνο θαη επηβεβαίσζε λόκηκσλ ηηκώλ
ησλ κεηαβιεηώλ.
Δλαιιαθηηθά, κεηά από ηε ρξήζε ηεο expr απαηηείηαη νπσζδήπνηε έιεγρνο θαη επηβεβαίσζε
ηνπ απνηειέζκαηνο ή ηνπ θσδηθνύ ζθάικαηνο (error code ή exit code).
ην παξαπάλσ παξάδεηγκα βιέπνπκε (πεξηπηψζεηο 1 θαη 2) φηη δελ ππάξρεη πξφβιεκα κε ηε κε
χπαξμε θελψλ δηαζηεκάησλ κέζα ζηελ αξηζκεηηθή παξάζηαζε. ηελ πεξίπησζε 3, πνπ ρξεζηκνπνηείηαη ε
κεηαβιεηή w, ε νπνία δελ έρεη νξηζηεί, ρξεζηκνπνηείηαη ζαλ κεδέλ (0). Όκσο αλ είρακε βάιεη ηνλ
191
ραξαθηήξα $ πξηλ απφ ηε κεηαβιεηή w, ηφηε, φπσο θαίλεηαη ζηελ πεξίπησζε 4, ππάξρεη πξφβιεκα. Σέινο, αλ
κηα κεηαβιεηή πεξηέρεη γξάκκαηα θαη φρη αξηζκφ, ηφηε κεηαθξάδεηαη ζε κεδέλ (πεξίπησζε 5).
Υξεηάδεηαη κεγάιε πξνζνρή ζηελ πεξίπησζε πνπ ρξεζηκνπνηεζεί ν ραξαθηήξαο $ κέζα ζε
αξηζκεηηθή παξάζηαζε σο κεηαβιεηή.
asidirop@aetos:~$ a=13
asidirop@aetos:~$ b='test'
asidirop@aetos:~$ test='1000'
asidirop@aetos:~$ c=$(($a+$b))
asidirop@aetos:~$ echo $c
1013
asidirop@aetos:~$
To $ εξκελεχεηαη πξηλ απφ ηελ εθηέιεζε ηεο πξάμεο. Άξα, ην $b ζα αληηθαηαζηαζεί κε ην test θαη
ην $a κε ην 13. Άξα, είλαη ζαλ λα γξάθνπκε:c=$((13+test)) θαη ην test είλαη κεηαβιεηή πνπ πεξηέρεη
ηελ ηηκή 1000!
Πξνηηκήζηε ηε δπλαηόηεηα ηνπ bash γηα αξηζκεηηθέο πξάμεηο, αξθεί ην ζελάξην λα μεθηλάεη
κε #!/bin/bash
Απνθύγεηε ηε ρξήζε ηνπ $ κέζα ζηελ θαηάζηαζε αξηζκεηηθήο ιεηηνπξγίαο (arithmetic mode).
Σέινο, λα ζεκεησζεί φηη ε θαηάζηαζε αξηζκεηηθήο ιεηηνπξγίαο ππνζηεξίδεη φιεο ηηο καζεκαηηθέο
πξάμεηο θαη φιεο ηηο ζπληνκνγξαθίεο πνπ ηζρχνπλ ζηηο πεξηζζφηεξεο γιψζζεο πξνγξακκαηηζκνχ (Πίλαθα
8.1). Γηα παξάδεηγκα:
asidirop@aetos:~$ a=13
asidirop@aetos:~$ ((a++))
asidirop@aetos:~$ echo $a
14
asidirop@aetos:~$ ((a+=6))
asidirop@aetos:~$ echo $a
20
asidirop@aetos:~$ ((b=a+8))
asidirop@aetos:~$ c=$((a+8))
asidirop@aetos:~$ echo $b
28
asidirop@aetos:~$ echo $c
28
asidirop@aetos:~$
Όπσο θαίλεηαη ζηα παξαπάλσ παξαδείγκαηα, αλάζεζε ηηκήο ζε κεηαβιεηή κπνξεί λα γίλεη
εμνινθιήξνπ κέζα ζηελ θαηάζηαζε αξηζκεηηθήο ιεηηνπξγίαο, δειαδή ην ((b=a+8)). Πξνζνρή, ζε απηήλ
ηελ πεξίπησζε δελ ρξεζηκνπνηείηαη ν ραξαθηήξαο $ πξηλ απφ ηηο παξελζέζεηο.
192
Πίλαθαο 8.1: Λίζηα κε ηηο αξηζκεηηθέο πξάμεηο ηεο θαηάζηαζεο αξηζκεηηθήο ιεηηνπξγίαο ηνπ
θειύθνπο.
Πξάμε Δμήγεζε
id++ id-- variable post-increment and post-decrement
++id --id variable pre-increment and pre-decrement
- + unary minus and plus
! ~ logical and bitwise negation
** exponentiation
* ,/ , % multiplication, division, remainder
+, - addition, subtraction
<< , >> left and right bitwise shifts
<= ,>=, <, > comparison
==, != equality and inequality
&, ^, | bitwise AND, bitwise exclusive OR, bitwise OR
&&, || logical AND, logical OR
expr?expr:expr conditional operator
= *= /= %= += -= <<= >>=
assignment
&= ^= |=
ηόρνο
Δηζαγσγή ζηα ζελάξηα θινηνχ
Άζθεζε 1
Φηηάμηε έλα ζελάξην θειχθνπο κε φλνκα myls, ην νπνίν ζα εθηειεί ηελ εληνιή ls –l (ζα εκθαλίδεη ηα
απνηειέζκαηά ηεο), κεηά ζα εκθαλίδεη ην πιήζνο ησλ απιψλ αξρείσλ, ην πιήζνο ησλ θαηαιφγσλ, ην πιήζνο
ησλ θξπθψλ αξρείσλ, ην πιήζνο ησλ θξπθψλ θαηαιφγσλ.
193
Άζθεζε 2
Γεκηνπξγήζηε έλα script κε φλνκα echo_test ην νπνίν λα πεξηέρεη:
Αρχείο: echo_test
#!/bin/sh
#echo_test
#-----------------------------------
echo "1.the process id is : $$ and cwd $PWD"
echo '2.the process id is : $$ and cwd $PWD '
echo 3.the process id is : $$ and cwd $PWD
echo 4.the process id is\ \ :\ \ \ \$\$ and cwd $PWD
echo '5.the process id is : "$$ and cwd $PWD" '
echo "6.the process id is : '$$' and cwd $PWD"
Άζθεζε 3
Γεκηνπξγήζηε έλα ζελάξην θειχθνπο κε φλνκα echo_test3 ην νπνίν λα πεξηέρεη:
Αρχείο: echo_test3
#!/bin/bash
#echo_test3
#-----------------------------------
a=TEST
b=TEST B
c="TEST C"
d="$c + D"
echo "1.a is $a"
echo
echo "2.b is $b"
echo
echo '3.c is $c'
echo "4.c is $c"
echo 5.c is $c
echo
echo "5.d is $d"
echo var1="6 "
var2=$((var1 + 2 ))
echo "7.var1 is $var1, var2 is $var2"
194
Άζθεζε 4
Γεκηνπξγήζηε ηα παξαθάησ ζελάξηα θειχθνπο θαη εθηειέζηε ηα. Πνην είλαη ην θαιχηεξν;
Αρχείο: echo_test4a
#!/bin/sh
#echo_test4a
#-----------------------------------
x=`ls –l`
echo x is $x
Αρχείο: echo_test4b
#!/bin/sh
#echo_test4b
#-----------------------------------
x=`ls –l`
echo "x is $x"
Αρχείο: echo_test4c
#!/bin/sh
#echo_test4c
#-----------------------------------
x=`ls –l`
echo 'x is $x'
195
Άζθεζε 5
Γεκηνπξγήζηε έλα ζελάξην θειχθνπο κε φλνκα echo_test5 ην νπνίν λα πεξηέρεη:
Αρχείο: echo_test5
#!/bin/bash
#echo_test5
#-----------------------------------
a=5
b=" 6"
c=""
d=$((a+5))
e=$((b+5))
((f=c+5))
echo "d is $d, e is $e, f is $f"
echo d=`expr $a + 5`
e=`expr $b+5`
f=`expr $c+5`
echo "d is $d, e is $e, f is $f"
Άζθεζε 6
Γεκηνπξγήζηε έλα ζελάξην θειχθνπο κε φλνκα echo_test6 ην νπνίν λα πεξηέρεη:
Αρχείο: echo_test6
#!/bin/sh
#script06
#-----------------------------------
a=5
echo –n "Give me your name: "
read name
echo "value of a is $a"
echo "value of name is $name"
Άζθεζε 7
Γεκηνπξγήζηε ην παξαθάησ ζελάξην θειχθνπο:
Αρχείο: echo_test7
#!/bin/sh
#echo_test7
#-----------------------------------
echo "first parameter : $1"
echo "third parameter : $3"
196
echo "ninth parameter : $9"
echo "tenth parameter : $10"
echo "eleventh parameter : $11"
echo "No of parameters : $#"
echo "all parameters : $*"
echo "all parameters : $@"
shift
echo "first parameter : $1"
echo "all parameters : $*"
Μεηαβιεηή Δμήγεζε
$1,$2,…$9 νη ηηκέο ησλ 9 πξψησλ νξηζκάησλ πνπ έδσζε ν ρξήζηεο ζε έλα script
$# ην πιήζνο ησλ νξηζκάησλ πνπ έδσζε ν ρξήζηεο ζε έλα script
$*, $@ Οη πίλαθεο κε ηα νξίζκαηα πνπ έδσζε ν ρξήζηεο ζε έλα script
$$ Σν ProcessID ηνπ ηξέρνληνο shell
197
Παξάξηεκα Α
Α Ο επεμεξγαζηήο θεηκέλνπ vi
O vi είλαη ν βαζηθφο επεμεξγαζηήο θεηκέλνπ πνπ δεκηνπξγήζεθε γηα ην UNIX θαη απεπζπλφηαλ ζε «ζλεηνχο
ρξήζηεο». Πξηλ απφ ηνλ vi, νη επεμεξγαζηέο θεηκέλνπ δελ είραλ ηε ζεκεξηλή κνξθή θαη ιεηηνπξγία. Ο βαζηθφο
επεμεξγαζηήο θεηκέλνπ (γηα UNIX αιιά θαη γηα DOS) ήηαλ ν ed (editor). Ο ed αλήθε ζηελ θαηεγνξία πνπ
νλνκάδεηαη “line editor”. Γελ ππήξρε πξνβνιή ηνπ αξρείνπ, αιιά ν ρξήζηεο πιεθηξνινγνχζε ην θείκελφ ηνπ
κε εληνιέο, παξάδεηγκα: «πξφζζεζε ηε γξακκή κε θείκελν xyz». Πξνθαλψο, ηέηνηνπ ηχπνπ επεμεξγαζία
θεηκέλνπ ήηαλ βαζαληζηηθή γηα ηνπο ρξήζηεο. Ο vi ήηαλ απφ ηηο πξψηεο εθαξκνγέο ζηελ νπνία ν ρξήζηεο
έβιεπε ην θείκελν θαη κπνξνχζε λα κεηαθηλεζεί κε ηα βειάθηα ζε θάπνην ζεκείν ηνπ θεηκέλνπ θαη λα θάλεη
αιιαγέο/πξνζζήθεο.
H αξρηθή έθδνζε ηνπ vi δεκηνπξγήζεθε ην 1976, ελψ κέρξη ζήκεξα έρνπλ δεκηνπξγεζεί πάξα πνιινί
θιψλνη. Ζ έθδνζε θιψλνο πνπ ρξεζηκνπνηείηαη ζήκεξα πεξηζζφηεξν είλαη ν vIM (vi IMproved). Δπίζεο,
εθηφο απφ ηηο παξαδνζηαθέο εθδφζεηο πνπ ιεηηνπξγνχλ ζε ηεξκαηηθφ, έρνπλ δεκηνπξγεζεί θαη γξαθηθέο
εθαξκνγέο φπσο ν gvim, kvim θ.ά., νη νπνίεο εθηφο απφ ηηο βαζηθέο ιεηηνπξγίεο ηνπ vi εκθαλίδνπλ ζε
παξάζπξν κελνχ επηινγψλ θαζψο θαη toolbar κε ηηο ζπρλφηεξεο ιεηηνπξγίεο.
ην παξφλ παξνπζηάδνπκε ηε βαζηθή έθδνζε, φκσο, φια απηά πνπ αλαθέξνληαη ιεηηνπξγνχλ ζε
φινπο ηνπο θιψλνπο θαη παξαιιαγέο ηνπ vi.
Ο vi έρεη δπν θχξηεο θαηαζηάζεηο ιεηηνπξγίαο:
1. Καηάζηαζε Δληνιψλ (command mode).
2. Καηάζηαζε Δηζαγσγήο (insert mode).
Με ηελ έλαξμε ηνπ vi βξηζθφκαζηε ζε Καηάζηαζε Δληνιψλ. ηελ «Καηάζηαζε Δληνιψλ»
νπνηνδήπνηε πιήθηξν θαη λα παηήζνπκε αληηζηνηρεί ζε «Δληνιή». Φαληαζηείηε ηηο ζπληνκεχζεηο (shortcuts)
ζε κηα εθαξκνγή φπσο ζην Microsoft Word. Δλεξγνπνηνχληαη κε ην πιήθηξν Control. Παξάδεηγκα, ζην
Microsoft Word, ην "Cntrl-S" θάλεη απνζήθεπζε ηνπ αξρείνπ. Ζ "Καηάζηαζε Δληνιψλ" ηνπ vi, είλαη ΑΝ λα
έρνπκε παηεκέλν ην Cntrl θαη πεξηκέλεη λα παηήζνπκε θαη αθφκε έλα πιήθηξν γηα λα εθηειέζεη ηελ
αληίζηνηρε ζπληφκεπζε.
Όηαλ βξηζθφκαζηε ζε "Καηάζηαζε Δηζαγσγήο", ηφηε φ,ηη πιεθηξνινγνχκε πξνζηίζεηαη ζην αξρείν,
φπσο ζε έλαλ επεμεξγαζηή θεηκέλνπ ηχπνπ notepad.
Πσο, φκσο, κπαίλνπκε ζε «Καηάζηαζε Δηζαγσγήο»; Ζ απάληεζε είλαη: κε ηελ εληνιή (ζπληφκεπζε)
πνπ καο κεηαθέξεη ζε απηήλ ηελ θαηάζηαζε. Ζ πεξηζζφηεξν ζπρλή εληνιή γηα είζνδν ζε «Καηάζηαζε
Δηζαγσγήο» είλαη ε εληνιή "i". Τπάξρνπλ θαη άιιεο εληνιέο πνπ καο κεηαθέξνπλ ζε «Καηάζηαζε
Δηζαγσγήο», φπσο θαίλνληαη ζηνλ Πίλαθα Α.1.
θεθηείηε ην γεγνλφο φηη φηαλ δεκηνπξγήζεθε ην vi, δελ ππήξραλ παξαζπξηθά πεξηβάιινληα νχηε
πνληίθηα. πλεπψο, γηα ηε γξήγνξε επεμεξγαζία θεηκέλσλ ζε θαηάζηαζε ηεξκαηηθνχ θαη ηδίσο αξρείσλ πνπ
πεξηέρνπλ θψδηθα, δεκηνπξγήζεθαλ ζηνλ vi εθαηνληάδεο εληνιέο ζρεδφλ γηα φιεο ηηο πεξηπηψζεηο πνπ
ρξεηάδεηαη έλαο πξνγξακκαηηζηήο. Γηα απηφλ ηνλ ιφγν βιέπνπκε έμη εληνιέο πνπ καο κεηαθέξνπλ ζε
«Καηάζηαζε Δηζαγσγήο», αιιά κε δηαθνξεηηθφ ηξφπν, ψζηε λα ειαρηζηνπνηεζεί ην πιήζνο πιήθηξσλ πνπ
ρξεηάδεηαη λα παηήζεη θάπνηνο.
Δληνιή Λεηηνπξγία
i Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη ν θέξζνξαο παξακέλεη ζηε ζέζε ηνπ.
Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη ν θέξζνξαο κεηαθέξεηαη ακέζσο κεηά απφ ηελ
a
ηξέρνπζα ζέζε.
199
Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη ν θέξζνξαο κεηαθέξεηαη ζηελ αξρή ηεο
I ηξέρνπζαο γξακκήο. Αλ ππάξρνπλ ζηεινζέηεο ζηελ αξρή ηεο γξακκήο, ν θέξζνξαο ζα
κεηαθεξζεί πξηλ απφ ηελ πξψηε ιέμε ηεο ηξέρνπζαο γξακκήο.
Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη ν θέξζνξαο κεηαθέξεηαη ζην ηέινο ηεο ηξέρνπζαο
A
γξακκήο κεηά απφ ηνλ ηειεπηαίν ραξαθηήξα.
Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη λέα γξακκή. Γίλεηαη εηζαγσγή λέαο γξακκήο κεηά
o
απφ ηελ ηξέρνπζα θαη ν θέξζνξαο κεηαθέξεηαη ζε απηήλ ηε γξακκή.
Δίζνδνο ζε "Καηάζηαζε Δηζαγσγήο" θαη λέα γξακκή. Γίλεηαη εηζαγσγή λέαο γξακκήο πξηλ
Ο
απφ ηελ ηξέρνπζα θαη ν θέξζνξαο κεηαθέξεηαη ζε απηήλ ηε γξακκή.
ηνλ Πίλαθα Α.2 βιέπνπκε ηηο πεξηζζφηεξν ζπρλέο εληνιέο γηα ηνλ ρεηξηζκφ ηεο επεμεξγαζίαο,
δειαδή εληνιέο γηα αληηγξαθή-επηθφιιεζε, αλαίξεζε, επαλάιεςε θηι.
Δδψ πξέπεη λα ζεκεησζεί πσο γηα ηηο εληνιέο πνπ απνηεινχληαη απφ πεξηζζφηεξα ηνπ ελφο πιήθηξα,
δελ βιέπνπκε ηνπο ραξαθηήξεο πνπ πιεθηξνινγνχκε. Απιά ζα δνχκε ην απνηέιεζκα ηεο εληνιήο, φηαλ
νινθιεξσζεί ε πιεθηξνιφγεζή ηεο.
Δληνιή Λεηηνπξγία
u Αλαίξεζε (undo).
. Δπαλάιεςε ηειεπηαίαο εληνιήο (redo).
Γηαγξαθή ηεο ηξέρνπζαο γξακκήο θαη αληηγξαθή ηεο ζηελ πξνζσξηλή κλήκε (buffer ή
dd
clipboard).
Δπαλάιεςε ηεο εληνιήο Γηαγξαθήο Ν θνξέο. Οπζηαζηηθά δηαγξαθή Ν γξακκψλ
Ndd μεθηλψληαο απφ ηελ ηξέρνπζα. Οη γξακκέο ζα αληηγξαθνχλ ζηελ πξνζσξηλή κλήκε (buffer
ή clipboard).
Γηαγξαθή ηεο ηξέρνπζαο ιέμεο θαη αληηγξαθή ηεο ζηελ πξνζσξηλή κλήκε (buffer ή
dw
clipboard).
Γηαγξαθή Ν ιέμεσλ μεθηλψληαο απφ ηελ ηξέρνπζα ιέμε θαη αληηγξαθή ηνπο ζηελ
Νdw
πξνζσξηλή κλήκε (buffer ή clipboard).
Γηαγξαθή απφ ην ζεκείν ηνπ θέξζνξα κέρξη ην ηέινο γξακκήο θαη αληηγξαθή απηψλ πνπ
D
δηαγξάθεθαλ ζηελ πξνζσξηλή κλήκε (buffer ή clipboard).
Γηαγξαθή απφ ην ζεκείν ηνπ θέξζνξα θαη ησλ επφκελσλ Ν-1 γξακκψλ θαη αληηγξαθή
ND
απηψλ πνπ δηαγξάθεθαλ ζηελ πξνζσξηλή κλήκε (buffer ή clipboard).
yy Αληηγξαθή ηεο ηξέρνπζαο γξακκήο ζηελ πξνζσξηλή κλήκε (buffer ή clipboard).
Αληηγξαθή Ν γξακκψλ (μεθηλψληαο απφ ηελ ηξέρνπζα γξακκή) ζηελ πξνζσξηλή κλήκε
Νyy
(buffer ή clipboard).
Αληηγξαθή Ν γξακκψλ (μεθηλψληαο απφ ηελ ηξέρνπζα γξακκή) ζηελ πξνζσξηλή κλήκε
yw
(buffer ή clipboard).
Αληηγξαθή Ν ιέμεσλ μεθηλψληαο απφ ηελ ηξέρνπζα ιέμε ζηελ πξνζσξηλή κλήκε (buffer ή
Νyw
clipboard).
Αληηγξαθή απφ ην ζεκείν ηνπ θέξζνξα κέρξη ην ηέινο γξακκήο ζηελ πξνζσξηλή κλήκε
Τ
(buffer ή clipboard).
Αληηγξαθή απφ ην ζεκείν ηνπ θέξζνξα θαη ησλ επφκελσλ Ν-1 γξακκψλ ζηελ πξνζσξηλή
Τ
κλήκε (buffer ή clipboard).
200
Δπηθφιιεζε ησλ πεξηερνκέλσλ ηεο πξνζσξηλήο κλήκεο πξηλ ηνλ θέξζνξα. Αλ ε πξνζσξηλή
P κλήκε πεξηέρεη νιφθιεξεο γξακκέο, ηφηε γίλεηαη εηζαγσγή γξακκψλ πξηλ ηελ ηξέρνπζα
γξακκή.
Δπηθφιιεζε ησλ πεξηερνκέλσλ ηεο πξνζσξηλήο κλήκεο κεηά ηνλ θέξζνξα. Αλ ε
p πξνζσξηλή κλήκε πεξηέρεη νιφθιεξεο γξακκέο, ηφηε γίλεηαη εηζαγσγή γξακκψλ κεηά ηελ
ηξέρνπζα γξακκή.
Γηαγξαθή ηνπ ραξαθηήξα πνπ βξίζθεηαη θάησ απφ ηνλ θέξζνξα θαη αληηγξαθή ηνπ ζηελ
x
πξνζσξηλή κλήκε.
Γηαγξαθή ηνπ ραξαθηήξα πνπ βξίζθεηαη θάησ απφ ηνλ θέξζνξα θαη ησλ επφκελσλ Ν-1 (ηεο
Nx
ηξέρνπζαο γξακκήο) θαη αληηγξαθή ηνπο ζηελ πξνζσξηλή κλήκε.
Αληηθαηάζηαζε ηεο ηξέρνπζαο ιέμεο. Γηαγξάθεηαη ε ηξέρνπζα ιέμε θαη κπαίλνπκε ζε
cw «Καηάζηαζε Δηζαγσγήο Κεηκέλνπ» γηα ηελ πιεθηξνιφγεζε. Θα πξέπεη λα παηεζεί ην
πιήθηξν Esc γηα ηέινο αληηθαηάζηαζεο.
Αληηθαηάζηαζε ηεο ηξέρνπζαο ιέμεο θαη ησλ Ν-1 επφκελσλ ιέμεσλ. Γηαγξάθνληαη νη Ν
Ncw ιέμεηο θαη κπαίλνπκε ζε «Καηάζηαζε Δηζαγσγήο Κεηκέλνπ» γηα ηελ πιεθηξνιφγεζε. Θα
πξέπεη λα παηεζεί ην πιήθηξν Esc γηα ηέινο αληηθαηάζηαζεο.
Αληηθαηάζηαζε ηνπ ηξέρνληνο ραξαθηήξα (πνπ βξίζθεηαη θάησ απφ ηνλ θέξζνξα). Ακέζσο
r
κεηά ην "r" ζα πξέπεη λα παηήζνπκε ηνλ ραξαθηήξα αληηθαηαζηάηε.
Αληηθαηάζηαζε ηνπ ηξέρνληνο ραξαθηήξα (πνπ βξίζθεηαη θάησ απφ ηνλ θέξζνξα) θαη ησλ
Νr Ν-1 επφκελσλ. Ακέζσο κεηά ην "r" ζα πξέπεη λα παηήζνπκε ηνλ ραξαθηήξα
αληηθαηαζηάηε. Θα γίλνπλ Ν αληηθαηαζηάζεηο.
Μεηαηξνπή ηνπ ηξέρνληνο ραξαθηήξα (πνπ βξίζθεηαη θάησ απφ ηνλ θέξζνξα) απφ πεδφ ζε
~
θεθαιαίν ή ην αληίζηξνθν.
Μεηαηξνπή ηνπ ηξέρνληνο ραξαθηήξα θαη ησλ Ν-1 επφκελσλ απφ πεδνχο ζε θεθαιαίνπο ή
Ν~
ην αληίζηξνθν.
Όπσο είλαη ζρεδφλ πξνθαλέο απφ ηνλ πξνεγνχκελν πίλαθα, ε ιεηηνπξγία επαλάιεςεο κπνξεί λα
εθαξκνζηεί ζε νπνηαδήπνηε εληνιή. Πιεθηξνινγνχκε έλαλ αξηζκφ, κεηά ηελ εληνιή θαη ε εληνιή
επαλαιακβάλεηαη ηφζεο θνξέο, φζεο θαη ν αξηζκφο πνπ δφζεθε. Πξνθαλψο, ν αξηζκφο κπνξεί λα είλαη
κνλνςήθηνο, δηςήθηνο ή νπνηνπδήπνηε κεγέζνπο. Παξάδεηγκα, αλ παηήζνπκε "16p", ζα γίλεη 16 θνξέο ε
εληνιή επηθφιιεζεο, δειαδή φ,ηη ππάξρεη ζηελ πξνζσξηλή κλήκε ζα επηθνιιεζεί 16 θνξέο. Αλ παηήζνπκε
"12~", ζα κεηαηξαπνχλ 12 ραξαθηήξεο απφ πεδνί ζε θεθαιαίνπο (ή ην αληίζηξνθν).
ηελ «Καηάζηαζε Δηζαγσγήο Δληνιψλ», άιιεο εληνιέο αληηζηνηρνχλ ζε πεδά γξάκκαηα θαη άιιεο ζε
θεθαιαία. Παξάδεηγκα, είλαη δηαθνξεηηθή ε εληνιή "i" απφ ηελ εληνιή "I". Γηα απηφ απαηηείηαη πξνζνρή ζηε
ρξήζε ηνπ "Caps Lock" θαη θαιφ είλαη λα είλαη πάληα απελεξγνπνηεκέλν.
Δπίζεο, ν vi, δελ θαηαιαβαίλεη εληνιέο ζηα ειιεληθά. Παξάδεηγκα, αλ έρνπκε επηιεγκέλν ην ειιεληθφ
πιεθηξνιφγην, ηφηε ην πιήθηξν "i" ζε θαηάζηαζε Δληνιψλ ζα αληηζηνηρεί ζηνλ ραξαθηήξα "η" (γηψηα κηθξφ),
ην νπνίν γηα ηνλ vi δελ είλαη εληνιή. Τπάξρεη, βέβαηα, ε δπλαηφηεηα λα ξπζκηζηεί ν vi, ψζηε λα θαηαιαβαίλεη
σο εληνιέο θαη ηνπο ειιεληθνχο ραξαθηήξεο, απαηηεί, φκσο, αξθεηέο ξπζκίζεηο γηα ηελ επνηθνδνκεηηθή
ιεηηνπξγία θαη δελ πεξηγξάθνληαη ζην παξφλ.
Τπάξρνπλ πάξα πνιιέο εληνιέο κεηαθίλεζεο. Θπκεζείηε πσο, φηαλ δεκηνπξγήζεθε ν vi δελ ππήξραλ
πνληίθηα. Δπίζεο, φια ηα πιεθηξνιφγηα δελ είραλ πιήθηξα κεηαθίλεζεο (βειάθηα) ή θαη αλ είραλ, δελ ήηαλ
φια ζπκβαηά κεηαμχ ηνπο. ηνλ Πίλαθα Α.3 αλαθέξνπκε κεξηθέο κφλν απφ ηηο εληνιέο κεηαθίλεζεο.
201
Πίλαθαο Α.3: Δληνιέο Μεηαθίλεζεο ζε "Καηάζηαζε Δληνιώλ".
Δληνιή Λεηηνπξγία
Μεηαθίλεζε αξηζηεξά (←), θάησ (↓), επάλσ (↑), δεμηά (→). Δίλαη αληίζηνηρα κε ηα
h,j,k,l
πιήθηξα κεηαθίλεζεο ηα νπνία δνπιεχνπλ θαη απηά ζε φιεο ηηο λέεο εθδφζεηο ηνπ vi.
^ Μεηαθίλεζε ζηελ αξρή γξακκήο.
$ Μεηαθίλεζε ζην ηέινο γξακκήο.
G Μεηαθίλεζε ζηελ ηειεπηαία γξακκή ηνπ αξρείνπ.
NG Μεηαθίλεζε ζηε N-νζηή γξακκή ηνπ αξρείνπ (πρ 5G ζηελ 5ε γξακκή).
w Μεηαθίλεζε ζηελ επφκελε ιέμε, ζπκπεξηιακβάλνληαο σο ιέμε θαη ηα ζεκεία ζηίμεο.
W Μεηαθίλεζε ζηελ επφκελε ιέμε, αγλνψληαο ηα ζεκεία ζηίμεο.
e,Δ Μεηαθίλεζε ην ηέινο ηεο ιέμεο, ζπκπεξηιακβάλνληαο ή φρη ηα ζεκεία ζηίμεο.
b,B Μεηαθίλεζε ζηελ πξνεγνχκελε ιέμε ζπκπεξηιακβάλνληαο ή φρη ηα ζεκεία ζηίμεο.
Μεηαθίλεζε ζηελ πξψηε γξακκή πνπ θαίλεηαη ζηελ νζφλε (κπνξεί λα είλαη ε πξψηε
Ζ
γξακκή ηνπ αξρείνπ ή φρη).
Μεηαθίλεζε ζηελ παξέλζεζε ( "(", ")" ) ή αγθχιε( "[", "]" ) ή άγθηζηξν ( "{", "}" ) πνπ
%
ηαηξηάδεη.
(, ) Μεηαθίλεζε ζηελ πξνεγνχκελε ή επφκελε πξφηαζε.
{, } Μεηαθίλεζε ζηελ αξρή ηεο ηξέρνπζαο ή ηεο επφκελεο παξαγξάθνπ.
Όια ηα παξαπάλσ κπνξνχλ λα ζπλδπαζηνχλ κε ηελ επαλάιεςε εληνιήο, πρ: "3}" ζα κεηαθέξεη ηνλ
θέξζνξα 3 παξαγξάθνπο κεηά. Δπίζεο, κπνξνχλ λα ζπλδπαζηνχλ κε ηηο εληνιέο δηαγξαθήο ή αληηγξαθήο.
Παξάδεηγκα, έρνληαο ηνλ θέξζνξα ζε έλα άγθηζηξν πνπ αλνίγεη ({), αλ παηήζνπκε "d%", ζα δηαγξάςεη κέρξη
ην άγθηζηξν πνπ θιείλεη. Αλ ζε κηα παξάγξαθν παηήζνπκε "3y}", ζα αληηγξάςεη ηηο επφκελεο 3
παξαγξάθνπο.
I, i, A, a, o, O
Καηάζηαζε Εηζαγωγήο
(insert mode)
Esc
Καηάζηαζε Εληνιώλ
: (command mode)
Enter or Esc
/,?
Enter or Esc
Καηάζηαζε Γξακκήο
Εληνιώλ
(command line mode)
! Καηάζηαζε Αλαδήηεζεο
(search mode)
Γξακκή εληνιώλ
θειύθνπο
(shell command mode)
Δθηφο απφ ηηο δπν βαζηθέο θαηαζηάζεηο ιεηηνπξγίαο πνπ πεξηγξάςακε (Δηζαγσγήο θαη Δληνιψλ),
ππάξρνπλ θαη άιιεο θαηαζηάζεηο ιεηηνπξγίαο. Κάπνηεο εληνιέο είηε κπνξεί λα είλαη πεξίπινθεο είηε πνιχ
202
ζεκαληηθέο, νπφηε θαη πξέπεη λα ηηο βιέπνπκε θαζψο ηηο πιεθηξνινγνχκε. Έηζη, ππάξρεη ε «Καηάζηαζε
Γξακκήο Δληνιψλ». ε απηήλ ηελ θαηάζηαζε κπνξνχκε λα κεηαβνχκε παηψληαο ηελ εληνιή ":" φηαλ
βξηζθφκαζηε ζε «Καηάζηαζε Δληνιψλ». Σφηε ζηελ ηειεπηαία γξακκή ηνπ ηεξκαηηθνχ εκθαλίδεηαη ν
ραξαθηήξαο ":" θαη αλακέλεη λα πιεθηξνινγεζεί εληνιή. Οη εληνιέο ζε «Καηάζηαζε Γξακκήο Δληνιψλ»
είλαη δηαθνξεηηθέο απφ ηηο εληνιέο ζε «Καηάζηαζε Δληνιψλ».
ε απηήλ ηελ θαηάζηαζε, νη δπν πνιχ ζεκαληηθέο εληνιέο είλαη ε εληνιή γηα απνζήθεπζε ηνπ
αξρείνπ θαη γηα ηεξκαηηζκφ ηνπ πξνγξάκκαηνο.
Δληνιή Λεηηνπξγία
:w Απνζήθεπζε ηνπ αξρείνπ (write).
Απνζήθεπζε ηνπ αξρείνπ κε λέν φλνκα. Δίλαη αληίζηνηρε ηεο ιεηηνπξγίαο
"Απνζήθεπζε Χο" ή "Save As". Σν φλνκα αξρείνπ κπνξεί λα είλαη κφλν φλνκα,
:w
νπφηε θαη ζα απνζεθεπηεί ζηνλ ηξέρνληα θάθειν ή δηαδξνκή (απφιπηε ή ζρεηηθή)
filename
πξνο φλνκα αξρείνπ. Παξαδείγκαηα: :w file.txt ή :w /tmp/file2.txt
ή :w ../file3.txt
Έμνδνο απφ ην πξφγξακκα (quit). ηελ πεξίπησζε πνπ δελ έρεη απνζεθεπηεί ε
:q ηειεπηαία ηξνπνπνίεζε ηνπ αξρείνπ, ζα εκθαληζηεί κήλπκα πξνεηδνπνίεζεο θαη δελ
ζα εθηειεζηεί ε ιεηηνπξγία εμφδνπ.
Έμνδνο απφ ην πξφγξακκα αγλνψληαο ηπρφλ πξνεηδνπνίεζε. Θα ηεξκαηίζεη ηνλ vi
:q!
αθφκε θαη αλ δελ έρεη απνζεθεπηεί ε ηειεπηαία έθδνζε ηνπ αξρείνπ.
Απνζήθεπζε ηνπ αξρείνπ θαη αγλφεζε πξνεηδνπνίεζεο. πλήζσο πξνθχπηεη
:w! πξνεηδνπνίεζε γηα κεηαβνιή ελφο αξρείνπ πνπ έρεη νξηζηεί "κφλν γηα αλάγλσζε"
(read-only).
:wq Απνζήθεπζε ηνπ αξρείνπ θαη κεηά έμνδνο.
Απφ ηελ «Καηάζηαζε γξακκήο εληνιψλ» βγαίλνπκε απηφκαηα κε ηελ εθηέιεζε ηεο εληνιήο, δειαδή
κφιηο παηήζνπκε ην πιήθηξν "Enter". ηελ πεξίπησζε πνπ έρνπκε μεθηλήζεη ηελ πιεθηξνιφγεζε κηαο
εληνιήο, αιιά ηειηθά δελ επηζπκνχκε ηελ εθηέιεζή ηεο, κπνξνχκε λα παηήζνπκε "Esc", νπφηε θαη
αθπξψλεηαη ε εληνιή θαη επηζηξέθνπκε ζε «Καηάζηαζε Δληνιψλ».
ηελ Καηάζηαζε Γξακκήο Δληνιψλ, ν vi δέρεηαη θαη φιεο ζρεδφλ ηηο εληνιέο ηνπ πξνγξάκκαηνο sed.
Όληαο ζε «Καηάζηαζε Γξακκήο Δληνιψλ», κπνξνχκε λα πιεθηξνινγήζνπκε ηνλ ραξαθηήξα "!" θαη
κεηά κηα εληνιή ηνπ θειχθνπο. Παξάδεηγκα:!ls -l. Ο vi ζα εθηειέζεη έλα θέιπθνο θαη κέζα ζε απηφ ηελ
εληνιή πνπ δφζεθε. Θα εκθαληζηνχλ ηα απνηειέζκαηα ηεο εληνιήο θαη ζα ππάξρεη ε πξνηξνπή λα παηήζνπκε
"Enter" γηα επηζηξνθή ζηνλ vi θαη ζηελ «Καηάζηαζε Δληνιψλ».
Απφ «Καηάζηαζε Δληνιψλ» παηψληαο ην πιήθηξν «/» ή ην "?" κπαίλνπκε ζε «Καηάζηαζε
Αλαδήηεζεο» (Search Mode). Δδψ, πξέπεη λα πιεθηξνινγήζνπκε ην θείκελν γηα αλαδήηεζε. Με ηελ
νινθιήξσζε ηεο πιεθηξνιφγεζεο (παηψληαο Enter) κεηαθέξεηαη ν θέξζνξαο ζηελ πξψηε εκθάληζε ηνπ
θεηκέλνπ πνπ αλαδεηήζακε. Με ηελ εληνιή “n” κεηαθεξφκαζηε ζηελ επφκελε εκθάληζε. Με ηελ εληνιή «Ν»
κεηαθεξφκαζηε ζηελ πξνεγνχκελε εκθάληζε. Με ην "/" ε αλαδήηεζε γίλεηαη πξνο ηα θάησ, κε ην "?" ε
αλαδήηεζε γίλεηαη πξνο ηα πίζσ.
ηελ «Καηάζηαζε Αλαδήηεζεο» ν vi δέρεηαη θαη ην βαζηθφ ζχλνιν θαλνληθψλ εθθξάζεσλ, γηα ην
νπνίν γίλεηαη ιφγνο ζην Κεθάιαην 6.
Σέινο, ζε απηφ ην ζεκείν λα παξαηεξήζνπκε φηη νη δπλαηφηεηεο θαη νη ιεηηνπξγίεο ηνπ vi είλαη πνιχ
πεξηζζφηεξεο απφ απηέο πνπ αλαθέξνληαη ζην παξφλ θεθάιαην. Γηα πεξηζζφηεξεο πιεξνθνξίεο αλαηξέμηε ζην
εγρεηξίδην ρξήζεο ηνπ vi.
203
Παξάξηεκα Β
username:password:UID:GID:ΠιήξεοΌλνκα:ΚαηάινγνοHOME:πξνθαζνξηζκέλν
θέιπθνο
asidirop:x:1001:2001:Antonis Sidiropoulos,,,:/home/asidirop:/bin/bash
Σν δεχηεξν πεδίν ζε απηφ ην αξρείν πεξηέρεη πάληα ην “x”. Αξρηθά, ζε απηφ ην πεδίν απνζεθεπφηαλ ν
θσδηθφο ηνπ ρξήζηε (password) ζε θξππηνγξαθεκέλε κνξθή. Όινη νη ρξήζηεο κπνξνχζαλ λα δνπλ ηα
πεξηερφκελα απηνχ ηνπ αξρείνπ, άξα θαη ηνπο θξππηνγξαθεκέλνπο θσδηθνχο. Μέρξη ηε δεθαεηία ηνπ 1990
πεξίπνπ, απηφ ήηαλ αξθεηά αζθαιέο, δηφηη θάπνηνο «θαθφβνπινο» ρξήζηεο κε δεδνκέλνλ ηνλ
205
θξππηνγξαθεκέλν θσδηθφ θαη ρξεζηκνπνηψληαο ηε κέζνδν “brute force” ρξεηαδφηαλ κήλεο ή θαη ρξφληα
ππνινγηζηηθήο ηζρχνο, γηα λα απνθξππηνγξαθήζεη ηνλ πξαγκαηηθφ θσδηθφ. Μεηά ην 1990 θαη κε ηε βειηίσζε
ησλ επεμεξγαζηψλ, απηφο ν ρξφλνο ζπλερψο κεησλφηαλ θαη κε έλαλ ππνινγηζηή ηχπνπ Pentium απαηηνχληαλ
κεξηθέο εκέξεο κφλν γηα λα νινθιεξσζεί ε δηαδηθαζία “brute force” θαη λα γίλεη απνθξππηνγξάθεζε ηνπ
θσδηθνχ ελφο ρξήζηε. πλεπψο, γηα ιφγνπο αζθαιείαο, νη θσδηθνί ησλ ρξεζηψλ δελ ζα έπξεπε λα βξίζθνληαη
ζε απηφ ην αξρείν, αθφκε θαη αλ ήηαλ ζε θξππηνγξαθεκέλε κνξθή. Οξίζηεθε ην αξρείν/etc/shadow λα
πεξηέρεη ηνπο θξππηνγξαθεκέλνπο θσδηθνχο ησλ ρξεζηψλ. Δπηπιένλ, ην αξρείν /etc/shadow δελ είλαη
πξνζβάζηκν απφ ηνπο ρξήζηεο θαη εθαξκφδνληαη βειηησκέλνη αιγφξηζκνη θξππηνγξάθεζεο.
Παξάδεηγκα ην παξαθάησ:
printer:x:5001:klefturi,asidirop,kgiak,psarnik,vassik
νξίδεη φηη:
Τπάξρεη ε νκάδα κε φλνκα printer.
Γηα ηελ νκάδα printer αληηζηνηρεί ν κνλαδηθφο θσδηθφο GID=5001.
Μέιε ηεο νκάδαο είλαη νη ρξήζηεο: klefturi, asidirop, kgiak, psarnik, vassik.
asidirop:x:1001:2001:Antonis Sidiropoulos,Room-
106,1984,asidirop@gmail.com:/home/asidirop:/bin/bash
Οη πιεξνθνξίεο απηέο κπνξνχλ λα ηξνπνπνηεζνχλ θαη απφ ηνλ ίδην ηνλ ρξήζηε ρξεζηκνπνηψληαο ηελ
εληνιή chfn. Όπσο θαίλεηαη ζηηο παξαθάησ εξσηήζεηο πνπ θάλεη ε εληνιή chfn, ην πξψην επηπιένλ πεδίν
αληηζηνηρεί ζηνλ αξηζκφ γξαθείνπ ηνπ ρξήζηε, ην δεχηεξν ζηνλ αξηζκφ ηειεθψλνπ ζην γξαθείν ηνπ ρξήζηε
θαη ην ηξίην ζηνλ αξηζκφ ηειεθψλνπ ηεο νηθίαο ηνπ ρξήζηε. πλήζσο ην ηειεπηαίν απηφ πεδίν
ρξεζηκνπνηείηαη γηα λα θαηαρσξεζνχλ άιια ζηνηρεία επηθνηλσλίαο ηνπ ρξήζηε, φπσο ε δηεχζπλζε
ειεθηξνληθνχ ηαρπδξνκείνπ.
asidirop@asidirop:~/Book$ chfn
Password:
Changing the user information for asidirop
Enter the new value, or press ENTER for the default
Full Name: Antonis Sidiropoulos
Room Number [Room-106]:
Work Phone [1984]:
206
Home Phone [asidirop@gmail.com]:
Όινη νη ππφινηπνη ρξήζηεο (ηνπ ίδηνπ ζπζηήκαηνο) κπνξνχλ κε ηελ εληνιή finger λα δνπλ απηά ηα
ζηνηρεία. Παιηφηεξα, ε ππεξεζία finger ήηαλ δηαζέζηκε θαη απνκαθξπζκέλα, δειαδή θαη απφ απνκαθξπζκέλν
ζχζηεκα κπνξνχζε θάπνηνο λα βξεη πιεξνθνξίεο γηα έλαλ ζπγθεθξηκέλν ρξήζηε. Πιένλ φκσο, δελ
πξνζθέξεηαη ζηα πεξηζζφηεξα ζπζηήκαηα δηφηη κπνξεί λα ρξεζηκνπνηεζεί γηα ζπιινγή πιεξνθνξηψλ ζε
ζρέζε κε ηνπο ρξήζηεο ελφο ζπζηήκαηνο απφ «θαθφβνπινπο» απνκαθξπζκέλνπο ρξήζηεο.
207
Δπξεηήξην όξσλ
209
Permissions .......................................................... 99 U
PID..................................................................... 146
umask .................................................................107
Pipe ...................................................................... 30
Unics ....................................................................27
Pipelining........................................................... 167
Unics (UNiplexed Information and Computing
PPID .................................................................. 146
Service) ............................................................27
Pre-emptive Operating System ............................ 26
Unix .....................................................................27
Priority ............................................................... 146
User Groups .........................................................31
Proc Directory ................................................... 152
user permissions ................................................100
Process ............................................... 145, 146, 149
Users ....................................................................31
prompt ................................................................. 29
UTF......................................................................86
ps (εληνιή) ......................................................... 146
pstree (εληνιή) ................................................... 148 V
pts ...................................................................... 160 Variables ....................................................180, 183
Q Virtual Machine ...................................................33
Virtualization .......................................................33
Quotes................................................................ 184
W
R
Wildcards .............................................................82
read (εληνιή) ..................................................... 182
Windows Command Prompt................................38
read permission.................................................. 100
write permission ................................................100
Real-time Operating Systems .............................. 26
Redirection ........................................ 158, 159, 161 Α
Regular Expression............................................ 119 άδεηα αλάγλσζεο ...............................................100
Regular Language.............................................. 119 άδεηα εγγξαθήο ..................................................100
Relative Path.................................................. 58, 61 άδεηα εθηέιεζεο .................................................100
root directory ....................................................... 54 άδεηεο άιισλ ......................................................100
S άδεηεο νκάδαο ....................................................100
Άδεηεο πξφζβαζεο ...............................................99
Script Debugging ............................................... 179
άδεηεο ρξήζηε ....................................................100
Script Execution ................................................ 178
Αθχξσζε εληνιήο ................................................47
setgid ................................................................. 101
Αλαθαηεχζπλζε .................................158, 159, 161
setuid ................................................................. 101
Αλάπνδα Δηζαγσγηθά ................................184, 187
shell ..................................................................... 38
Αλαθνξά Πίζσ ..................................................130
Shell ..................................................................... 29
Απφιπηε Γηαδξνκή ..............................................57
Shell Variables .......................................... 180, 183
Απνζθαικάησζε ...............................................179
Signal ................................................................. 150
Απνζθαικάησζε ζελαξίσλ θειχθνπο ..............179
Single Quotes ................................................... 184
Αξηζκεηηθέο Πξάμεηο .................................189, 191
Single-tasking Operating System ........................ 25
Αξρεία δεδνκέλσλ ...............................................30
Single-user Operating System ............................. 26
Αξρεία Δπηθνηλσλίαο ...........................................30
Sockets................................................................. 30
Αξρεία πζθεπψλ ................................................30
Status ................................................................. 146
Αξρείν ..................................................................30
Stderr ......................................................... 158, 159
Stdin........................................................... 158, 159 Β
Stdout......................................................... 158, 159 Βαζηθέο Καλνληθέο Δθθξάζεηο ..........................132
sticky bit ............................................................ 101
String Concatenation ......................................... 186 Γ
Strings Δηζαγσγηθά............................................ 184 Γηαδξνκή .............................................................57
Swap .................................................................. 145 Γηαζσιήλσζε ..............................................30, 167
System V ............................................................. 27 Γηαηχπσζε εληνιψλ.............................................39
T Γηεξγαζία ...................................................145, 149
Γηεξκελεπηήο .......................................................38
Task ................................................................... 145 δηθαησκάησλ κεηαβνιή......................................105
Task Manager .................................................... 145 Γηπιά Δηζαγσγηθά .............................................184
Terminal .............................................................. 37
Tilde..................................................................... 67
210
Δ Ο
Δηθνληθή Μεραλή ................................................ 33 Οκάδεο ρξεζηψλ ..................................................31
Δηθνληθνπνίεζε ................................................... 33
Π
Δηζαγσγηθά .................................................. 93, 184
Δθηέιεζε ελαξίσλ ........................................... 178 Πεξηζπσκέλε .......................................................67
Δθηεηακέλεο Καλνληθέο Δθθξάζεηο .................. 132 πξνηξνπή .............................................................29
Δλζσκαησκέλα Λεηηνπξγηθά πζηήκαηα............ 26
Ρ
Έμνδνο Λαζψλ ........................................... 158, 159
Δξγαζία ............................................................. 145 Ρνέο Δηζφδνπ-Δμφδνπ ........................158, 159, 161
Κ
Καλνληθή Γιψζζα ............................................. 119 ήκα...................................................................150
Καλνληθή Δίζνδνο ..................................... 158, 159 πκβνινζεηξέο Δηζαγσγηθά...............................184
Καλνληθή Έθθξαζε ........................................... 119 ζχλδεζκνο ............................................................30
Καλνληθή Έμνδνο ...................................... 158, 159 πλέλσζε πκβνινζεηξψλ ................................186
Καηαλεκεκέλα Λεηηνπξγηθά πζηήκαηα ............. 26 χλνια θαλνληθψλ εθθξάζεσλ..........................132
θέιπθνο ......................................................... 29, 38 χλνια Υαξαθηήξσλ ...........................................84
Κέιπθνο............................................................... 29 χζηεκα Αξρείσλ ................................................53
θιάζε ραξαθηήξσλ............................................ 122 ρεηηθή Γηαδξνκή ..........................................58, 61
Κπκαηνεηδήο Γξακκή .......................................... 67 Σ
Λ ηειεζηήο αθνινπζίαο .........................................124
Λεηηνπξγηθά πζηήκαηα Πξαγκαηηθνχ Υξφλνπ.. 26 ηειεζηήο ελαιιαγήο ...........................................125
Λεηηνπξγηθφ χζηεκα.......................................... 25 Σειεζηήο Οκαδνπνίεζεο ...................................129
Λεηηνπξγηθφ χζηεκα Μνλήο Δξγαζίαο ............. 25 Σεξκαηηθφ ............................................................37
Λεηηνπξγηθφ χζηεκα Μνλνχ Υξήζηε................ 26 Σνπηθέο Ρπζκίζεηο Γηεξγαζίαο...........................157
Λεηηνπξγηθφ χζηεκα Πνιιαπιψλ Δξγαζηψλ .... 25 Σξέρσλ Καηάινγνο Δξγαζίαο ..............................58
Λεηηνπξγηθφ χζηεκα Πνιιαπιψλ Υξεζηψλ ..... 26 Σχπνο πζηήκαηνο Αξρείσλ ................................53
Μ Φ
κάζθα δηθαησκάησλ .......................................... 107 Φάθεινο ...............................................................30
Μεηαβιεηέο ............................................... 180, 183 Χ
Μεηαβιεηέο Κειχθνπο .............................. 180, 183
Μεηαβιεηέο Πεξηβάιινληνο...................... 154, 186 Υαξαθηήξεο Μπαιαληέξ .....................................82
Μεηαβιεηή Πεξηβάιινληνο LANG ................... 157 Υξήζηεο ...............................................................31
Μεηαβιεηή Πεξηβάιινληνο LANGUAGE ........ 157
Μεηαβιεηή Πεξηβάιινληνο PATH ................... 158
Μνλά Δηζαγσγηθά ............................................ 184
211