Εργαστήριο ΔΙΑΧΕΙΡΙΣΗ ΑΡΧΕΙΩΝ & ΚΑΤΑΛΟΓΩΝ ΣΤΟ UNIX. Εισαγωγή

Σχετικά έγγραφα
Εργαστήριο ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑ UNIX

Εισαγωγή στην Επιστήμη της Πληροφορικής Εργαστήριο. UNIX Μέρος 1

[11] Υπολογιστικά συστήματα: Στρώματα. Περιεχόμενα. Εισαγωγή. επικοινωνία εφαρμογές λειτουργικό σύστημα προγράμματα υλικό

Μερικές άλλες χρήσιμες εντολές

ΕΡΓΑΣΤΗΡΙΟ 2: Unix Tutorial

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. Εισαγωγή στο Unix

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στο Λ.Σ. UNIX

Προγραμματισμός Διαχείρισης Συστημάτων Ι

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

Unix: Εντολές, οργάνωση και χειρισµός αρχείων, διεργασίες

ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Τμήμα Μηχανικών Πληροφορικής ΤΕ Λειτουργικά Συστήματα (Εργαστήριο) Διδάσκων: I. Τσακνάκης. 8ο Εργαστήριο

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

Λειτουργικό σύστημα Unix

Βασικές εντολές του Unix-Linux

Η εντολή ln. σύνδεση με την πραγματική καταχωρημένη πληροφορία. περισσότερα ονόματα (συνδέσεις). Τα επιπλέον ονόματα δημιουργούνται με

2.1. Οι λογαριασµοί χρηστών Σύνδεση (login) και αποσύνδεση (logout)

Δίκτυα Η/Υ στην Επιχείρηση

Εργαστήριο 9: Αρχεία

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Μεθόδων Επίλυσης Προβλημάτων

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εισαγωγή στον Προγραμματισμό Εργαστήριο 3: Βοηθητικά προγράμματα του Linux CLI. Οκτώβριος 2014 Χ. Αλεξανδράκη Γ. Δημητρακάκης

3ο Εργαστήριο Βασικές εντολές διαχείρισης αρχείων σε LINUX

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Σύντομη εισαγωγή στο εργαστήριο

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Εντολές του Λειτουργικού Συστήματος UNIX

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

Λειτουργικά Συστήματα

Δικαιώματα Πρόσβασης στο Λειτουργικό Σύστημα UNIX. Χρήστες και Ομάδες στο Unix. Δικαιώματα στο Unix. Παράδειγμα Δένδρου Συστήματος Αρχείων

Εισαγωγή στο περιβάλλον προγραμματισμού του εργαστηρίου

Λειτουργικά Συστήματα - Εργαστήριο 6. 6ο Εργαστήριο. Συμπίεση αρχείων Χρήση ειδικών χαρακτήρων στην γραμμή εντολών. Χρήστες και Ομάδες Χρηστών

Εισαγωγή στο περιβάλλον προγραμματισμού του εργαστηρίου. Λειτουργικά Συστήματα Εργαστήριο Υπολογιστικών Συστημάτων ΕΜΠ

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Μερικές άλλες χρήσιμες εντολές

Λειτουργικά Συστήματα (Λ/Σ)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Προγραμματισμός Διαχείρισης Συστημάτων ΙΙ

Εργαστήριο Λειτουργικών Συστημάτων. Minix Overview

Open eclass Πλατφόρμα Ασύγχρονης Τηλεκπαίδευσης

Πλατφόρμα Ασύγχρονης Τηλεκπαίδευσης eclass 1.7. Οδηγίες Αναβάθμισης (Upgrade) Αθήνα, 16 Μαρτίου Εισαγωγή

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Λειτουργικό Σύστημα: διαχείριση πόρων. Τι είναι ένα αρχείο ; Διαχείριση αρχείων. Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

Linux με τη χρήση κονσόλας

Προγραμματισμός Ι. Εργαστήριο 1 ο Περιβάλλον Εργασίας. Νικόλαος Δ. Τσελίκας Κυριακή Θ. Σεκλού

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ I

