4.3 Μάθημα 2
Πιστοποιητικό: |
Linux Essentials |
---|---|
Έκδοση: |
1.6 |
Θέμα: |
4 Το Λειτουργικό Σύστημα Linux |
Σκοπός: |
4.3 Πού Αποθηκεύονται τα Δεδομένα |
Μάθημα: |
2 απο 2 |
Εισαγωγή
Αφού εξερευνήσουμε προγράμματα και τα αρχεία παραμετροποίησής τους, σε αυτό το μάθημα θα μάθουμε πώς εκτελούνται οι εντολές ως processes. Ομοίως, θα σχολιάσουμε τα μηνύματα του συστήματος, τη χρήση της προσωρινής μνήμης δακτυλίου πυρήνα [kernel ring buffer] και τον τρόπο με τον οποίο η άφιξη του systemd
και του journal daemon — journald
— άλλαξαν τους τρόπους που είχαν γίνει μέχρι τώρα σχετικά με το logging του συστήματος.
Processes
Κάθε φορά που ένας χρήστης εκδίδει μια εντολή, εκτελείται ένα πρόγραμμα και δημιουργούνται μία ή περισσότερα processes.
Τα processes υπάρχουν σε μια ιεραρχία. Μετά τη φόρτωση του πυρήνα στη μνήμη κατά την εκκίνηση, ξεκινά το πρώτο process, το οποίο — με τη σειρά του — ξεκινά άλλα processes, τα οποία, πάλι, μπορούν να ξεκινήσουν άλλα processes. Κάθε process έχει ένα μοναδικό αναγνωριστικό (PID
) και ένα αναγνωριστικό του parnet process (PPID
). Αυτοί είναι θετικοί ακέραιοι αριθμοί που εκχωρούνται με διαδοχική σειρά.
Δυναμική Εξερεύνηση Processes: top
Μπορείτε να λάβετε μια δυναμική λίστα όλων των τρεχουσών processes με την εντολή top
:
$ top top - 11:10:29 up 2:21, 1 user, load average: 0,11, 0,20, 0,14 Tasks: 73 total, 1 running, 72 sleeping, 0 stopped, 0 zombie %Cpu(s): 0,0 us, 0,3 sy, 0,0 ni, 99,7 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st KiB Mem : 1020332 total, 909492 free, 38796 used, 72044 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 873264 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 436 carol 20 0 42696 3624 3060 R 0,7 0,4 0:00.30 top 4 root 20 0 0 0 0 S 0,3 0,0 0:00.12 kworker/0:0 399 root 20 0 95204 6748 5780 S 0,3 0,7 0:00.22 sshd 1 root 20 0 56872 6596 5208 S 0,0 0,6 0:01.29 systemd 2 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0,0 0,0 0:00.02 ksoftirqd/0 5 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 kworker/0:0H 6 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kworker/u2:0 7 root 20 0 0 0 0 S 0,0 0,0 0:00.08 rcu_sched 8 root 20 0 0 0 0 S 0,0 0,0 0:00.00 rcu_bh 9 root rt 0 0 0 0 S 0,0 0,0 0:00.00 migration/0 10 root 0 -20 0 0 0 S 0,0 0,0 0:00.00 lru-add-drain (...)
Όπως είδαμε παραπάνω, η top
μπορεί επίσης να μας δώσει πληροφορίες σχετικά με την κατανάλωση μνήμης και CPU του συνολικού συστήματος καθώς και για κάθε process.
Η top
επιτρέπει στον χρήστη κάποια αλληλεπίδραση.
Από προεπιλογή, η έξοδος ταξινομείται με βάση το ποσοστό του χρόνου CPU που χρησιμοποιείται από κάθε process με φθίνουσα σειρά. Αυτή η συμπεριφορά μπορεί να τροποποιηθεί πατώντας τα ακόλουθα πλήκτρα εντός της top
:
M
-
Ταξινόμηση κατά χρήση μνήμης.
N
-
Ταξινόμηση κατά αριθμό ID του process.
T
-
Ταξινόμηση κατά χρόνο εκτέλεσης.
P
-
Ταξινόμηση κατά ποσοστό χρήσης CPU.
Για εναλλαγή μεταξύ φθίνουσας/αύξουσας σειράς απλώς πατήστε το R
.
Tip
|
Μια πιο φανταχτερή και πιο φιλική προς το χρήστη έκδοση του |
Snapshot Processes: ps
Μια άλλη πολύ χρήσιμη εντολή για τη λήψη πληροφοριών σχετικά με τα processes είναι το ps
. Ενώ το top
παρέχει δυναμικές πληροφορίες, αυτές του ps
είναι στατικές.
Εάν καλεστεί χωρίς επιλογές, η έξοδος του ps
είναι αρκετά διακριτή και σχετίζεται μόνο με τα processes που συνδέονται με το τρέχον shell:
$ ps PID TTY TIME CMD 2318 pts/0 00:00:00 bash 2443 pts/0 00:00:00 ps
Οι εμφανιζόμενες πληροφορίες έχουν να κάνουν με το αναγνωριστικό process (PID
), το τερματικό στο οποίο εκτελείται το process (TTY
), τον χρόνο της CPU που έλαβε το process (TIME
) και την εντολή που ξεκίνησε τη διαδικασία (CMD
).
Ένας χρήσιμος διακόπτης για το ps
είναι το -f
που εμφανίζει μια λίστα πλήρους μορφής:
$ ps -f UID PID PPID C STIME TTY TIME CMD carol 2318 1682 0 08:38 pts/1 00:00:00 bash carol 2443 2318 0 08:46 pts/1 00:00:00 ps -f
Σε συνδυασμό με άλλους διακόπτες, το -f
δείχνει τη σχέση μεταξύ parent και child processes:
$ ps -uf USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND carol 2318 0.0 0.1 21336 5140 pts/1 Ss 08:38 0:00 bash carol 2492 0.0 0.0 38304 3332 pts/1 R+ 08:51 0:00 \_ ps -uf carol 1780 0.0 0.1 21440 5412 pts/0 Ss 08:28 0:00 bash carol 2291 0.0 0.7 305352 28736 pts/0 Sl+ 08:35 0:00 \_ emacs index.en.adoc -nw (...)
Ομοίως, το ps
μπορεί να εμφανίσει το ποσοστό της μνήμης που χρησιμοποιείται κατά την στιγμή που καλείται με το διακόπτη -v
:
$ ps -v PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 1163 tty2 Ssl+ 0:00 1 67 201224 5576 0.1 /usr/lib/gdm3/gdm-x-session (...) (...)
Note
|
Μια άλλη οπτικά ελκυστική εντολή που δείχνει την ιεραρχία των processes είναι το |
Πληροφορίες Process στον Κατάλογο /proc
Έχουμε ήδη δει το σύστημα αρχείων /proc
. Το /proc
περιλαμβάνει έναν αριθμημένο υποκατάλογο για κάθε process που εκτελείται στο σύστημα (ο αριθμός είναι το PID
του process):
carol@debian:~# ls /proc 1 108 13 17 21 27 354 41 665 8 9 10 109 14 173 22 28 355 42 7 804 915 103 11 140 18 23 29 356 428 749 810 918 104 111 148 181 24 3 367 432 75 811 105 112 149 19 244 349 370 433 768 83 106 115 15 195 25 350 371 5 797 838 107 12 16 2 26 353 404 507 798 899 (...)
Έτσι, όλες οι πληροφορίες σχετικά με ένα συγκεκριμένο process περιλαμβάνονται στον κατάλογό του. Ας παραθέσουμε τα περιεχόμενα του πρώτου process — εκείνου του οποίου το PID
είναι 1
(η έξοδος έχει περικοπεί για αναγνωσιμότητα):
# ls /proc/1/ attr cmdline environ io mem ns autogroup comm exe limits mountinfo numa_maps auxv coredump_filter fd loginuid mounts oom_adj ...
Μπορείτε να ελέγξετε — για παράδειγμα — το εκτέλεσιμο process:
# cat /proc/1/cmdline; echo /sbin/init
Όπως μπορείτε να δείτε, το δυαδικό πρόγραμμα που ξεκίνησε την ιεραρχία των processes ήταν το /sbin/init
.
Note
|
Οι εντολές μπορούν να συνδεθούν με το ερωτηματικό ( |
Ο Φόρτος Εργασίας Συστήματος
Κάθε process σε ένα σύστημα μπορεί δυνητικά να καταναλώσει πόρους του συστήματος. Ο λεγόμενος φόρτος συστήματος προσπαθεί να αθροίσει τον συνολικό φόρτο του συστήματος σε έναν ενιαίο αριθμητικό δείκτη. Μπορείτε να δείτε τον τρέχων φόρτο με την εντολή uptime
:
$ uptime 22:12:54 up 13 days, 20:26, 1 user, load average: 2.91, 1.59, 0.39
Τα τρία τελευταία ψηφία υποδεικνύουν τον μέσο όρο φόρτου του συστήματος για το τελευταίο λεπτό (2,91
), τα τελευταία πέντε λεπτά (1,59
) και τα τελευταία δεκαπέντε λεπτά (0,39
), αντίστοιχα.
Καθένας από αυτούς τους αριθμούς υποδεικνύει πόσα processes περίμεναν να ολοκληρωθούν είτε οι πόροι της CPU είτε οι λειτουργίες εισόδου/εξόδου. Αυτό σημαίνει ότι αυτά τα processes ήταν έτοιμα να εκτελεστούν εάν είχαν λάβει τους αντίστοιχους πόρους.
Logging Συστήματος και Ανταλλαγή Μηνυμάτων Συστήματος
Μόλις ο πυρήνας και τα processes αρχίσουν να εκτελούνται και να επικοινωνούν μεταξύ τους, παράγονται πολλές πληροφορίες. Το μεγαλύτερο μέρος του αποστέλλεται σε αρχεία — τα λεγόμενα log αρχεία ή, απλά, logs.
Χωρίς logging, η αναζήτηση ενός συμβάντος που συνέβη σε έναν server θα έφερνε στους διαχειριστές συστήματος πονοκέφαλο, εξ ου και η σημασία της ύπαρξης ενός τυποποιημένου και συγκεντρωτικού τρόπου παρακολούθησης των συμβάντων του συστήματος. Επιπλέον, τα logging αρχεία είναι καθοριστικά και ενδεικτικά όταν πρόκειται για την αντιμετώπιση προβλημάτων και την ασφάλεια, καθώς και αξιόπιστες πηγές δεδομένων για την κατανόηση των στατιστικών στοιχείων του συστήματος και την πραγματοποίηση προβλέψεων τάσεων.
Logging με τον syslog Daemon
Παραδοσιακά, η διαχείριση των μηνυμάτων συστήματος γίνεται από το τυπικό logging facility — syslog — ή οποιοδήποτε από τα παράγωγά του — syslog-ng ή rsyslog. Ο logging daemon συλλέγει μηνύματα από άλλα services και προγράμματα και τα αποθηκεύει σε log αρχεία, συνήθως στο /var/log
. Ωστόσο, ορισμένα services φροντίζουν τα δικά τους log αρχεία (πάρτε — για παράδειγμα — τον web server Apache HTTPD). Ομοίως, ο πυρήνας του Linux χρησιμοποιεί ένα buffer δακτυλίου στη μνήμη για την αποθήκευση των log μηνυμάτων του.
Αρχεία Kαταγραφής στο /var/log
Επειδή τα logs είναι δεδομένα που ποικίλλουν με την πάροδο του χρόνου, βρίσκονται συνήθως στο /var/log
.
Εάν εξερευνήσετε το /var/log
, θα συνειδητοποιήσετε ότι τα ονόματα των logs είναι — σε κάποιο βαθμό — αρκετά αυτονόητα. Μερικά παραδείγματα περιλαμβάνουν:
/var/log/auth.log
-
Αποθηκεύει πληροφορίες σχετικά με την επαλήθευση ταυτότητας.
/var/log/kern.log
-
Αποθηκεύει πληροφορίες πυρήνα.
/var/log/syslog
-
Αποθηκεύει πληροφορίες συστήματος.
/var/log/messages
-
Αποθηκεύει δεδομένα συστήματος και εφαρμογών.
Note
|
Το ακριβές όνομα και τα περιεχόμενα των log αρχείων ενδέχεται να διαφέρουν μεταξύ των διανομών Linux. |
Πρόσβαση στα Log Αρχεία
Κατά την εξερεύνηση log αρχείων, θυμηθείτε να είστε ο χρήστης root (εάν δεν έχετε δικαιώματα ανάγνωσης) και να χρησιμοποιείτε έναν σελιδοποιητή όπως το less
.
# less /var/log/messages Jun 4 18:22:48 debian liblogging-stdlog: [origin software="rsyslogd" swVersion="8.24.0" x-pid="285" x-info="http://www.rsyslog.com"] rsyslogd was HUPed Jun 29 16:57:10 debian kernel: [ 0.000000] Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.130-2 (2018-10-27) Jun 29 16:57:10 debian kernel: [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-8-amd64 root=/dev/sda1 ro quiet
Εναλλακτικά, μπορείτε να χρησιμοποιήσετε το tail
με το διακόπτη -f
για να διαβάσετε τα πιο πρόσφατα μηνύματα του αρχείου και να εμφανίσετε δυναμικά τις νέες γραμμές όπως αυτές προστίθενται:
# tail -f /var/log/messages Jul 9 18:39:37 debian kernel: [ 2.350572] RAPL PMU: hw unit of domain psys 2^-0 Joules Jul 9 18:39:37 debian kernel: [ 2.512802] input: VirtualBox USB Tablet as /devices/pci0000:00/0000:00:06.0/usb1/1-1/1-1:1.0/0003:80EE:0021.0001/input/input7 Jul 9 18:39:37 debian kernel: [ 2.513861] Adding 1046524k swap on /dev/sda5. Priority:-1 extents:1 across:1046524k FS Jul 9 18:39:37 debian kernel: [ 2.519301] hid-generic 0003:80EE:0021.0001: input,hidraw0: USB HID v1.10 Mouse [VirtualBox USB Tablet] on usb-0000:00:06.0-1/input0 Jul 9 18:39:37 debian kernel: [ 2.623947] snd_intel8x0 0000:00:05.0: white list rate for 1028:0177 is 48000 Jul 9 18:39:37 debian kernel: [ 2.914805] IPv6: ADDRCONF(NETDEV_UP): enp0s3: link is not ready Jul 9 18:39:39 debian kernel: [ 4.937283] e1000: enp0s3 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX Jul 9 18:39:39 debian kernel: [ 4.938493] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s3: link becomes ready Jul 9 18:39:40 debian kernel: [ 5.315603] random: crng init done Jul 9 18:39:40 debian kernel: [ 5.315608] random: 7 urandom warning(s) missed due to ratelimiting
Θα βρείτε την έξοδο στην ακόλουθη μορφή:
-
Χρονοσήμανση
-
Όνομα του host από τον οποίο προήλθε το μήνυμα
-
Όνομα προγράμματος/service που δημιούργησε το μήνυμα
-
Το PID του προγράμματος που δημιούργησε το μήνυμα
-
Περιγραφή της δράσης που έλαβε χώρα
Τα περισσότερα log αρχεία είναι γραμμένα σε απλό κείμενο· ωστόσο, μερικά μπορούν να περιέχουν δυαδικά δεδομένα, όπως συμβαίνει με το /var/log/wtmp
— το οποίο αποθηκεύει δεδομένα σχετικά με επιτυχημένες συνδέσεις. Μπορείτε να χρησιμοποιήσετε την εντολή file
για να προσδιορίσετε ποια είναι η περίπτωση:
$ file /var/log/wtmp /var/log/wtmp: dBase III DBT, version number 0, next free block index 8
Αυτά τα αρχεία διαβάζονται συνήθως χρησιμοποιώντας ειδικές εντολές. Η last
χρησιμοποιείται για την ερμηνεία των δεδομένων στο /var/log/wtmp
:
$ last carol tty2 :0 Thu May 30 10:53 still logged in reboot system boot 4.9.0-9-amd64 Thu May 30 10:52 still running carol tty2 :0 Thu May 30 10:47 - crash (00:05) reboot system boot 4.9.0-9-amd64 Thu May 30 09:11 still running carol tty2 :0 Tue May 28 08:28 - 14:11 (05:42) reboot system boot 4.9.0-9-amd64 Tue May 28 08:27 - 14:11 (05:43) carol tty2 :0 Mon May 27 19:40 - 19:52 (00:11) reboot system boot 4.9.0-9-amd64 Mon May 27 19:38 - 19:52 (00:13) carol tty2 :0 Mon May 27 19:35 - down (00:03) reboot system boot 4.9.0-9-amd64 Mon May 27 19:34 - 19:38 (00:04)
Note
|
Παρόμοια με το |
Κυκλική Εναλλαγή Log
Τα log αρχεία μπορούν να αυξηθούν πολύ μέσα σε λίγες εβδομάδες ή μήνες και να καταλάβουν όλο τον ελεύθερο χώρο στο δίσκο. Για να αντιμετωπιστεί αυτό, χρησιμοποιείται το βοηθητικό πρόγραμμα logrotate
. Εφαρμόζει εναλλαγή των log αρχείων ή ανακύκλωση που συνεπάγεται ενέργειες όπως η μετακίνηση log αρχείων σε νέο όνομα, η αρχειοθέτηση ή/και η συμπίεσή τους, την αποστολή τους μερικές φορές μέσω email στον διαχειριστή συστήματος και τελικά τη διαγραφή τους καθώς παλαιώνονται. Οι κανόνες που χρησιμοποιούνται για την ονομασία αυτών των κυκλικών log αρχείων (προσθέτοντας ένα suffix με την ημερομηνία, για παράδειγμα) ποικίλουν· ωστόσο, η απλή προσθήκη ενός suffix με έναν ακέραιο είναι συνηθισμένη:
# ls /var/log/apache2/ access.log error.log error.log.1 error.log.2.gz other_vhosts_access.log
Σημειώστε πώς το error.log.2.gz
έχει ήδη συμπιεστεί με gzip
(εξ' ου και το suffix .gz
).
Η Προσωρινή Μνήμη Δακτυλίου του Πυρήνα
H προσωρινή μνήμη δακτυλίου του πυρήνα είναι μια δομή δεδομένων σταθερού μεγέθους που καταγράφει μηνύματα εκκίνησης του πυρήνα καθώς και οποιαδήποτε ζωντανά μηνύματα του πυρήνα. Η λειτουργία αυτής της προσωρινής μνήμης — πολύ σημαντική — είναι το logging όλων των μηνυμάτων του πυρήνα που παράγονται κατά την εκκίνηση — όταν το syslog
δεν είναι ακόμη διαθέσιμο. Η εντολή dmesg
εκτυπώνει την προσωρινή μνήμη δακτυλίου του πυρήνα (το οποίο αποθηκευόταν επίσης στο /var/log/dmesg
). Λόγω της έκτασης της προσωρινής μνήμης δακτυλίου, αυτή η εντολή χρησιμοποιείται συνήθως σε συνδυασμό με το βοηθητικό πρόγραμμα φιλτραρίσματος κειμένου grep
ή έναν σελιδοποιητή όπως less
. Για παράδειγμα, για να αναζητήσετε μηνύματα εκκίνησης:
$ dmesg | grep boot [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet [ 0.000000] smpboot: Allowing 1 CPUs, 0 hotplug CPUs [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet [ 0.144986] AppArmor: AppArmor disabled by boot time parameter (...)
Note
|
Καθώς η προσωρινή μνήμη δακτυλίου του πυρήνα μεγαλώνει με νέα μηνύματα με την πάροδο του χρόνου, τα παλαιότερα εξαφανίζονται. |
Το Ημερολόγιο Συστήματος: systemd-journald
Από το 2015, το systemd αντικατέστησε το SysV Init ως έναν εκ των πραγμάτων διαχειριστή συστήματος και υπηρεσιών στις περισσότερες μεγάλες διανομές Linux. Κατά συνέπεια, ο journal daemon — journald — έχει γίνει το τυπικό logging στοιχείο, αντικαθιστώντας το syslog στις περισσότερες πτυχές του. Τα δεδομένα δεν αποθηκεύονται πλέον σε απλό κείμενο αλλά σε δυαδική μορφή. Επομένως, το βοηθητικό πρόγραμμα journalctl
είναι απαραίτητο για την ανάγνωση των log αρχείων. Επιπλέον, το journald είναι συμβατό με το syslog και μπορεί να ενσωματωθεί με το syslog.
Το journalctl
είναι το βοηθητικό πρόγραμμα που χρησιμοποιείται για την ανάγνωση και την υποβολή ερωτημάτων στη βάση δεδομένων του ημερολογίου του systemd. Εάν καλείται χωρίς επιλογές, εκτυπώνει ολόκληρο το ημερολόγιο:
# journalctl -- Logs begin at Tue 2019-06-04 17:49:40 CEST, end at Tue 2019-06-04 18:13:10 CEST. -- jun 04 17:49:40 debian systemd-journald[339]: Runtime journal (/run/log/journal/) is 8.0M, max 159.6M, 151.6M free. jun 04 17:49:40 debian kernel: microcode: microcode updated early to revision 0xcc, date = 2019-04-01 Jun 04 17:49:40 debian kernel: Linux version 4.9.0-8-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) Jun 04 17:49:40 debian kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-8-amd64 root=/dev/sda1 ro quiet (...)
Ωστόσο, όταν καλείται με τους διακόπτες -k
ή --dmesg
, θα ισοδυναμεί με τη χρήση της εντολής dmesg
:
# journalctl -k [ 0.000000] Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.168-1+deb9u2 (2019-05-13) [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=5216e1e4-ae0e-441f-b8f5-8061c0034c74 ro quiet (...)
Άλλες ενδιαφέρουσες επιλογές για το journalctl
περιλαμβάνουν:
-b
,--boot
-
Εμφανίζει πληροφορίες εκκίνησης.
-u
-
Εμφανίζει μηνύματα σχετικά με μια καθορισμένη μονάδα. Χονδρικά, μια μονάδα μπορεί να οριστεί ως οποιοσδήποτε πόρος που χειρίζεται το systemd. Για παράδειγμα, το
journalctl -u apache2.service
χρησιμοποιείται για την ανάγνωση μηνυμάτων σχετικά με τον web serverapache2
. -f
-
Εμφανίζει τα πιο πρόσφατα μηνύματα ημερολογίου και συνεχίζει να εκτυπώνει νέες εγγραφές καθώς προσαρτώνται στο ημερολόγιο — όπως το
tail -f
.
Καθοδηγούμενες Ασκήσεις
-
Ρίξτε μια ματιά στην ακόλουθη λίστα απο το
top
και απαντήστε στις ακόλουθες ερωτήσεις:carol@debian:~$ top top - 13:39:16 up 31 min, 1 user, load average: 0.12, 0.15, 0.10 Tasks: 73 total, 2 running, 71 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.1 us, 0.4 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1020332 total, 698700 free, 170664 used, 150968 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 710956 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 605 nobody 20 0 1137620 132424 34256 S 6.3 13.0 1:47.24 ntopng 444 www-data 20 0 364780 4132 2572 S 0.3 0.4 0:00.44 apache2 734 root 20 0 95212 7004 6036 S 0.3 0.7 0:00.36 sshd 887 carol 20 0 46608 3680 3104 R 0.3 0.4 0:00.03 top 1 root 20 0 56988 6688 5240 S 0.0 0.7 0:00.42 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.87 kworker/0:0 (...)
-
Ποιά processes έχουν ξεκινήσει από την χρήστη
carol
; -
Ποιον εικονικό κατάλογο του
/proc
πρέπει να επισκεφτείτε για να αναζητήσετε δεδομένα σχετικά με την εντολήtop
; -
Ποιό process εκτελέστηκε πρώτο; Πώς μπορείτε να το πείτε?
-
Συμπληρώστε τον πίνακα προσδιορίζοντας σε ποια περιοχή της εξόδου του
top
βρίσκονται οι ακόλουθες πληροφορίες:Πληροφορίες για … Περιοχή Σύνοψης Περιοχή Εργασιών Μνήμη
Swap
PID
Χρόνος CPU
Εντολές
-
-
Ποια εντολή χρησιμοποιείται για την ανάγνωση των παρακάτω δυαδικών log αρχείων;
-
/var/log/wtmp
-
/var/log/btmp
-
/run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal
-
-
Σε συνδυασμό με το
grep
, ποιες εντολές θα χρησιμοποιούσατε για να μάθετε τις ακόλουθες πληροφορίες σχετικά με το Linux σύστημά σας;-
Πότε έγινε η τελευταία επανεκκίνηση του συστήματος (
wtmp
) -
Ποιοι σκληροί δίσκοι είναι εγκατεστημένοι (
kern.log
) -
Πότε έγινε η τελευταία σύνδεση (
auth.log
)
-
-
Ποιές δύο εντολές θα χρησιμοποιούσατε για να εμφανιστεί η προσωρινή μνήμη δακτυλίου του πυρήνα;
-
Υποδείξτε πού ανήκουν τα ακόλουθα log μηνύματα:
-
Jul 10 13:37:39 debian dbus[303]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian kernel: [ 1.923349] usbhid: USB HID core driver
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 14:02:53 debian sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0)
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian NetworkManager[322]: <info> [1562750638.8672] NetworkManager (version 1.6.2) is starting…
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
-
Χρησιμοποιήστε το
journalctl
για να λάβετε πληροφορίες σχετικά με τι παρακάτω μονάδες:Μονάδα Εντολή ssh
networking
rsyslog
cron
Ασκήσεις Εξερεύνησης
-
Επανεξετάστε την έξοδο του
top
από τις καθοδηγούμενες ασκήσεις και απαντήστε στις ακόλουθες ερωτήσεις:-
Ποια δύο βήματα θα ακολουθούσατε για να σκοτώσετε τον web server apache;
-
Στην περιοχή σύνοψης, πώς θα μπορούσατε να εμφανίσετε τις πληροφορίες σχετικά με τη φυσική μνήμη και την swap χρησιμοποιώντας γραμμές προόδου;
-
Τώρα, ταξινομήστε τις διαδικασίες κατά χρήση μνήμης:
-
Τώρα που έχετε τις πληροφορίες μνήμης να εμφανίζονται με γραμμές προόδου και τα processes ταξινομημένα κατά χρήση μνήμης, αποθηκεύστε αυτές τις διαμορφώσεις ώστε να τις λαμβάνετε ως προεπιλογή την επόμενη φορά που θα χρησιμοποιήσετε το
top
: -
Ποιο αρχείο αποθηκεύει τις ρυθμίσεις διαμόρφωσης του
top
; Που βρίσκεται? Πώς μπορείτε να ελέγξετε την ύπαρξή του;
-
-
Μάθετε για την εντολή
exec
στο Bash. Προσπαθήστε να επιδείξετε τη λειτουργικότητά του ξεκινώντας ένα Bash session, βρείτε το process Bash μεps
, και μετά εκτελέστε τοexec /bin/sh
και αναζητήστε ξανά το process με το ίδιο PID. -
Ακολουθήστε αυτά τα βήματα για να εξερευνήσετε συμβάντα του πυρήνα και τη δυναμική διαχείριση συσκευών του udev:
-
Συνδέστε μια μονάδα USB στον υπολογιστή σας. Εκτελέστε το
dmesg
και δώστε προσοχή στις τελευταίες γραμμές. Ποια είναι η πιο πρόσφατη γραμμή; -
Έχοντας υπόψη την έξοδο από την προηγούμενη εντολή, εκτελέστε το
ls /dev/sd*
και βεβαιωθείτε ότι η μονάδα USB εμφανίζεται στην λίστα. Ποια είναι η έξοδος; -
Τώρα αφαιρέστε τη μονάδα USB και εκτελέστε ξανά το
dmesg
. Πώς διαβάζεται η πιο πρόσφατη γραμμή; -
Εκτελέστε ξανά το
ls /dev/sd*
και βεβαιωθείτε ότι η συσκευή σας εξαφανίστηκε από την λίστα. Ποια είναι η έξοδος;
-
Σύνοψη
Στο πλαίσιο της αποθήκευσης δεδομένων, τα ακόλουθα θέματα έχουν συζητηθεί σε αυτό το μάθημα: διαχείριση processes και logging συστήματος και ανταλλαγή μηνυμάτων συστήματος.
Όσον αφορά τη διαχείριση των processes, μάθαμε τα εξής:
-
Τα προγράμματα δημιουργούν processes και τα processes υπάρχουν σε μια ιεραρχία.
-
Κάθε process έχει ένα μοναδικό αναγνωριστικό (
PID
) και ένα αναγνωριστικό parent process (PPID
). -
Το
top
είναι μια πολύ χρήσιμη εντολή για δυναμική και διαδραστική εξερεύνηση των εκτελούμενων processes του συστήματος. -
Το
ps
μπορεί να χρησιμοποιηθεί για τη λήψη ενός snapshot των τρεχουσών processes που εκτελούνται στο σύστημα. -
Ο κατάλογος
/proc
περιλαμβάνει καταλόγους για κάθε process που εκτελείται στο σύστημα με το όνομα των PID τους. -
Την έννοια του μέσου όρου φόρτου του συστήματος — η οποία είναι πολύ χρήσιμη για τον έλεγχο της χρήσης/υπερφόρτωσης της CPU.
Όσον αφορά το logging του συστήματος, πρέπει να θυμόμαστε ότι:
-
Το log αρχείο είναι ένα αρχείο όπου καταγράφονται συμβάντα συστήματος. Τα log αρχεία είναι ανεκτίμητα όταν πρόκειται για την αντιμετώπιση προβλημάτων.
-
Το logging γίνεται παραδοσιακά από ειδικά services όπως το syslog, το syslog-ng ή το rsyslog. Ωστόσο, ορισμένα προγράμματα χρησιμοποιούν τους δικούς τους logging daemons.
-
Επειδή τα log αρχεία είναι μεταβλητά δεδομένα, διατηρούνται στο
/var
και — μερικές φορές — τα ονόματά τους μπορούν να σας δώσουν μια ιδέα για το περιεχόμενό τους (kern.log
,auth.log
, κ.λ.π.) -
Τα περισσότερα log αρχεία είναι γραμμένα σε απλό κείμενο και μπορούν να διαβαστούν με οποιοδήποτε πρόγραμμα επεξεργασίας κειμένου, αρκεί να έχετε τα σωστά δικαιώματα. Ωστόσο, μερικά από αυτά είναι δυαδικά και πρέπει να διαβαστούν χρησιμοποιώντας ειδικές εντολές.
-
Για να αποφύγετε προβλήματα με το χώρο στο δίσκο, η κυκλική εναλλαγή logs πραγματοποιείται από το βοηθητικό πρόγραμμα logrotate.
-
Όσον αφορά τον πυρήνα, χρησιμοποιεί μια κυκλική δομή δεδομένων — τον δακτύλιο προσωρινής μνήμης — όπου διατηρούνται τα μηνύματα εκκίνησης (τα παλιά μηνύματα εξαφανίζονται με την πάροδο του χρόνου).
-
Ο διαχειριστής συστήματος και υπηρεσιών systemd αντικατέστησε το System V init σε όλες σχεδόν τις διανομές με το journald να γίνεται το τυπικό logging service.
-
Για να διαβάσετε το ημερολόγιο του systemd, απαιτείται το βοηθητικό πρόγραμμα
journalctl
.
Εντολές που χρησιμοποιήθηκαν σε αυτό το μάθημα:
cat
-
Συνένωση/εκτύπωση των περιεχομένων ενός αρχείου.
dmesg
-
Εκτύπωση της προσωρινή μνήμη δακτυλίου του πυρήνα.
echo
-
Εμφάνιση μιας γραμμής κειμένου ή μια νέας γραμμής.
file
-
Προσδιορισμός του τύπου του αρχείου.
grep
-
Εκτύπωση γραμμών που ταιριάζουν με ένα μοτίβο.
last
-
Εμφάνιση μιας λίστας με τους τελευταίους συνδεδεμένους χρήστες
less
-
Εμφάνιση των περιεχομένων του αρχείου μία σελίδα τη φορά.
ls
-
Λίστα των περιεχομένων ενός καταλόγου.
journalctl
-
Ερώτημα προς το ημερολόγιο του
systemd
. tail
-
Εμφάνιση των τελευταίων γραμμών ενός αρχείου.
Απαντήσεις στις Καθοδηγούμενες Ασκήσεις
-
Ρίξτε μια ματιά στην ακόλουθη λίστα απο το
top
και απαντήστε στις ακόλουθες ερωτήσεις:carol@debian:~$ top top - 13:39:16 up 31 min, 1 user, load average: 0.12, 0.15, 0.10 Tasks: 73 total, 2 running, 71 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.1 us, 0.4 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1020332 total, 698700 free, 170664 used, 150968 buff/cache KiB Swap: 1046524 total, 1046524 free, 0 used. 710956 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 605 nobody 20 0 1137620 132424 34256 S 6.3 13.0 1:47.24 ntopng 444 www-data 20 0 364780 4132 2572 S 0.3 0.4 0:00.44 apache2 734 root 20 0 95212 7004 6036 S 0.3 0.7 0:00.36 sshd 887 carol 20 0 46608 3680 3104 R 0.3 0.4 0:00.03 top 1 root 20 0 56988 6688 5240 S 0.0 0.7 0:00.42 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.87 kworker/0:0 (...)
-
Ποιά processes έχουν ξεκινήσει από την χρήστη
carol
;Απάντηση: Μόνο μία:
top
. -
Ποιον εικονικό κατάλογο του
/proc
πρέπει να επισκεφτείτε για να αναζητήσετε δεδομένα σχετικά με την εντολήtop
;Απάντηση:
/proc/887
-
Ποιό process εκτελέστηκε πρώτο; Πώς μπορείτε να το πείτε?
Απάντηση:
systemd
. Επειδή είναι αυτό με τοPID
#1. -
Συμπληρώστε τον πίνακα προσδιορίζοντας σε ποια περιοχή της εξόδου του
top
βρίσκονται οι ακόλουθες πληροφορίες:Πληροφορίες για … Περιοχή Σύνοψης Περιοχή Εργασιών Μνήμη
Ναί
Ναί
Swap
Ναί
Όχι
PID
Όχι
Ναί
Χρόνος CPU
Ναί
Ναί
Εντολές
Όχι
Ναί
-
-
Ποια εντολή χρησιμοποιείται για την ανάγνωση των παρακάτω δυαδικών log αρχείων;
-
/var/log/wtmp
Απάντηση:
last
-
/var/log/btmp
Απάντηση:
lastb
-
/run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal
Απάντηση:
journalctl
-
-
Σε συνδυασμό με το
grep
, ποιες εντολές θα χρησιμοποιούσατε για να μάθετε τις ακόλουθες πληροφορίες σχετικά με το Linux σύστημά σας;-
Πότε έγινε η τελευταία επανεκκίνηση του συστήματος (
wtmp
)Απάντηση:
last
-
Ποιοι σκληροί δίσκοι είναι εγκατεστημένοι (
kern.log
)Απάντηση:
less /var/log/kern.log
-
Πότε έγινε η τελευταία σύνδεση (
auth.log
)Απάντηση:
less /var/log/auth.log
-
-
Ποιές δύο εντολές θα χρησιμοποιούσατε για να εμφανιστεί η προσωρινή μνήμη δακτυλίου του πυρήνα;
dmesg
καιjournalctl -k
(επίσηςjournalctl --dmesg
). -
Υποδείξτε πού ανήκουν τα ακόλουθα log μηνύματα:
-
Jul 10 13:37:39 debian dbus[303]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
X
/var/log/messages
-
Jul 10 11:23:58 debian kernel: [ 1.923349] usbhid: USB HID core driver
/var/log/auth.log
/var/log/kern.log
X
/var/log/syslog
/var/log/messages
X
Jul 10 14:02:53 debian sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0)
/var/log/auth.log
X
/var/log/kern.log
/var/log/syslog
/var/log/messages
-
Jul 10 11:23:58 debian NetworkManager[322]: <info> [1562750638.8672] NetworkManager (version 1.6.2) is starting…
/var/log/auth.log
/var/log/kern.log
/var/log/syslog
/var/log/messages
X
-
-
Χρησιμοποιήστε το
journalctl
για να λάβετε πληροφορίες σχετικά με τι παρακάτω μονάδες:Μονάδα Εντολή ssh
journalctl -u ssh.service
networking
journalctl -u networking.service
rsyslog
journalctl -u rsyslog.service
cron
journalctl -u cron.service
Απαντήσεις στις Ασκήσεις Εξερεύνησης
-
Επανεξετάστε την έξοδο του
top
από τις καθοδηγούμενες ασκήσεις και απαντήστε στις ακόλουθες ερωτήσεις:-
Ποια δύο βήματα θα ακολουθούσατε για να σκοτώσετε τον web server apache;
Πρώτα, πατήστε
k
· στη συνέχεια δώστε μια τιμήkill
. -
Στην περιοχή σύνοψης, πώς θα μπορούσατε να εμφανίσετε τις πληροφορίες σχετικά με τη φυσική μνήμη και την swap χρησιμοποιώντας γραμμές προόδου;
Πατώντας το
m
μία ή δύο φορές. -
Τώρα, ταξινομήστε τις διαδικασίες κατά χρήση μνήμης:
M
-
Τώρα που έχετε τις πληροφορίες μνήμης να εμφανίζονται με γραμμές προόδου και τα processes ταξινομημένα κατά χρήση μνήμης, αποθηκεύστε αυτές τις διαμορφώσεις ώστε να τις λαμβάνετε ως προεπιλογή την επόμενη φορά που θα χρησιμοποιήσετε το
top
:W
-
Ποιο αρχείο αποθηκεύει τις ρυθμίσεις διαμόρφωσης του
top
; Που βρίσκεται? Πώς μπορείτε να ελέγξετε την ύπαρξή του;Το αρχείο είναι
~/.config/procps/toprc
και βρίσκεται στον αφετηριακό κατάλογο του χρήστη (~
). Δεδομένου ότι είναι ένα κρυφό αρχείο (βρίσκεται σε έναν κατάλογο του οποίου το όνομα αρχίζει με μια τελεία), μπορούμε να ελέγξουμε την ύπαρξή του με τοls -a
(λίστα όλων των αρχείων). Αυτό το αρχείο μπορεί να δημιουργηθεί πατώντας kbd:[Shift+W] ενώ βρίσκεστε στοtop
.
-
-
Μάθετε για την εντολή
exec
στο Bash. Προσπαθήστε να επιδείξετε τη λειτουργικότητά του ξεκινώντας ένα Bash session, βρείτε το process Bash μεps
, και μετά εκτελέστε τοexec /bin/sh
και αναζητήστε ξανά το process με το ίδιο PID.Το
exec
αντικαθιστά ένα process με μια άλλη εντολή. Στο παρακάτω παράδειγμα μπορούμε να δούμε ότι το Bash process αντικαθίσταται από το/bin/sh
(αντί το/bin/sh
να γίνει child process):$ echo $$ 19877 $ ps auxf | grep 19877 | head -1 carol 19877 0.0 0.0 7448 3984 pts/25 Ss 21:17 0:00 \_ bash $ exec /bin/sh sh-5.0$ ps auxf | grep 19877 | head -1 carol 19877 0.0 0.0 7448 3896 pts/25 Ss 21:17 0:00 \_ /bin/sh
-
Ακολουθήστε αυτά τα βήματα για να εξερευνήσετε συμβάντα του πυρήνα και τη δυναμική διαχείριση συσκευών του udev:
-
Συνδέστε μια μονάδα USB στον υπολογιστή σας. Εκτελέστε το
dmesg
και δώστε προσοχή στις τελευταίες γραμμές. Ποια είναι η πιο πρόσφατη γραμμή;Θα πρέπει να πάρετε κάτι σύμφωνα με το
[ 1967.700468] sd 6:0:0:0: [sdb] Attached SCSI removable disk
. -
Έχοντας υπόψη την έξοδο από την προηγούμενη εντολή, εκτελέστε το
ls /dev/sd*
και βεβαιωθείτε ότι η μονάδα USB εμφανίζεται στην λίστα. Ποια είναι η έξοδος;Ανάλογα με τον αριθμό των συσκευών που είναι συνδεδεμένες στο σύστημά σας, θα πρέπει να λάβετε κάτι σαν
/dev/sda /dev/sda1 /dev/sdb /dev/sdb1 /dev/sdb2
. Στην περίπτωση μας, βρίσκουμε την μονάδα USB μας (/dev/sdb
) και τα δύο partitions του (/dev/sdb1
και/dev/sdb2
). -
Τώρα αφαιρέστε τη μονάδα USB και εκτελέστε ξανά το
dmesg
. Πώς διαβάζεται η πιο πρόσφατη γραμμή;Θα πρέπει να πάρετε κάτι σύμφωνα με το
[ 2458.881695] usb 1-9: USB disconnect, device number 6
. -
Εκτελέστε ξανά το
ls /dev/sd*
και βεβαιωθείτε ότι η συσκευή σας εξαφανίστηκε από την λίστα. Ποια είναι η έξοδος;Στην περίπτωση μας,
/dev/sda /dev/sda1
.
-