4.3 Μάθημα 1
Πιστοποιητικό: |
Linux Essentials |
---|---|
Έκδοση: |
1.6 |
Θέμα: |
4 Το Λειτουργικό Σύστημα Linux |
Σκοπός: |
4.3 Πού Αποθηκεύονται τα Δεδομένα |
Μάθημα: |
1 απο 2 |
Εισαγωγή
Για ένα λειτουργικό σύστημα όλα θεωρούνται δεδομένα. Για το Linux, όλα θεωρούνται αρχείο: προγράμματα, κανονικά αρχεία, κατάλογοι, συσκευές block (σκληροί δίσκοι κ.λ.π.), συσκευές χαρακτήρων (κονσόλες κ.λ.π.), processes πυρήνα, sockets, partitions, σύνδεσμοι κ.λ.π. Η δομή καταλόγου Linux , ξεκινώντας από το root /
, είναι μια συλλογή αρχείων που περιέχει δεδομένα. Το γεγονός ότι τα πάντα είναι ένα αρχείο είναι ένα ισχυρό χαρακτηριστικό του Linux καθώς επιτρέπει τις μικροδιορθώσεις σχεδόν σε κάθε μεμονωμένη πτυχή του συστήματος.
Σε αυτό το μάθημα θα συζητήσουμε τις διαφορετικές τοποθεσίες στις οποίες αποθηκεύονται σημαντικά δεδομένα όπως καθορίζεται από το Linux Filesystem Hierarchy Standard (FHS). Μερικές από αυτές τις τοποθεσίες είναι πραγματικοί κατάλογοι που αποθηκεύουν δεδομένα μόνιμα σε δίσκους, ενώ άλλες είναι ψευδοσυστήματα αρχείων φορτωμένα στη μνήμη που μας δίνουν πρόσβαση σε δεδομένα του υποσυστήματος του πυρήνα, όπως εκτελούμενα processes, χρήση μνήμης, διαμόρφωση υλικού και ούτω καθεξής. Τα δεδομένα που αποθηκεύονται σε αυτούς τους εικονικούς καταλόγους χρησιμοποιούνται από έναν αριθμό εντολών που μας επιτρέπουν να τα παρακολουθούμε και να τα χειριζόμαστε.
Προγράμματα και η Παραμετροποίησή τους
Σημαντικά δεδομένα σε ένα σύστημα Linux είναι — αναμφίβολα — τα προγράμματά του και τα αρχεία παραμετροποίησής τους. Τα πρώτα είναι εκτελέσιμα αρχεία που περιέχουν σύνολα εντολών που πρέπει να εκτελεστούν από τον επεξεργαστή του υπολογιστή, ενώ τα δεύτερα είναι συνήθως έγγραφα κειμένου που ελέγχουν τη λειτουργία ενός προγράμματος. Τα εκτελέσιμα αρχεία μπορεί να είναι είτε δυαδικά είτε αρχεία κειμένου. Τα εκτελέσιμα αρχεία κειμένου ονομάζονται scripts. Τα δεδομένα παραμετροποίησης στο Linux αποθηκεύονται παραδοσιακά και σε αρχεία κειμένου, αν και υπάρχουν διάφοροι τρόποι αναπαράστασης δεδομένων παραμετροποίησης.
Πού Αποθηκεύονται τα Δυαδικά Αρχεία
Όπως κάθε άλλο αρχείο, τα εκτελέσιμα αρχεία ζουν σε καταλόγους που κρέμονται τελικά από το /
. Πιο συγκεκριμένα, τα προγράμματα κατανέμονται σε μια δομή τριών επιπέδων: το πρώτο επίπεδο (/
) περιλαμβάνει προγράμματα που μπορεί να είναι απαραίτητα σε λειτουργία ενός χρήστη [single-user mode], το δεύτερο επίπεδο (/usr
) περιέχει τα περισσότερα προγράμματα πολλών χρηστών [multi-user] και το τρίτο επίπεδο (/usr/local
) χρησιμοποιείται για την αποθήκευση λογισμικού που δεν παρέχεται από τη διανομή και έχει γίνει compiled τοπικά.
Οι τυπικές τοποθεσίες για προγράμματα περιλαμβάνουν:
/sbin
-
Περιέχει ουσιώδη δυαδικά αρχεία για τη διαχείριση συστήματος όπως
parted
ήip
. /bin
-
Περιέχει ουσιώδη δυαδικά αρχεία για όλους τους χρήστες όπως
ls
,mv
ήmkdir
. /usr/sbin
-
Αποθηκεύει δυαδικά αρχεία για διαχείριση συστήματος όπως
deluser
ήgroupadd
. /usr/bin
-
Περιλαμβάνει τα περισσότερα εκτελέσιμα αρχεία — όπως
free
,pstree
,sudo
ήman
- που μπορούν να χρησιμοποιηθούν από όλους τους χρήστες. /usr/local/sbin
-
Χρησιμοποιείται για την αποθήκευση τοπικά εγκατεστημένων προγραμμάτων για διαχείριση συστήματος που δεν διαχειρίζονται απο τον package manager του συστήματος.
/usr/local/bin
-
Εξυπηρετεί τον ίδιο σκοπό με το
/usr/local/sbin
αλλά για προγράμματα για τον τακτικό χρήστη.
Πρόσφατα ορισμένες διανομές άρχισαν να αντικαθιστούν τα /bin
και /sbin
με symbolic links προς /usr/bin
και /usr/sbin
αντίστοιχα.
Note
|
Ο κατάλογος |
Εκτός από αυτούς τους καταλόγους, οι τακτικοί χρήστες μπορούν να έχουν τα δικά τους προγράμματα σε:
-
/home/$USER/bin
-
/home/$USER/.local/bin
Tip
|
Μπορείτε να μάθετε από ποιους καταλόγους μπορείτε να εκτελέσετε δυαδικά αρχεία, αναφέροντας τη μεταβλητή |
Μπορούμε να βρούμε την τοποθεσία των προγραμμάτων με την εντολή which
:
$ which git /usr/bin/git
Πού Αποθηκεύονται τα Αρχεία Παραμετροποίησης
Ο Κατάλογος /etc
Στις πρώτες μέρες του Unix υπήρχε ένας φάκελος για κάθε τύπο δεδομένων, όπως /bin
για δυαδικά αρχεία και /boot
για τον πυρήνα(ες). Ωστόσο, το /etc
(που σημαίνει et cetera) δημιουργήθηκε ως κατάλογος παντός σκοπού για την αποθήκευση τυχόν αρχείων που δεν ανήκουν στις άλλες κατηγορίες. Τα περισσότερα από αυτά τα αρχεία ήταν αρχεία παραμετροποίησης. Με την πάροδο του χρόνου όλο και περισσότερα αρχεία παραμετροποίησης προστέθηκαν έτσι το /etc
έγινε ο κύριος φάκελος για τα αρχεία παραμετροποίησης των προγραμμάτων. Όπως αναφέρθηκε παραπάνω, ένα αρχείο παραμετροποίησης είναι συνήθως ένα τοπικό, απλού κειμένου (σε αντίθεση με το δυαδικό) αρχείο που ελέγχει τη λειτουργία ενός προγράμματος.
Στο /etc
μπορούμε να βρούμε διαφορετικά μοτίβα για ονόματα αρχείων παραμετροποίησης:
-
Αρχεία με μια ad hoc επέκταση ή χωρίς καθόλου επέκταση, για παράδειγμα
group
-
Βάση δεδομένων ομάδας συστήματος.
hostname
-
Όνομα του host υπολογιστή.
hosts
-
Λίστα διευθύνσεων IP και οι μεταφράσεις των ονομάτων των host τους.
passwd
-
Βάση δεδομένων χρηστών συστήματος — αποτελείται από επτά πεδία που χωρίζονται με άνω και κάτω τελείες που παρέχουν πληροφορίες για τον χρήστη.
profile
-
Αρχείο παραμετροποίησης του Bash για όλο το σύστημα.
shadow
-
Κρυπτογραφημένο αρχείο για κωδικούς πρόσβασης χρήστη.
-
Αρχεία αρχικοποίησης που τελειώνουν σε
rc
:bash.bashrc
-
Αρχείο παραμετροποίησης
.bashrc
για διαδραστικά bash shells σε όλο το σύστημα. nanorc
-
Δείγμα αρχείου αρχικοποίησης για το GNU nano (ένας απλός επεξεργαστής κειμένου που συνήθως αποστέλλεται με οποιαδήποτε διανομή).
-
Αρχεία που τελειώνουν σε
.conf
:resolv.conf
-
Αρχείο παραμετροποίησης για το πρόγραμμα μετάφρασης ονομάτων [resolver] — το οποίο παρέχει πρόσβαση στο Internet Domain Name System (DNS).
sysctl.conf
-
Αρχείο παραμετροποίησης για να ορίσετε μεταβλητές συστήματος για τον πυρήνα.
-
Κατάλογοι με το suffix
.d
:Ορισμένα προγράμματα με μοναδικό αρχείο παραμετροποίησης (
*.conf
ή άλλο) έχουν εξελιχθεί ώστε να έχουν έναν αποκλειστικό κατάλογο*.d
που βοηθά στη δημιουργία αρθρωτών, πιο ισχυρών παραμετροποιήσεων. Για παράδειγμα, για να παραμετροποίησετε το logrotate, θα βρείτε τοlogrotate.conf
, αλλά και τους καταλόγουςlogrotate.d
.Αυτή η προσέγγιση είναι χρήσιμη σε εκείνες τις περιπτώσεις όπου διαφορετικές εφαρμογές χρειάζονται παραμετροποιήσεις για το ίδιο συγκεκριμένο service. Εάν, για παράδειγμα, ένα πακέτο web server περιέχει μια παραμετροποίηση logrotate, αυτή η ρύθμιση παραμέτρων μπορεί τώρα να τοποθετηθεί σε ένα αποκλειστικό αρχείο στον κατάλογο
logrotate.d
. Αυτό το αρχείο μπορεί να ενημερωθεί από το πακέτο του web server χωρίς να παρεμβαίνει στην υπόλοιπη παραμετροποίηση του logrotate. Ομοίως, τα πακέτα μπορούν να προσθέσουν συγκεκριμένες εργασίες τοποθετώντας αρχεία στον κατάλογο/etc/cron.d
αντί να τροποποιήσουν το/etc/crontab
.Στο Debian — και στα παράγωγα Debian — μια τέτοια προσέγγιση έχει εφαρμοστεί στη λίστα αξιόπιστων πηγών που διαβάζονται από το εργαλείο διαχείρισης πακέτων
apt
: εκτός από το κλασικό/etc/apt/sources.list
, τώρα βρίσκουμε τον κατάλογο/etc/apt/sources.list.d
:$ ls /etc/apt/sources* /etc/apt/sources.list /etc/apt/sources.list.d:
Αρχεία Διαμόρφωσης στο HOME
(Dotfiles)
Σε επίπεδο χρήστη, τα προγράμματα αποθηκεύουν τις διαμορφώσεις και τις ρυθμίσεις τους σε κρυφά αρχεία στον κατάλογο αφετηρίας του χρήστη (αντιπροσωπεύεται με ~
). Θυμηθείτε, τα κρυφά αρχεία ξεκινούν με μια τελεία (.
) — εξ' ου και το όνομά τους: dotfiles.
Μερικά από αυτά τα dotfiles είναι Bash scripts που προσαρμόζουν το session λειτουργίας του shell του χρήστη και καλούνται αμέσως μόλις ο χρήστης συνδεθεί στο σύστημα:
.bash_history
-
Αποθηκεύει το ιστορικό της γραμμής εντολών.
.bash_logout
-
Περιλαμβάνει εντολές για εκτέλεση κατά την έξοδο από το shell σύνδεσης.
.bashrc
-
Το script αρχικοποίησης του Bash για διαδραστικά shells.
.profile
-
Το script αρχικοποίησης του Bash για shells σύνδεσης.
Note
|
Ανατρέξτε στο μάθημα “Βασικά Στοιχεία Γραμμής Εντολών” για να μάθετε περισσότερα σχετικά με το Bash και τα αρχεία εκκίνησης του. |
Τα αρχεία παραμετροποίησης άλλων προγραμμάτων για συγκεκριμένους χρήστες καλούνται κατά την εκκίνηση των αντίστοιχων προγραμμάτων τους: .gitconfig
, .emacs.d
, .ssh
, κ.λ.π.
Ο Πυρήνας του Linux
Πριν εκτελεστεί οποιαδήποτε process, ο πυρήνας πρέπει να φορτωθεί σε μια προστατευμένη περιοχή της μνήμης. Μετά από αυτό, το process με το PID 1
(τις περισσότερες φορές του systemd
στις μέρες μας) ξεκινά την αλυσίδα των processes, δηλαδή ένα process ξεκινάει άλλες και ούτω καθεξής. Μόλις τα processes είναι ενεργά, ο πυρήνας του Linux είναι υπεύθυνος για την κατανομή πόρων σε αυτά (πληκτρολόγιο, ποντίκι, δίσκοι, μνήμη, διεπαφές δικτύου, κ.λ.π.).
Note
|
Πριν από το |
Πού Αποθηκεύονται οι Πυρήνες: /boot
Ο πυρήνας βρίσκεται στο /boot
— μαζί με άλλα αρχεία που σχετίζονται με την εκκίνηση. Τα περισσότερα από αυτά τα αρχεία περιλαμβάνουν τα στοιχεία του αριθμού έκδοσης του πυρήνα στα ονόματά τους (έκδοση πυρήνα, κύρια αναθεώρηση, δευτερεύουσα αναθεώρηση και αριθμός ενημέρωσης κώδικα).
Ο κατάλογος /boot
περιλαμβάνει τους ακόλουθους τύπους αρχείων, με ονόματα που αντιστοιχούν στην αντίστοιχη έκδοση του πυρήνα:
config-4.9.0-9-amd64
-
Ρυθμίσεις διαμόρφωσης για τον πυρήνα, όπως επιλογές και modules που έχουν γίνει compiled μαζί με τον πυρήνα.
initrd.img-4.9.0-9-amd64
-
Αρχική image δίσκου RAM που βοηθά στη διαδικασία εκκίνησης φορτώνοντας ένα προσωρινό root σύστημα αρχείων στη μνήμη.
System-map-4.9.0-9-amd64
-
Το αρχείο
System-map
(σε ορισμένα συστήματα θα ονομάζεταιSystem.map
) περιέχει θέσεις διευθύνσεων μνήμης για ονόματα συμβόλων του πυρήνα. Κάθε φορά που ξαναχτίζεται ένας πυρήνας, τα περιεχόμενα του αρχείου θα αλλάζουν καθώς οι θέσεις της μνήμης μπορεί να είναι διαφορετικές. Ο πυρήνας χρησιμοποιεί αυτό το αρχείο για να αναζητήσει θέσεις διευθύνσεων μνήμης για ένα συγκεκριμένο σύμβολο πυρήνα ή το αντίστροφο. vmlinuz-4.9.0-9-amd64
-
Ο πυρήνας σε μια κατάλληλη αυτο-αποσυμπιεζόμενη, εξοικονόμησης χώρου, συμπιεσμένη μορφή (εξ ου και το
z
στοvmlinuz
· τοvm
σημαίνει εικονική μνήμη και άρχισε να χρησιμοποιείται όταν ο πυρήνας έλαβε για πρώτη φορά υποστήριξη για εικονική μνήμη). grub
-
Κατάλογος διαμόρφωσης για τον φορτωτή εκκίνησης
grub2
.
Tip
|
Επειδή είναι ένα κρίσιμο χαρακτηριστικό του λειτουργικού συστήματος, περισσότεροι από ένας πυρήνας και τα σχετικά αρχεία διατηρούνται στο |
Ο Kατάλογος /proc
Ο κατάλογος /proc
είναι ένα από τα λεγόμενα εικονικά ή ψευδοσύστηματα αρχείων αφού τα περιεχόμενά του δεν γράφονται στο δίσκο, αλλά φορτώνονται στη μνήμη. Συμπληρώνεται δυναμικά κάθε φορά που εκκινείται ο υπολογιστής και αντανακλά συνεχώς την τρέχουσα κατάσταση του συστήματος. Το /proc
περιλαμβάνει πληροφορίες σχετικά με:
-
Εκτελούμενα processes
-
Παραμετροποίηση πυρήνα
-
Υλικό συστήματος
Εκτός από όλα τα δεδομένα σχετικά με τα processes που θα δούμε στο επόμενο μάθημα, αυτός ο κατάλογος αποθηκεύει επίσης αρχεία με πληροφορίες σχετικά με το υλικό του συστήματος και τις ρυθμίσεις παραμέτρων του πυρήνα. Μερικά από αυτά τα αρχεία περιλαμβάνουν:
/proc/cpuinfo
-
Αποθηκεύει πληροφορίες σχετικά με την CPU του συστήματος:
$ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 158 model name : Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz stepping : 10 cpu MHz : 3696.000 cache size : 12288 KB (...)
/proc/cmdline
-
Αποθηκεύει τις συμβολοσειρές που έχουν διαβιβαστεί στον πυρήνα κατά την εκκίνηση:
$ cat /proc/cmdline BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet
/proc/modules
-
Εμφανίζει τη λίστα των modules που έχουν φορτωθεί στον πυρήνα:
$ cat /proc/modules nls_utf8 16384 1 - Live 0xffffffffc0644000 isofs 40960 1 - Live 0xffffffffc0635000 udf 90112 0 - Live 0xffffffffc061e000 crc_itu_t 16384 1 udf, Live 0xffffffffc04be000 fuse 98304 3 - Live 0xffffffffc0605000 vboxsf 45056 0 - Live 0xffffffffc05f9000 (O) joydev 20480 0 - Live 0xffffffffc056e000 vboxguest 327680 5 vboxsf, Live 0xffffffffc05a8000 (O) hid_generic 16384 0 - Live 0xffffffffc0569000 (...)
Ο Kατάλογος /proc/sys
Αυτός ο κατάλογος περιλαμβάνει ρυθμίσεις διαμόρφωσης των παραμέτρων του πυρήνα σε αρχεία ταξινομημένα σε κατηγορίες ανά υποκατάλογο:
$ ls /proc/sys abi debug dev fs kernel net user vm
Τα περισσότερα από αυτά τα αρχεία λειτουργούν σαν διακόπτης και — επομένως — περιέχουν μόνο μία από τις δύο πιθανές τιμές: 0
ή 1
(“on” ή “off”). Για παράδειγμα:
/proc/sys/net/ipv4/ip_forward
-
Η τιμή του ενεργοποιεί ή απενεργοποιεί την δυνατότητα το μηχάνημά μας να λειτουργεί ως router (να μπορεί να προωθήσει πακέτα):
$ cat /proc/sys/net/ipv4/ip_forward 0
Υπάρχουν όμως κάποιες εξαιρέσεις:
/proc/sys/kernel/pid_max
-
Το μέγιστο επιτρεπόμενο PID:
$ cat /proc/sys/kernel/pid_max 32768
Warning
|
Να είστε ιδιαίτερα προσεκτικοί όταν αλλάζετε τις ρυθμίσεις του πυρήνα, καθώς η λάθος τιμή μπορεί να οδηγήσει σε ένα ασταθές σύστημα. |
Συσκευές Υλικού
Θυμηθείτε, στο Linux “όλα είναι ένα αρχείο”. Αυτό σημαίνει ότι οι πληροφορίες συσκευής υλικού καθώς και οι ρυθμίσεις παραμετροποίησης του πυρήνα αποθηκεύονται όλα σε ειδικά αρχεία που βρίσκονται σε εικονικούς καταλόγους.
Ο Kατάλογος /dev
Ο κατάλογος συσκευή [device] /dev
περιέχει αρχεία συσκευής (ή nodes) για όλες τις συνδεδεμένες συσκευές υλικού. Αυτά τα αρχεία συσκευών χρησιμοποιούνται ως διεπαφή μεταξύ των συσκευών και των processes που τις χρησιμοποιούν. Κάθε αρχείο συσκευής εμπίπτει σε μία από τις δύο κατηγορίες:
- Συσκευές block
-
Είναι εκείνες στις οποίες τα δεδομένα διαβάζονται και γράφονται σε τμήματα [block] που μπορούν να αντιμετωπιστούν μεμονωμένα. Παραδείγματα περιλαμβάνουν σκληρούς δίσκους (και τα partitions τους, όπως
/dev/sda1
), μονάδες flash USB, CD, DVD κ.λ.π. - Συσκευές χαρακτήρων
-
Είναι εκείνες στις οποίες τα δεδομένα διαβάζονται και γράφονται διαδοχικά ένας χαρακτήρας τη φορά. Στα παραδείγματα περιλαμβάνονται τα πληκτρολόγια, η κονσόλα κειμένου (
/dev/console
), οι σειριακές θύρες (όπως/dev/ttyS0
κ.ο.κ.) κ.λ.π.
Κατά την παράθεση μιας λίστας αρχείων συσκευής, βεβαιωθείτε ότι χρησιμοποιείτε το ls
με το διακόπτη -l
για να διαφοροποιήσετε μεταξύ των δύο. Μπορούμε — για παράδειγμα — να ελέγξουμε για σκληρούς δίσκους και partitions:
# ls -l /dev/sd* brw-rw---- 1 root disk 8, 0 may 25 17:02 /dev/sda brw-rw---- 1 root disk 8, 1 may 25 17:02 /dev/sda1 brw-rw---- 1 root disk 8, 2 may 25 17:02 /dev/sda2 (...)
Ή για σειριακά τερματικά (TeleTYpewriter):
# ls -l /dev/tty* crw-rw-rw- 1 root tty 5, 0 may 25 17:26 /dev/tty crw--w---- 1 root tty 4, 0 may 25 17:26 /dev/tty0 crw--w---- 1 root tty 4, 1 may 25 17:26 /dev/tty1 (...)
Παρατηρήστε πώς ο πρώτος χαρακτήρας είναι b
για συσκευές block και c
για συσκευές χαρακτήρων.
Tip
|
Ο αστερίσκος ( |
Επιπλέον, το /dev
περιλαμβάνει ορισμένα ειδικά αρχεία που είναι αρκετά χρήσιμα για διαφορετικούς σκοπούς προγραμματισμού:
/dev/zero
-
Παρέχει όσους μηδενικούς χαρακτήρες ζητούνται.
/dev/null
-
Γνωστό και ώς bit bucket. Απορρίπτει όλες τις πληροφορίες που του αποστέλλονται.
/dev/urandom
-
Δημιουργεί ψευδοτυχαίους αριθμούς.
Ο Kατάλογος /sys
Το σύστημα αρχείων sys (sysfs
) είναι προσαρτημένο στο /sys
. Εισήχθη με την άφιξη του πυρήνα 2.6 και σήμαινε μια μεγάλη βελτίωση στο /proc/sys
.
Τα processes πρέπει να αλληλεπιδρούν με τις συσκευές στο /dev
και έτσι ο πυρήνας χρειάζεται έναν κατάλογο που περιέχει πληροφορίες σχετικά με αυτές τις συσκευές υλικού. Αυτός ο κατάλογος είναι ο /sys
και τα δεδομένα του είναι ταξινομημένα σε κατηγορίες. Για παράδειγμα, για να ελέγξετε τη διεύθυνση MAC της κάρτας δικτύου σας (enp0s3
), θα πρέπει να κάνετε cat
το ακόλουθο αρχείο:
$ cat /sys/class/net/enp0s3/address 08:00:27:02:b2:74
Μνήμη και Τύποι Μνήμης
Βασικά, για να ξεκινήσει να τρέχει ένα πρόγραμμα, πρέπει να φορτωθεί στη μνήμη. Σε γενικές γραμμές, όταν μιλάμε για μνήμη αναφερόμαστε στη Μνήμη Τυχαίας Προσπέλασης [Random Access Memory] (RAM) και — σε σύγκριση με μηχανικούς σκληρούς δίσκους — έχει το πλεονέκτημα ότι είναι πολύ πιο γρήγορη. Στα κατά, το οτι δεν είναι μόνιμη (δηλαδή, μόλις κλείσει ο υπολογιστής, τα δεδομένα εξαφανίζονται).
Παρά τα προαναφερθέντα — όσον αφορά τη μνήμη — μπορούμε να διαφοροποιήσουμε δύο κύριους τύπους σε ένα σύστημα Linux:
- Φυσική μνήμη
-
Γνωστή και ως RAM, έρχεται με τη μορφή μικροκυκλωμάτων που αποτελούνται από ολοκληρωμένα κυκλώματα που περιέχουν εκατομμύρια τρανζίστορ και πυκνωτές. Αυτά, με τη σειρά τους, σχηματίζουν κελιά μνήμης (το βασικό δομικό στοιχείο της μνήμης του υπολογιστή). Κάθε ένα από αυτά τα κελιά έχει έναν συσχετισμένο δεκαεξαδικό κώδικα — μια διεύθυνση μνήμης — έτσι ώστε να μπορεί να γίνει αναφορά όταν χρειάζεται.
- Swap
-
Γνωστή και ως χώρος swap, είναι το τμήμα της εικονικής μνήμης που ζει στον σκληρό δίσκο και χρησιμοποιείται όταν δεν υπάρχει άλλη διαθέσιμη μνήμη RAM.
Από την άλλη, υπάρχει η έννοια της εικονικής μνήμης που είναι μια αφηρημένη έννοια του συνολικού ποσού της χρησιμοποιήσιμης μνήμης διευθύνσεων (RAM, αλλά και χώρου στο δίσκο) όπως φαίνεται από τις εφαρμογές.
Το free
αναλύει το /proc/meminfo
και εμφανίζει την ποσότητα της ελεύθερης και χρησιμοποιούμενης μνήμης στο σύστημα με πολύ σαφή τρόπο:
$ free total used free shared buff/cache available Mem: 4050960 1474960 1482260 96900 1093740 2246372 Swap: 4192252 0 4192252
Ας εξηγήσουμε τις διάφορες στήλες:
total
-
Συνολική ποσότητα εγκατεστημένης φυσικής και swap μνήμης.
used
-
Ποσότητα φυσικής και swap μνήμης που χρησιμοποιείται αυτήν τη στιγμή.
free
-
Ποσότητα φυσικής και swap μνήμης που δεν χρησιμοποιείται αυτήν τη στιγμή.
shared
-
Ποσότητα φυσικής μνήμης που χρησιμοποιείται — κυρίως — από το
tmpfs
. buff/cache
-
Ποσότητα φυσικής μνήμης που χρησιμοποιείται αυτήν τη στιγμή από τα buffer του πυρήνα και το cache σελίδων και slabs.
available
-
Εκτίμηση του πόση φυσική μνήμη είναι διαθέσιμη για νέα processes.
Από προεπιλογή, το free
εμφανίζει τιμές σε kibibyte, αλλά επιτρέπει μια ποικιλία διακοπτών να εμφανίζουν τα αποτελέσματά του σε διαφορετικές μονάδες μέτρησης. Μερικές από αυτές τις επιλογές περιλαμβάνουν:
-b
-
Bytes.
-m
-
Mebibytes.
-g
-
Gibibytes.
-h
-
Μορφή αναγνώσιμη από τον άνθρωπο.
Το -h
διαβάζεται πάντα άνετα:
$ free -h total used free shared buff/cache available Mem: 3,9G 1,4G 1,5G 75M 1,0G 2,2G Swap: 4,0G 0B 4,0G
Note
|
Ένα kibibyte (KiB) ισούται με 1.024 byte ενώ ένα kilobyte (KB) ισούται με 1000 byte. Το ίδιο ισχύει αντίστοιχα για mebibyte, gibibyte κ.λ.π. |
Καθοδηγούμενες Ασκήσεις
-
Χρησιμοποιήστε την εντολή
which
για να βρείτε τη θέση των παρακάτω προγραμμάτων και να συμπληρώσετε τον πίνακα:Πρόγραμμα Εντολή which
Path προς το Εκτελέσιμο (έξοδος) Ο χρήστης χρειάζεται δικαιώματα root
;swapon
kill
cut
usermod
cron
ps
-
Πού βρίσκονται τα ακόλουθα αρχεία;
Αρχείο /etc
~
.bashrc
bash.bashrc
passwd
.profile
resolv.conf
sysctl.conf
-
Εξηγήστε την σημασία των αριθμητικών στοιχείων για το αρχείο πυρήνα
vmlinuz-4.15.0-50-generic
που βρίσκονται στο/boot
:Στοιχείο Αριθμού Σημασία 4
15
0
50
-
Ποια εντολή θα χρησιμοποιούσατε για να παραθέσετε όλους τους σκληρούς δίσκους και τα partitions στο
/dev
;
Ασκήσεις Εξερεύνησης
-
Τα αρχεία συσκευών για σκληρούς δίσκους αντιπροσωπεύονται με βάση τους ελεγκτές που χρησιμοποιούν — είδαμε το
/dev/sd*
για μονάδες που χρησιμοποιούν SCSI (Small Computer System Interface) και SATA (Serial Advanced Technology Attachment), αλλά-
Πώς αντιπροσωπεύονταν οι παλιές μονάδες IDE (Integrated Drive Electronics);
-
Και οι σύγχρονες μονάδες δίσκου NVMe (Non-Volatile Memory Express);
-
-
Ρίξτε μια ματιά στο αρχείο
/proc/meminfo
. Συγκρίνετε τα περιεχόμενα αυτού του αρχείου με την έξοδο της εντολήςfree
και προσδιορίστε ποιο κλειδί από το/proc/meminfo
αντιστοιχεί στα ακόλουθα πεδία στην έξοδο τουfree
:Έξοδος free
Πεδίο /proc/meminfo
total
free
shared
buff/cache
available
Σύνοψη
Σε αυτό το μάθημα έχετε μάθει για τη θέση των προγραμμάτων και τα αρχεία παραμετροποίησής τους σε ένα σύστημα Linux. Σημαντικά γεγονότα που πρέπει να θυμάστε είναι:
-
Βασικά, τα προγράμματα βρίσκονται σε μια δομή καταλόγου τριών επιπέδων:
/
,/usr
και/usr/local
. Κάθε ένα από αυτά τα επίπεδα μπορεί να περιέχει καταλόγουςbin
καιsbin
. -
Τα αρχεία διαμόρφωσης αποθηκεύονται στα
/etc
και~
. -
Τα dotfiles είναι κρυφά αρχεία που ξεκινούν με μια τελεία (
.
).
Έχουμε επίσης συζητήσει τον πυρήνα του Linux. Σημαντικά γεγονότα είναι:
-
Για το Linux, όλα είναι ένα αρχείο.
-
Ο πυρήνας του Linux ζει στο
/boot
μαζί με άλλα αρχεία που σχετίζονται με την εκκίνηση. -
Για να ξεκινήσουν να εκτελούνται τα processes, ο πυρήνας πρέπει πρώτα να φορτωθεί σε μια προστατευμένη περιοχή της μνήμης.
-
Η δουλειά του πυρήνα είναι αυτή της κατανομής πόρων του συστήματος σε processes.
-
Το εικονικό (ή ψευδο) σύστημα αρχείων
/proc
αποθηκεύει σημαντικά δεδομένα του πυρήνα και του συστήματος με ρευστό τρόπο.
Ομοίως, εξερευνήσαμε συσκευές υλικού και μάθαμε τα εξής:
-
Ο κατάλογος
/dev
αποθηκεύει ειδικά αρχεία (γνωστοί και ως nodes) για όλες τις συνδεδεμένες συσκευές υλικού: συσκευές block ή συσκευές χαρακτήρων. Το πρώτο μεταφέρει δεδομένα σε τμήματα· το τελευταίο, ένα χαρακτήρα τη φορά. -
Ο κατάλογος
/dev
περιέχει επίσης άλλα ειδικά αρχεία όπως/dev/zero
,/dev/null
ή/dev/urandom
. -
Ο κατάλογος
/sys
αποθηκεύει πληροφορίες σχετικά με συσκευές υλικού ταξινομημένες σε κατηγορίες.
Τέλος, θίξαμε τη μνήμη. Μάθαμε:
-
Ένα πρόγραμμα εκτελείται όταν φορτωθεί στη μνήμη.
-
Τι είναι η RAM (Random Access Memory).
-
Τι είναι η Swap.
-
Πώς να εμφανίσετε τη χρήση της μνήμης.
Εντολές που χρησιμοποιήθηκαν σε αυτό το μάθημα:
cat
-
Συνένωση/εκτύπωση των περιεχομένων ενός αρχείου.
free
-
Εμφάνιση ποσότητας ελεύθερης και χρησιμοποιημένης μνήμης στο σύστημα.
ls
-
Λίστα των περιεχομένων ενός καταλόγου.
which
-
Εμφάνιση τοποθεσίας ενός προγράμματος.
Απαντήσεις στις Καθοδηγούμενες Ασκήσεις
-
Χρησιμοποιήστε την εντολή
which
για να βρείτε τη θέση των παρακάτω προγραμμάτων και να συμπληρώσετε τον πίνακα:Πρόγραμμα Εντολή which
Path προς το Εκτελέσιμο (έξοδος) Ο χρήστης χρειάζεται δικαιώματα root
;swapon
which swapon
/sbin/swapon
Ναί
kill
which kill
/bin/kill
Όχι
cut
which cut
/usr/bin/cut
Όχι
usermod
which usermod
/usr/sbin/usermod
Ναί
cron
which cron
/usr/sbin/cron
Ναί
ps
which ps
/bin/ps
Όχι
-
Πού βρίσκονται τα ακόλουθα αρχεία;
Αρχείο /etc
~
.bashrc
Όχι
Ναί
bash.bashrc
Ναί
Όχι
passwd
Ναί
Όχι
.profile
Όχι
Ναί
resolv.conf
Ναί
Όχι
sysctl.conf
Ναί
Όχι
-
Εξηγήστε την σημασία των αριθμητικών στοιχείων για το αρχείο πυρήνα
vmlinuz-4.15.0-50-generic
που βρίσκονται στο/boot
:Στοιχείο Αριθμού Σημασία 4
Έκδοση πυρήνα
15
Μείζων αναθεώρηση
0
Ελάσσων αναθεώρηση
50
Αριθμός επιδιόρθωσης
-
Ποια εντολή θα χρησιμοποιούσατε για να παραθέσετε όλους τους σκληρούς δίσκους και τα partitions στο
/dev
;ls /dev/sd*
Απαντήσεις στις Ασκήσεις Εξερεύνησης
-
Τα αρχεία συσκευών για σκληρούς δίσκους αντιπροσωπεύονται με βάση τους ελεγκτές που χρησιμοποιούν — είδαμε το
/dev/sd*
για μονάδες που χρησιμοποιούν SCSI (Small Computer System Interface) και SATA (Serial Advanced Technology Attachment), αλλά-
Πώς αντιπροσωπεύονταν οι παλιές μονάδες IDE (Integrated Drive Electronics);
/dev/hd*
-
Και οι σύγχρονες μονάδες δίσκου NVMe (Non-Volatile Memory Express);
/dev/nvme*
-
-
Ρίξτε μια ματιά στο αρχείο
/proc/meminfo
. Συγκρίνετε τα περιεχόμενα αυτού του αρχείου με την έξοδο της εντολήςfree
και προσδιορίστε ποιο κλειδί από το/proc/meminfo
αντιστοιχεί στα ακόλουθα πεδία στην έξοδο τουfree
:Έξοδος free
Πεδίο /proc/meminfo
total
MemTotal
/SwapTotal
free
MemFree
/SwapFree
shared
Shmem
buff/cache
Buffers
,Cached
andSReclaimable
available
MemAvailable