Αρχιτεκτονικές Δικτύων & Πρωτόκολλα Ι

Εισαγωγή στην Πληροφορική

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Διάλεξη 18η: Διαχείρηση Αρχείων

% ls -l /usr/bin/wc -rwxr-xr-x 1 root bin 7368 Jul /usr/bin/wc

Λειτουργικά Συστήµατα

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

Λειτουργικά Συστήματα Κεφάλαιο 2 Οργάνωση Συστήματος Αρχείων 2.1 Διαχείριση Αρχείων και Σύστημα Αρχείων(File System)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ιαφάνειες παρουσίασης #6 (β)

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

S, (5, -3, 34, -23, 7) ( *, _

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές Σχολή Θετικών Επιστημών Τμ. Πληροφορικής. Διδάσκων: Ι. Η. Λαγαρής. Εισαγωγή

Αρχιτεκτονικές Δικτύων & Πρωτόκολλα Ι

Εισαγωγικό εργαστήριο C

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

Εισαγωγή στον Προγραμματισμό Μάθημα 1: Βασική Πλοήγηση σε Linux CLI. Οκτώβριος 2016 Χ. Αλεξανδράκη

ιαφάνειες παρουσίασης #12

Προγραμματισμός Διαχείρισης Συστημάτων ΙΙ

Μεταφραστής (Compiler)

Σύντομη εισαγωγή στο λειτουργικό σύστημα Linux

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

ΚΕΦΑΛΑΙΟ 2: Τύποι δεδομένων και εμφάνιση στοιχείων...33

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Προγραμματισμός συστημάτων UNIX/POSIX. Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes)

2ο Εργαστήριο. Εισαγωγική στο Λ.Σ. LINUX Γενικές εντολές συστήματος και χρηστών

Λειτουργικά Συστήματα (Λ/Σ)

Πανεπιςτήμιο Πελοποννήςου Τμήμα Επιςτήμησ και Τεχνολογίασ Τηλεπικοινωνιών. Λειτουργικά Συςτήματα Προγραμματιςμόσ Συςτήματοσ.

ΕΠΕΞΕΡΓΑΣΙΑ ΑΡΧΕΙΩΝ Λέµε αρχείο

Λειτουργικά Συστήματα (ΙΙ) (διαχείριση αρχείων)

Πλατφόρµα Ασύγχρονης Τηλεκπαίδευσης eclass 2.0. Οδηγίες Αναβάθµισης (Upgrade) Αθήνα, 1 Ιουνίου Εισαγωγή

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Διαδικασία Ανάπτυξης Λογισμικού

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ ΕΡΓΑΣΤΗΡΙΟ ΑΠΑΙΤΗΣΕΙΣ ΚΑΙ ΔΙΑΔΙΚΑΣΙΑ ΕΞΕΤΑΣΗΣ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ (TP-105)

Επεξεργασία Αρχείων Κειµένου

Δικαιώματα Πρόσβασης στο Λειτουργικό Σύστημα UNIX

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αρχεία

Μετατροπή χαρακτήρων ASCII σε αριθμό (atoi) & διάβασμα, και αποθήκευση του περιεχομένου του στη μνήμη. (Διάλεξη. Πανεπιστήμιο Κύπρου

Ενότητα 1 Διάλεξη 1β

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός συστημάτων UNIX/POSIX. Ανακατευθύνσεις (redirections)

Κεφάλαιο 10 Διαχείριση Αρχείων και Καταλόγων

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 12: Ροές και είσοδος/έξοδος αρχείων

Το Λειτουργικό Σύστημα MS-DOS

ΕΡΓΑΣΤΗΡΙΟ #1. Το Λειτουργικό Σύστηµα Unix

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Transcript:

Εισαγωγή Εργαστήριο 2 ΔΙΑΧΕΙΡΙΣΗ ΑΡΧΕΙΩΝ & ΚΑΤΑΛΟΓΩΝ ΣΤΟ UNIX Συνεχίζουμε την εργαστηριακή μελέτη των Λειτουργικών Συστημάτων εξετάζοντας τις δομές των αρχείων και καταλόγων και τη διαχείρισή τους στο Unix. 1 Το Λειτουργικό Σύστημα Unix 2 Διαχείριση Αρχείων & Καταλόγων στο Unix 3 Προγραμματισμός στο Φλοιό C 4 Διεργασίες - Διαχείριση 5 Διεργασίες - Εκτέλεση Εντολών 6 Διεργασίες Επικοινωνία με Σωληνώσεις/Διοχέτευση 7 Διαχείριση Νημάτων 8 Συγχρονισμός Διεργασιών & Νημάτων (mutexes) 9 Συγχρονισμός Διεργασιών & Νημάτων (conditions) 10 Συγχρονισμός Διεργασιών & Νημάτων (semaphores) 11 Χρονοπρογραμματισμός και Διαχείριση Μνήμης 12 Διαδιεργασιακή Επικοινωνία - IPC Κατάλογοι και αρχεία στο UNIX Το σύστημα αρχείων του Unix είναι οργανωμένο σε καταλόγους πολλών επιπέδων, ως τη λογική μορφή ενός ανεστραμμένου "δέντρου". Ο κατάλογος-ρίζα (root directory), που περιέχει αρχεία (files) και άλλους καταλόγους (subdirectories), έχει ως όνομα το σύμβολο '/' (slash), η οποία πλάγια κάθετος αποτελεί και το σύμβολο διαχωρισμού των υποκαταλόγων, π.χ. /usr/etc/ Ορισμένοι από τους βασικούς καταλόγους στο Unix έχουν ως εξής: - usr: περιέχει αρχεία και υποκαταλόγους των χρηστών, όπως είναι ο υποκατάλογος των βοηθητικών αρχείων του λειτουργικού man (manual pages). - bin: περιέχει εκτελέσιμα αρχεία, τα οποία στις περισσότερες περιπτώσεις αποτελούν τις εντολές του λειτουργικού συστήματος - tmp: προσωρινά αρχεία διαφόρων προγραμμάτων - root: ο κατάλογος του διαχειριστή (administrator) του συστήματος Unix - etc: διάφορα αρχεία ρύθμισης παραμέτρων του λειτουργικού συστήματος Τα ονόματα αρχείων και καταλόγων στο Unix ακολουθούν τους εξής κανόνες: ένα όνομα έχει μήκος μέχρι 14 χαρακτήρες, οι οποίοι μπορεί να είναι: i) τα γράμματα του λατινικού αλφάβητου a-z, A-Z, ii) οι αριθμοί 0-9, iii) οι ειδικοί χαρακτήρες: ".", "_", ",", "-", "+", κ.α.. Ένα όνομα δεν μπορεί να ξεκινά με "-" ή "+". Επίσης το Unix κάνει διάκριση στα μικρά από τα κεφαλαία γράμματα στα ονόματα. Ο κάθε χρήστης σε ένα σύστημα Unix αποκτά λογαριασμό και ένα προσωπικό κατάλογο (home directory) από το διαχειριστή του συστήματος, στον οποίο πρόσβαση έχει μόνο ο συγκεκριμένος χρήστης και στον οποίο εισέρχεται εξορισμού όταν ο χρήστης συνδέεται με το σύστημα δίνοντας όνομα χρήστη (username) και συνθηματικό (password). Δικαιώματα αρχείων Αν σε έναν κατάλογο πληκτρολογήσουμε την εντολή ls l, τότε η απάντηση θα είναι κάπως έτσι : drwxr-xr-x 2 root group1 512 Sep 25 14:00 OSLabs -rwxr-xr-- 1 george group1 320 Oct 10 14:15 test.........

Οι 10 πρώτοι χαρακτήρες κάθε γραμμής καθορίζουν τα δικαιώματα του αντίστοιχου αρχείου (οι κατάλογοι και οι συσκευές αντιμετωπίζονται από το Unix σαν αρχεία), ενώ ο πρώτος χαρακτήρας κάθε γραμμής χαρακτηρίζει το είδος του αρχείου. Κάθε κατάλογος ή αρχείο στο Unix έχει κάποιον ιδιοκτήτη είτε αυτός είναι ο χρήστης (user files) είτε το ίδιο το λειτουργικό σύστημα (system files). Οι χρήστες με την σειρά τους ανήκουν σε ομάδες (groups) στις οποίες καθορίζονται και πολλά από τα δικαιώματα πρόσβασης (access permissions) στα διάφορα αρχεία και τους καταλόγους του συστήματος. Βασικά για κάθε αρχείο ή κατάλογο τα δικαιώματα πρόσβασης (ανάγνωση, εγγραφή εκτέλεση) προσδιορίζονται ξεχωριστά για τον χρήστη-ιδιοκτήτη (user), από τα δικαιώματα των μελών της ομάδας στην οποία ανήκει (group), και τέλος από τα δικαιώματα όλων των υπολοίπων χρηστών (others). ΕΠΙΠΕΔΑ ΔΙΚΑΙΩΜΑΤΩΝ ΠΡΟΣΒΑΣΗΣ Files Dirs Χρήστης-ιδιοκτήτης (user-owner) Μέλη-ομάδας (group-members) Άλλοι χρήστες (other users) Έτσι λοιπόν για λόγους ασφαλείας αλλά και προστασίας του απορρήτου των δεδομένων για κάθε αρχείο ή κατάλογο καθορίζονται τα δικαιώματα πρόσβασης τόσο για τον χρήστη-ιδιοκτήτη (user-owner), και τα μέλη της ομάδας (group-members), όσο και για τους υπόλοιπους χρήστες (other users) του συστήματος. Τα δικαιώματα πρόσβασης σε ένα αρχείο ή κατάλογο (με διαφορετική σημασία για το καθένα), δίνονται από τον παρακάτω πίνακα: ΔΙΚΑΙΩΜΑΤΑ ΑΝΑΓΝΩΣΗ (read) ΕΓΓΡΑΦΗ (write) ΕΚΤΕΛΕΣΗ (execute) ΑΡΧΕΙΟ Ανάγνωση των Αλλαγή των Εκτέλεση αρχείου περιεχομένων ΚΑΤΑΛΟΓΟΣ Ανάγνωση των περιεχομένων περιεχομένων Αλλαγή, δημιουργία, διαγραφή,μετονομασία προγράμματος Αναζήτηση αρχείου στον κατάλογο Από τα παραπάνω παρατηρούμε ότι γενικά έχουμε τρεις κατηγορίες χρηστών (User, Group, Other) και τρεις τύπους δικαιωμάτων πρόσβασης (Read, Write, Execute). Κατά την καταχώρηση από το λειτουργικό σύστημα των πληροφοριών που αφορούν ένα αρχείο ή κατάλογο, καταγράφονται σε μερικά bytes και οι παραπάνω πληροφορίες πρόσβασης ξεχωριστά (σε μεμονωμένα bit) για κάθε κατηγορία χρηστών. Συγκεκριμένα κάθε δικαίωμα παριστάνεται με ένα bit το οποίο μπορεί να έχει την τιμή 1 όταν η αντίστοιχη κατηγορία χρηστών έχει το σχετικό δικαίωμα και 0 εάν δεν το έχει. Στο παρακάτω σχήμα δίνονται τα 9 bits που προσδιορίζουν τα δικαιώματα σε ένα αρχείο. R W X R W X R W X π.χ.: 1 1 1 1 0 1 0 0 1 User Group Other Σημειώσεις του μαθήματος Λειτουργικά Συστήματα 2

Τα τρία πρώτα bits από αριστερά καθορίζουν τα δικαιώματα πρόσβασης του χρήστηιδιοκτήτη, τα οποία στο παράδειγμα έχουν όλα την τιμή 1, δηλαδή ο ιδιοκτήτης του αρχείου έχει δικαίωμα ανάγνωσης, εγγραφής και εκτέλεσης στο αρχείο. Τα τρία επόμενα bits προσδιορίζουν τα δικαιώματα των χρηστών της ομάδας (οι οποίοι μπορούν να διαβάσουν το αρχείο και να το εκτελέσουν όχι όμως και να το γράψουν) στην οποία ανήκει ο χρήστης-ιδιοκτήτης, και τέλος τα δικαιώματα όλων των υπολοίπων χρηστών προσδιορίζονται από τα τρία τελευταία bits, σύμφωνα με τα οποία όλοι οι άλλοι χρήστες έχουν μόνο δικαίωμα εκτέλεσης. Πολλές φορές οι παραπάνω δυαδικοί συνδυασμοί για κάθε ομάδα χρηστών αναπαριστώνται για απλότητα και από το αντίστοιχο δεκαδικό ψηφίο. Για παράδειγμα, με βάση τα παραπάνω, έχουμε τα δικαιώματα: 111-101-001 τα οποία αντιστοιχούν στο 7-5-1 (αφού το 111 στο δυαδικό σύστημα ισοδυναμεί με τον αριθμό 7 στο δεκαδικό, κλπ.). Επίσης μερικές φορές αντικαθιστούμε τα 9 bits με τα αντίστοιχα γράμματα w, r και x. Για παράδειγμα, με βάση τα παραπάνω, έχουμε τα δικαιώματα: 111-101-001 τα οποία αντιστοιχούν στον συνδυασμό: rwxr-x--x. Η συμβολοσειρά αυτή εκφράζει πολύ κατανοητά τα δικαιώματα πρόσβασης στο αρχείο (εάν είναι 0 βάζουμε παύλα). Πέρα από τους παραπάνω χαρακτήρες (r, w, x) είναι δυνατόν σε μια συμβολοσειρά στοιχείων της παραπάνω μορφής (π.χ. drwxr-xr-x) να έχουμε στην αρχή, ως πρώτο χαρακτήρα, ένα από τους χαρακτήρες d (directory) ή l (link) αντίστοιχα για ονόματα καταλόγων και συμβολικών συνδέσμων, ή και τους χαρακτήρες b (block) για συσκευή η οποία υποστηρίζει είσοδο/έξοδο σε επίπεδο μπλοκ, και c (characters) για συσκευή η οποία υποστηρίζει είσοδο/έξοδο σε επίπεδο χαρακτήρων. Όλες τις παραπάνω πληροφορίες σχετικά με τα δικαιώματα πρόσβασης σε ένα αρχείο ή κατάλογο θα μπορούσαμε να τις δούμε χρησιμοποιώντας την εντολή ls (ls -l), και να αλλάξουμε τα δικαιώματα αυτά χρησιμοποιώντας την εντολή chmod. Η εντολή chmod μπορεί να χρησιμοποιηθεί με δύο τρόπους. Ένας πρακτικός τρόπος είναι με χρήση οκταδικής αρίθμησης, όπου: το δικαίωμα x (εκτέλεση) αντιστοιχεί στο 1 >> >> w (εγγραφή) αντιστοιχεί στο 2 >> >> r (ανάγνωση) αντιστοιχεί στο 4 και το άθροισμα αυτών των αριθμών αντιστοιχεί και στο άθροισμα των δικαιωμάτων για κάθε ομάδα χρηστών. Π.χ., το 3 αντιστοιχεί στο δικαίωμα εγγραφής και εκτέλεσης ενώ το 6 στο δικαίωμα εγγραφής και ανάγνωσης. Ένας άλλος τρόπος να χρησιμοποιηθεί η εντολή chmod είναι με συμβολική περιγραφή, η οποία περιλαμβάνει τρία πεδία: - το πρώτο πεδίο αναφέρεται στους χρήστες: u (user) ο χρήστης, g (group) η ομάδα, o (others) οι υπόλοιποι. - το δεύτερο πεδίο είναι μια πράξη είτε με το σύμβολο + (προσθέτει δικαιώματα), είτε το (αφαιρεί δικαιώματα). - το τρίτο πεδίο αναφέρεται στα δικαιώματα: w (write) γραφή, r (read) ανάγνωση, x (execute) εκτέλεση Π.χ.: $ chmod g+x test, με το οποίο παραχωρείτε το δικαίωμα εκτέλεσης του test στα μέλη της ομάδας. Σημειώσεις του μαθήματος Λειτουργικά Συστήματα 3

Εντολές διαχείρισης καταλόγων και αρχείων στο Unix Μερικές από τις βασικές εντολές διαχείρισης των καταλόγων στο Unix δίνονται παρακάτω: pwd: εμφανίζει την τρέχουσα διαδρομή καταλόγου ls [path/options] dir_names: εμφανίζει τα περιεχόμενα καταλόγων mkdir [path/options] dir_name:δημιουργία καταλόγου rmdir [path/options] dir_name: διαγραφή καταλόγου cd [path/options] dir_name: αλλαγή καταλόγου ΠΑΡΑΔΕΙΓΜΑΤΑ pwd cd home ls ls -l mkdir new cd new ls cd.. rmdir new Μερικές από τις βασικές εντολές διαχείρισης των αρχείων στο Unix δίνονται παρακάτω: ed [filename]: ξεκινά τον κειμενογράφο ed (editor) για την δημιουργία αρχείου vi [filename]: ξεκινά τον κειμενογράφο vi (editor) για την δημιουργία αρχείου emacs [options] [filename]: ξεκινά τον emacs επεξεργαστή κειμένου latex [options] [filename]: ξεκινά τον tex επεξεργαστή κειμένου touch [filename]: δημιουργία αρχείου rm [options] filename: διαγραφή αρχείου mv[sourcepath/sourcename][targetpath/targetname]:μετονομασία/μετακίνηση αρχείου/καταλόγου cat [filename]: εμφάνιση των περιεχομένων αρχείου στην οθόνη more [filename]: εμφανίζει τα περιεχόμενα αρχείου στην οθόνη σελίδα-σελίδα. lp [filename]: εκτυπώνει τα περιεχόμενα αρχείου cp [sourcepath/sourcefilename] [targetpath/targetfilename]: αντιγράφει αρχεία chmod [options] mode files: αλλάζει τα δικαιώματα αρχείων chown [options] mode files: αλλάζει την κυριότητα αρχείων finger [username]: εμφανίζει πληροφορίες για συγκεκριμένο χρήστη ΠΑΡΑΔΕΙΓΜΑΤΑ cd home ls -l cp oldfile /newdir/filenew mv oldfile fileold Σημειώσεις του μαθήματος Λειτουργικά Συστήματα 4

rm newfile chmod 644 fileold chmod +x fileold Διαχείριση αρχείων και καταλόγων με κλήσεις συστήματος (C προγραμματισμός) Εδώ παρουσιάζονται απλώς μερικές βασικές έννοιες και παραδείγματα σχετικά με τη διαχείριση αρχείων και καταλόγων μέσα από προγράμματα στη γλώσσα προγραμματισμού C (με συναρτήσεις διαχείρισης αρχείων από τις βιβλιοθήκες της C, οι οποίες αποτελούν και κλήσεις του λειτουργικού συστήματος Unix/Linux), διότι ο αναγνώστης θα πρέπει να γνωρίζει αρκετά καλά την γλώσσα αυτή και τις διαδικασίες προγραμματισμού από τα αντίστοιχα μαθήματα προγραμματισμού. Σε κάθε περίπτωση προτείνεται στον αναγνώστη να κάνει μια μικρή επανάληψη της παραπάνω γλώσσας προγραμματισμού (και ιδιαίτερα το κεφάλαιο διαχείρισης αρχείων, η οποία θα μας φανεί ιδιαίτερα χρήσιμη και στην παρακάτω εργαστηριακή μας μελέτη των λειτουργικών συστημάτων (καθώς, όπως προαναφέραμε, το ίδιο το λειτουργικό σύστημα Unix έχει γραφτεί στη γλώσσα C). Βέβαια ο αναγνώστης μπορεί να χρησιμοποιήσει και κάποια άλλη γλώσσα προγραμματισμού, που ίσως γνωρίζει καλύτερα, π.χ. Java. Καταρχήν να αναφέρουμε ότι και σε περιβάλλοντα Unix/Linux έχουν αναπτυχθεί διάφοροι μεταγλωττιστές της γλώσσας C (C compilers), όπως είναι π.χ. ο cc, gcc, κ.α. Μια απλή διαδικασία μεταγλώττισης και δημιουργία του εκτελέσιμου ενός προγράμματος, π.χ. με όνομα name.c με τον gcc έχει ως εξής: gcc -o name name.c ή gcc name.c -o name Θα μπορούσαμε μάλιστα να κάνουμε την παραπάνω μεταγλώττιση και δημιουργία του εκτελέσιμου σε δύο στάδια ως εξής: gcc -c name.c -για τη μετάφραση του προγράμματος και δημιουργία του name.o gcc name.o name -για τη δημιουργία του εκτελέσιμου αρχείου name Αρκετές λεπτομέρειες και παραδείγματα σύνταξης σχετικά με τον παραπάνω μεταγλωττιστή μπορείτε να δείτε με την εντολή: man gcc. Μια σύνοψη των κλήσεων για τη διαχείριση αρχείων (system calls for file management) δίνεται στον πίνακα που ακολουθεί: Σημειώσεις του μαθήματος Λειτουργικά Συστήματα 5

Μια σύνοψη των κλήσεων για τη διαχείριση καταλόγων (system calls for directory management) δίνεται στον πίνακα που ακολουθεί: ΠΑΡΑΔΕΙΓΜΑ 1 Στο παράδειγμα αυτό γίνεται μια ενδεικτική παρουσίαση τόσο της χρήσης παραμέτρων από τη γραμμή εντολών, όσο και των κλήσεων του συστήματος διαχείρισης αρχείων για την αντιγραφή των περιεχομένων ενός αρχείου σε ένα άλλο. #include <stdio.h> #define SIZE 100 main(int argc, char*argv[]) int fd1, fd2, n; char buff[size]; if (argc!=3) printf( Λάθος αριθμός παραμέτρων\n ); exit(1); fd1=open(argv[1],0); /* Άνοιγμα του αρχείου argv[1] για ανάγνωση (0-read) */ if (fd1==-1) printf( Σφάλμα ανοίγματος αρχείου %s\n,argv[1]); exit(1); /* Εάν υπάρχει σφάλμα στο άνοιγμα του αρχείου quit */ if ((fd2=open(argv[2],1))==-1) /* Άνοιγμα του αρχείου για εγγραφή (1-write)*/ fd2=creat(argv[2],1); /* Εάν το αρχείο argv[2] δεν υπάρχει τότε δημιουργείται ένα νέο */ while((n=read(fd1,buff,size)) > 0) /*Διαβάζει τα περιεχόμενα έως ότου δεν υπάρχουν άλλοι χαρακτήρες (bytes)*/ write(fd2,buff,n) ; /* Γράφει στο άλλο αρχείο */ Σημειώσεις του μαθήματος Λειτουργικά Συστήματα 6

close(fd1); close(fd2); Μεταγλώττιση και εκτέλεση του προγράμματος (π.χ. test.c) από τη γραμμή εντολών: Μεταγλώττιση: (gcc test.c ο test) Εκτέλεση: test file1 file2 ΠΑΡΑΔΕΙΓΜΑ 2 Υλοποίηση του προηγούμενου παραδείγματος αντιγραφής των περιεχομένων ενός αρχείου σε ένα άλλο σε Java. import java.io.*; public class FileCopy extends Object public static void main(string args[]) FileInputStream in_fd = null; FileOutputStream out_fd = null; final int BUFFERSIZE = 4096; int rd_count = 0; // Ο αριθμός των δεδομένων που διαβάστηκαν byte buffer[] = new byte[buffersize]; // Χρήση ενός buffer μεγέθους 4096 if (args.length!= 2) System.exit(1); // Αναμένει δύο παραμέτρους try in_fd = new FileInputStream(args[0]); // Άνοιγμα του πηγαίου αρχείου catch(filenotfoundexception ex) System.exit(2); // Δεν μπόρεσε να ανοίξει το αρχείο try out_fd = new FileOutputStream(args[1]); // Άνοιγμα του αρχείου προορισμού catch(filenotfoundexception ex) System.exit(3); // Δεν μπόρεσε να ανοίξει το αρχείο while(true) try rd_count = in_fd.read(buffer); catch(ioexception ex) System.exit(5); // Ανάγνωση μπλοκ δεδομένων // Αποτυχία ανάγνωσης αρχείου if(rd_count <=0) break; // Εάν τέλος αρχείου, τότε έξοδος από το loop try out_fd.write(buffer,0,rd_count); // Εγγραφή δεδομένων catch(ioexception ex) System.exit(4); // Αποτυχία εγγραφής αρχείου Σημειώσεις του μαθήματος Λειτουργικά Συστήματα 7

// Κλείσιμο των αρχείων try in_fd.close(); out_fd.close(); catch(ioexception ex) System.exit(6); System.exit(0); // Αποτυχία κλεισίματος αρχείου ΠΑΡΑΔΕΙΓΜΑ 3 Στο παράδειγμα γίνεται μια ενδεικτική παρουσίαση των βασικών κλήσεων για τη διαχείριση καταλόγων (π.χ. opendir(), chdir(),readdir(), κ.α... /* άνοιγμα καταλόγου */ if ((dir = opendir(parent_dir_name)) == NULL) printf("error : Ο κατάλογος δεν ανοίγει %s\n", parent_dir_name); exit(1); /* αλλαγή καταλόγου */ if ((chdir(parent_dir_name)) == -1) printf("error : Δεν μπορώ να αλλάξω σε κατάλογο %s\n", parent_dir_name); exit(1); /* Ανάγνωση/πέρασμα (parse) καταλόγου */ while ((d = readdir(dir))!= NULL) εντολές για τη διαχείριση των περιεχομένων του καταλόγου.. Σημειώσεις του μαθήματος Λειτουργικά Συστήματα 8

Εργαστήριο 2: Ασκήσεις Οι εργαστηριακές ασκήσεις που ακολουθούν αφορούν προβλήματα διαχείρισης αρχείων και καταλόγων στο λειτουργικό σύστημα Unix, τις οποίες ο σπουδαστής μπορεί να επιλύσει ακολουθώντας τα βήματα στα παραδείγματα που δόθηκαν σε αυτό το εργαστήριο. 2.1 Να μελετήσετε με την εντολή man τη σύνταξη και τα παραδείγματα ορισμένων εκ των βασικών εντολών διαχείρισης αρχείων και καταλόγων που αναφέρθηκαν. 2.2 Να δημιουργήσετε ένα κατάλογο με το όνομα exercises στον υποκατάλογο OSLabs του προσωπικού σας καταλόγου (home directory) και να αλλάξετε τα δικαιώματα πρόσβασης σε αυτόν έτσι ώστε να έχετε πρόσβαση αποκλειστικά και μόνο εσείς ως χρήστης. 2.3 Να γραφεί πρόγραμμα στη C με το όνομα myls, το οποίο υλοποιεί τη λειτουργικότητα της εντολής ls. 2.4 Να γραφεί πρόγραμμα στη C με το όνομα mycp, το οποίο υλοποιεί τη λειτουργικότητα της εντολής cp. 2.5 Να γραφεί πρόγραμμα στη C με το όνομα mymv, το οποίο υλοποιεί τη λειτουργικότητα της εντολής mv. Σημειώσεις του μαθήματος Λειτουργικά Συστήματα 9