Linux Μπότες

Όπως αποδεικνύεται, δεν υπάρχουν πολλά στη διαδικασία εκκίνησης:

1. Ένας φορτωτής εκκίνησης βρίσκει την εικόνα του πυρήνα στο disk, το φορτώνει στη μνήμη και το ξεκινά.
2. Ο πυρήνας αρχικοποίηση των συσκευών και STI οδηγούς.
3. Ο πυρήνας προσαρτά το αρχείο ρίζαςsystem.
4. Ο πυρήνας ξεκινά init Ονομάζεται να προγραμματίσετε.
5. init θέτει το υπόλοιπο των διαδικασιών σε κίνηση.
6. Οι τελευταίες διεργασίες που init ξεκινά ως μέρος της ακολουθίας εκκίνησης σας επιτρέπει να συνδεθείτε.

Ο προσδιορισμός κάθε σταδίου της διαδικασίας εκκίνησης είναι πολύτιμος για την επίλυση προβλημάτων εκκίνησης και την κατανόηση του system συνολικά. Για να ξεκινήσετε, μηδενίστε στο φορτωτή εκκίνησης, που είναι η αρχική οθόνη ή σας ζητά να λάβετε αφού ο υπολογιστής ενεργοποιήσει τον αυτόματο έλεγχο, ρωτώντας ποια λειτουργία system τρέχω. Αφού κάνετε μια επιλογή, ο φορτωτής εκκίνησης εκτελεί το Linux πυρήνα, που δίνει τον έλεγχο του system στον πυρήνα.

Υπάρχει μια λεπτομερή συζήτηση του πυρήνα Αλλού σε αυτό το βιβλίο από το οποίο αυτό το άρθρο είναι απόσπασμα. Το άρθρο αυτό καλύπτει το πυρήνα στάδιο προετοιμασίας, το στάδιο όπου ο πυρήνας εκτυπώνει μια δέσμη μηνυμάτων σχετικά με το υλικό που υπάρχει στο system. Ο πυρήνας ξεκινά init αμέσως μόλις εμφανίσει ένα μήνυμα που δηλώνει ότι ο πυρήνας έχει τοποθετήσει το root αρχείοsystem:

VFS: Mounted root (αρχεία ext2system) μόνο για ανάγνωση.

Λίγο αργότερα, θα δείτε ένα μήνυμα σχετικά με την έναρξη του init, ακολουθούμενο από το system μηνύματα εκκίνησης υπηρεσίας και, τέλος, λαμβάνετε ένα είδος προτροπής σύνδεσης.

ΣΗΜΕΊΩΣΗ Επί Red Hat Linux, η αρχική νότα είναι ιδιαίτερα εμφανής, γιατί σας «καλωσορίζει» στο Red Hat Linux.» Όλα τα μηνύματα στη συνέχεια δείχνουν επιτυχία ή αποτυχία σε αγκύλες στη δεξιά πλευρά της οθόνης.

Το μεγαλύτερο μέρος αυτού του κεφαλαίου ασχολείται με init, γιατί είναι το μέρος της ακολουθίας εκκίνησης όπου έχετε την πιο ελέγχου.
init

Δεν υπάρχει τίποτα ιδιαίτερο στο init. Είναι ένα πρόγραμμα όπως όλα τα άλλα στο Linux systemκαι θα το βρείτε στο / sbin μαζί με άλλα system δυαδικά αρχεία. Ο κύριος σκοπός του init είναι να ξεκινήσει και να σταματήσει άλλα προγράμματα σε μια συγκεκριμένη σειρά. Το μόνο που πρέπει να γνωρίζετε είναι πώς λειτουργεί αυτή η ακολουθία.

Υπάρχουν μερικές διαφορετικές παραλλαγές, αλλά οι περισσότερες Linux διανομές χρησιμοποιούν το System Το στυλ V συζητήθηκε εδώ. Ορισμένες διανομές χρησιμοποιούν μια απλούστερη έκδοση που μοιάζει με το BSD init, αλλά είναι απίθανο να το αντιμετωπίσετε.

runlevels

Σε οποιαδήποτε δεδομένη στιγμή σε α Linux system, εκτελείται ένα συγκεκριμένο σύνολο βασικών διεργασιών. Αυτή η κατάσταση του macΤο hine ονομάζεται runlevel του και συμβολίζεται με έναν αριθμό από 0 έως 6. Το system περνά τον περισσότερο χρόνο του σε ένα μόνο επίπεδο. Ωστόσο, όταν κλείσετε το macκάτω, το init αλλάζει σε διαφορετικό επίπεδο για να τερματίσει το system υπηρεσίες με τακτοποιημένο τρόπο και να πει στον πυρήνα να σταματήσει. Ένα ακόμη επίπεδο εκτέλεσης είναι για έναν χρήστη mode, συζητήθηκε αργότερα.

Ο ευκολότερος τρόπος για να πάρετε μια λαβή σε επίπεδα εκτέλεσης είναι να εξετάσετε το αρχείο διαμόρφωσης init, /etc/inittab. Αναζητήστε μια γραμμή όπως η παρακάτω:

ID: 5: initdefault:

Αυτή η γραμμή σημαίνει ότι το default runlevel στο system είναι 5. Όλες οι γραμμές στο αρχείο inittab έχουν αυτή τη μορφή, με τέσσερα πεδία που χωρίζονται με άνω και κάτω τελεία με την ακόλουθη σειρά:
# Ένα μοναδικό αναγνωριστικό (σε μικρή κλωστή, όπως η ταυτότητα στο προηγούμενο παράδειγμα)
# Ο αριθμός ισχύει runlevel (s)
# Η ενέργεια που πρέπει να κάνει το init (στο προηγούμενο παράδειγμα, η ενέργεια είναι να ρυθμίσετε το default runlevel έως 5)
# Μια εντολή να εκτελέσει (προαιρετικό)

Δεν υπάρχει εντολή για εκτέλεση στο προηγούμενο initdefault παράδειγμα, επειδή μια εντολή δεν έχει νόημα στο πλαίσιο της ρύθμισης του default επίπεδο. Κοιτάξτε λίγο πιο κάτω στο inittab, μέχρι να δείτε μια γραμμή όπως αυτή:

l5: 5: περιμένετε: /etc/rc.d/rc 5

Αυτή η γραμμή ενεργοποιεί το μεγαλύτερο μέρος του system διαμόρφωση και υπηρεσίες μέσω των καταλόγων rc * .d και init.d. Μπορείτε να δείτε ότι το init έχει ρυθμιστεί να εκτελεί μια εντολή που ονομάζεται /etc/rc.d/rc 5 όταν βρίσκεται στο runlevel 5. Η ενέργεια αναμονής λέει πότε και πώς το init εκτελεί την εντολή: τρέξτε rc 5 μία φορά όταν enterμε το runlevel 5 και, στη συνέχεια, περιμένετε να ολοκληρωθεί αυτή η εντολή πριν κάνετε οτιδήποτε άλλο.

Υπάρχουν πολλές διαφορετικές ενέργειες στο addστο initdefault και περιμένετε, ειδικά όσον αφορά τη διαχείριση ενέργειας, και η σελίδα εγχειριδίων inittab (5) σας λέει όλα σχετικά. Αυτά που πιθανότατα θα συναντήσετε εξηγούνται στις ακόλουθες ενότητες.

respawn

Η ενέργεια respawn αναγκάζει το init να εκτελέσει την εντολή που ακολουθεί, και αν τελειώσει η εκτέλεση της εντολής, να την εκτελέσει ξανά. Είναι πιθανό να δείτε κάτι παρόμοιο με αυτήν τη γραμμή στο αρχείο inittab:

1: 2345: respawn: / sbin / mingetty tty1

Τα Προγράμματα Getty Παροχή σύνδεσης προτροπές. Η προηγούμενη γραμμή είναι για την πρώτη εικονική κονσόλα (/ dev / tty1), το ένα θα δείτε το όταν πατήσετε ALT-CONTROL-ALT-F1 ή F1. Η δράση respawn φέρνει πίσω την προτροπή login μετά την έξοδό σας.

ctrlαλλού-κάπου αλλού

Η ctrlΗ δράση altdel ελέγχει τι system κάνει όταν πατάτε CONTROL-ALT-DELETE σε μια εικονική κονσόλα. Στις περισσότερες systemΑυτή είναι μια εντολή επανεκκίνησης χρησιμοποιώντας την εντολή τερματισμού.

sysinit

Η δράση sysinit είναι το πρώτο πράγμα που πρέπει να τρέχει το init όταν ξεκινά, πριν enterσε οποιοδήποτε επίπεδο.

Πώς Διεργασίες σε επίπεδα εκτέλεσης ξεκινήσετε

Τώρα είστε έτοιμοι να μάθετε πώς να ξεκινήσετε το system υπηρεσίες, λίγο πριν σας επιτρέψει να συνδεθείτε. Θυμηθείτε αυτήν την inittab γραμμή από νωρίτερα:

l5: 5: περιμένετε: /etc/rc.d/rc 5

Αυτή η μικρή γραμμή προκαλεί πολλά άλλα προγράμματα. rc σημαίνει εντολές εκτέλεσης, και θα ακούσετε άνθρωποι αναφέρονται στις εντολές όπως χειρόγραφα, προγράμματα ή υπηρεσίες. Έτσι, όπου οι εντολές αυτές, ούτως ή άλλως;

Για το επίπεδο runlevel 5, σε αυτό το παράδειγμα, οι εντολές είναι πιθανώς είτε στο /etc/rc.d/rc5.d είτε στο /etc/rc5.d. Το Runlevel 1 χρησιμοποιεί rc1.d, το runlevel 2 χρησιμοποιεί rc2.d και ούτω καθεξής. Ίσως βρείτε τα ακόλουθα items στον κατάλογο rc5.d:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron

Η εντολή rc 5 ξεκινά προγράμματα σε αυτό το runlevel κατάλογο εκτελώντας τις εντολές Μετά:

S10sysklogd σπίτι
S12kerneld σπίτι
S15netstd_init σπίτι
S18netbase σπίτι
...
S99sshd σπίτι

Παρατηρήστε το όρισμα έναρξης σε κάθε εντολή. Το S στο όνομα μιας εντολής σημαίνει ότι η εντολή πρέπει να εκτελείται στην αρχή mode, και ο αριθμός (00 έως 99) καθορίζει πού στην ακολουθία ξεκινά η εντολή rc.

Το rc *. D εντολές Έναρξη Συνήθως τα προγράμματα που τα scripts στο / sbin ή / usr / sbin. Κανονικά, μπορείτε να υπολογίσετε τι μία από τις εντολές δεν πραγματικά κοιτάζοντας το σενάριο με λιγότερο ή pager άλλο πρόγραμμα.

Μπορείτε να ξεκινήσετε μία από αυτές τις υπηρεσίες με το χέρι. Για παράδειγμα, εάν θέλετε να ξεκινήσετε το πρόγραμμα διακομιστή Web httpd με μη αυτόματο τρόπο, εκτελέστε το S99httpd start. Παρομοίως, εάν χρειαστεί να σκοτώσετε μία από τις υπηρεσίες όταν το macΤο hine είναι ενεργοποιημένο, μπορείτε να εκτελέσετε την εντολή στον κατάλογο rc * .d με το όρισμα stop (S99httpd stop, για παράδειγμα).

Ορισμένοι κατάλογοι rc*.d περιέχουν εντολές που ξεκινούν με K (για "kill" ή stop mode). Σε αυτήν την περίπτωση, το rc εκτελεί την εντολή με το όρισμα stop αντί για start. Είναι πολύ πιθανό να συναντήσετε εντολές K σε επίπεδα εκτέλεσης που κλείνουν το system προς τα κάτω.

Addυπηρεσίες αφαίρεσης και αφαίρεσης

Αν θέλεις add, διαγράψτε ή τροποποιήστε τις υπηρεσίες στους καταλόγους rc*.d, πρέπει να ρίξετε μια πιο προσεκτική ματιά στα αρχεία που βρίσκονται μέσα. Μια μακρά λίστα αποκαλύπτει μια δομή όπως αυτή:

lrwxrwxrwx. . . S10sysklogd -> .. / init.d / sysklogd
lrwxrwxrwx. . . S12kerneld -> .. / init.d / kerneld
lrwxrwxrwx. . . S15netstd_init -> .. / init.d / netstd_init
lrwxrwxrwx. . . S18netbase -> .. / init.d / netbase
...

Οι εντολές σε έναν κατάλογο rc*.d είναι στην πραγματικότητα συμβολικοί σύνδεσμοι προς αρχεία σε έναν κατάλογο init.d, συνήθως στο /etc ή /etc/rc.d. Linux Οι διανομές περιέχουν αυτούς τους συνδέσμους, ώστε να μπορούν να χρησιμοποιούν τα ίδια σενάρια εκκίνησης για όλα τα επίπεδα εκτέλεσης. Αυτή η σύμβαση δεν είναι σε καμία περίπτωση απαίτηση, αλλά συχνά κάνει την οργάνωση λίγο πιο εύκολη.

Για να αποτρέψετε την εκτέλεση μιας από τις εντολές στον κατάλογο init.d σε ένα συγκεκριμένο επίπεδο εκτέλεσης, ίσως σκεφτείτε να καταργήσετε τον συμβολικό σύνδεσμο στον κατάλληλο κατάλογο rc * .d. Αυτό λειτουργεί, αλλά αν κάνετε κάποιο λάθος και χρειαστεί να επαναφέρετε τον σύνδεσμο στη θέση του, ενδέχεται να έχετε πρόβλημα να θυμηθείτε το ακριβές όνομα του συνδέσμου. Επομένως, δεν πρέπει να καταργήσετε συνδέσμους στους καταλόγους rc * .d, αλλά μάλλον, add μια υπογράμμιση (_) στην αρχή του ονόματος συνδέσμου ως εξής:

mv _S99httpd S99httpd

Κατά την εκκίνηση, το rc αγνοεί το _S99httpd επειδή δεν ξεκινά με το S ή το K. Επιπλέον, το αρχικό όνομα είναι ακόμα προφανές και έχετε γρήγορη πρόσβαση στην εντολή εάν βρίσκεστε σε μια πρέζα και πρέπει να την ξεκινήσετε με το χέρι.

Προς την add μια υπηρεσία, πρέπει να δημιουργήσετε ένα σενάριο όπως τα άλλα στον κατάλογο init.d και, στη συνέχεια, να δημιουργήσετε έναν συμβολικό σύνδεσμο στον σωστό κατάλογο rc * .d. Ο ευκολότερος τρόπος για να γράψετε ένα σενάριο είναι να εξετάσετε τα σενάρια που υπάρχουν ήδη στο init.d, να δημιουργήσετε ένα αντίγραφο ενός που κατανοείτε και να τροποποιήσετε το αντίγραφο.

Όταν addσε μια υπηρεσία, βεβαιωθείτε ότι έχετε επιλέξει ένα κατάλληλο μέρος στην ακολουθία εκκίνησης για να ξεκινήσετε την υπηρεσία. Εάν η υπηρεσία ξεκινήσει πολύ νωρίς, ενδέχεται να μην λειτουργεί, λόγω εξάρτησης από κάποια άλλη υπηρεσία. Για μη απαραίτητες υπηρεσίες, οι περισσότεροι systems administrators προτιμούν νούμερα στη δεκαετία του '90, μετά τις περισσότερες από τις υπηρεσίες που συνοδεύουν το system.

Linux Οι διανομές συνήθως συνοδεύονται από μια εντολή για ενεργοποίηση και απενεργοποίηση υπηρεσιών στους καταλόγους rc * .d. Για παράδειγμα, στο Debian, η εντολή είναι update-rc.d, και στο Red Hat Linux, η εντολή είναι chkconfig. Διατίθενται επίσης γραφικές διεπαφές χρήστη. Η χρήση αυτών των προγραμμάτων βοηθά στη διατήρηση της συνοχής των καταλόγων εκκίνησης και βοηθά στις αναβαθμίσεις.

ΥΠΟΔΕΙΞΗ: Ένα από τα πιο συνηθισμένα Linux installΤα προβλήματα πληροφοριών είναι ένας διακομιστής XFree86 που δεν έχει ρυθμιστεί σωστά και ενεργοποιείται και απενεργοποιείται, κάνοντας το system άχρηστο στις κονσόλες. Για να σταματήσετε αυτήν τη συμπεριφορά, εκκινήστε σε έναν χρήστη mode και να τροποποιήσετε τις υπηρεσίες επιπέδου εκτέλεσης ή επιπέδου εκτέλεσης. Αναζητήστε κάτι που περιέχει xdm, gdm ή kdm στους καταλόγους σας rc*.d ή στο /etc/inittab.

Έλεγχος init

Περιστασιακά, πρέπει να δώσετε στο init μια μικρή κλωτσιά για να του πείτε να αλλάξει επίπεδα εκτέλεσης, να διαβάσει ξανά το αρχείο inittab ή απλώς να shut down ο system. Επειδή το init είναι πάντα η πρώτη διαδικασία σε ένα system, το αναγνωριστικό της διαδικασίας είναι πάντα 1.

Μπορείτε να ελέγξετε init με σέλινο. Για παράδειγμα, αν θέλετε να μεταβείτε σε runlevel 3, χρησιμοποιήστε αυτήν την εντολή:

telinit 3

Κατά την εναλλαγή επιπέδων εκτέλεσης, το init προσπαθεί να εξοντώσει τυχόν διεργασίες που δεν βρίσκονται στο αρχείο inittab για το νέο επίπεδο εκτέλεσης. Επομένως, θα πρέπει να είστε προσεκτικοί σχετικά με την αλλαγή των επιπέδων εκτέλεσης.

Όταν πρέπει να add ή να καταργήσετε εργασίες επαναδημιουργίας ή να κάνετε οποιαδήποτε άλλη αλλαγή στο αρχείο inittab, πρέπει να ενημερώσετε το init για την αλλαγή και να το αναγκάσετε να διαβάσει ξανά το αρχείο. Μερικοί άνθρωποι χρησιμοποιούν kill -HUP 1 για να πει στην αρχή να το κάνει αυτό. Αυτή η παραδοσιακή μέθοδος λειτουργεί στις περισσότερες εκδόσεις του Unix, αρκεί να την πληκτρολογήσετε σωστά. Ωστόσο, μπορείτε επίσης να εκτελέσετε αυτήν την εντολή telinit:

telinit q

Μπορείτε επίσης να χρησιμοποιήσετε το telinit s για να μεταβείτε σε έναν χρήστη mode.

Τερματισμός λειτουργίας

Το init ελέγχει επίσης πώς το system τερματίζεται και επανεκκινείται. Ο σωστός τρόπος να shut down a Linux macHine είναι να χρησιμοποιήσετε την εντολή τερματισμού.

Υπάρχουν δύο βασικοί τρόποι χρήσης του τερματισμού. Εάν σταματήσετε το system, κλείνει το macκουδουνίζει κάτω και το κρατάει κάτω. Για να φτιάξετε το macσταματήστε αμέσως, χρησιμοποιήστε αυτήν την εντολή:

shutdown-h now

Στις περισσότερες modern macυπαινίσσεται λογικά πρόσφατες εκδόσεις του Linux, μια διακοπή κόβει το ρεύμα στο macγεια σου. Μπορείτε επίσης να επανεκκινήσετε το macγεια σου. Για επανεκκίνηση, χρησιμοποιήστε -r αντί για -h.

Η διαδικασία τερματισμού διαρκεί αρκετά δευτερόλεπτα. Δεν πρέπει ποτέ να επαναφέρετε ή να απενεργοποιήσετε a macκουκούλα κατά τη διάρκεια αυτού του σταδίου.

Στο προηγούμενο παράδειγμα, τώρα είναι η ώρα να shut down. Αυτό το επιχείρημα είναι υποχρεωτικό, αλλά υπάρχουν πολλοί τρόποι προσδιορισμού του. Εάν θέλετε το machine για να μειωθεί κάποια στιγμή στο μέλλον, ένας τρόπος είναι να χρησιμοποιήσετε το + n, όπου n είναι ο αριθμός των λεπτών που θα πρέπει να περιμένει ο τερματισμός λειτουργίας πριν εκτελέσει τη δουλειά του. Για άλλους options, δείτε τη σελίδα εγχειριδίου τερματισμού λειτουργίας (8).

Για να κάνετε το system επανεκκινήστε σε 10 λεπτά, εκτελέστε αυτήν την εντολή:

shutdown-r + 10

On Linux, ο τερματισμός ειδοποιεί οποιονδήποτε είναι συνδεδεμένος ότι το macΤο hine μειώνεται, αλλά κάνει ελάχιστη πραγματική δουλειά. Εάν καθορίσετε χρόνο διαφορετικό από τώρα, το shutdown δημιουργεί ένα αρχείο που ονομάζεται /etc/nologin. Όταν υπάρχει αυτό το αρχείο, το system απαγορεύει τη σύνδεση από οποιονδήποτε εκτός από τον υπερχρήστη.

Όταν system Ο χρόνος τερματισμού φτάνει τελικά, το κλείσιμο λέει init να μεταβεί στο επίπεδο runlevel 0 για διακοπή και το επίπεδο runlevel 6 για επανεκκίνηση. Όταν είναι init enters runlevel 0 ή 6, πραγματοποιούνται όλα τα ακόλουθα, τα οποία μπορείτε να επαληθεύσετε κοιτάζοντας τα σενάρια μέσα στα rc0.d και rc6.d:

1. init σκοτώνει κάθε διαδικασία που μπορεί (όπως όταν στραφούν σε οποιαδήποτε άλλη runlevel).

# Οι αρχικές εντολές rc0.d / rc6.d εκτελούνται, κλειδώνουν system αρχεία στη θέση τους και κάνοντας άλλες προετοιμασίες για τερματισμό λειτουργίας.
# Οι επόμενες εντολές rc0.d/rc6.d αποπροσάρτηση όλων των αρχείωνsystemεκτός από τη ρίζα.
# Περαιτέρω εντολές rc0.d/rc6.d επαναπροσαρτούν το ριζικό αρχείοsystem μόνο για ανάγνωση.
# Ακόμα περισσότερες εντολές rc0.d/rc6.d γράφουν όλα τα δεδομένα προσωρινής αποθήκευσης στο αρχείοsystem με το πρόγραμμα συγχρονισμού.
# Οι τελικές rc0.d / rc6.d εντολές ενημερώσετε τον πυρήνα για επανεκκίνηση ή να σταματήσει με την επανεκκίνηση, διακοπή, ή poweroff πρόγραμμα.

Τα προγράμματα επανεκκίνησης και διακοπής συμπεριφέρονται διαφορετικά για κάθε επίπεδο εκτέλεσης, προκαλώντας δυνητικά σύγχυση. με default, αυτά τα προγράμματα καλούν τον τερματισμό λειτουργίας με το -r ή -h options, αλλά εάν το system βρίσκεται ήδη στο runlevel διακοπής ή επανεκκίνησης, τα προγράμματα λένε στον πυρήνα να κλείσει αμέσως. Εάν θέλετε πραγματικά να κλείσετε το macσκουπίστε βιαστικά (αγνοώντας οποιαδήποτε πιθανή ζημιά από μια απρόσκοπτη διακοπή λειτουργίας), χρησιμοποιήστε την επιλογή -f.

Παθιασμένος με την τεχνολογία, γράφω με ευχαρίστηση StealthSettings.com από το 2006. Έχω μεγάλη εμπειρία σε λειτουργικά συστήματα: macOS, Windows και Linux, αλλά και σε γλώσσες προγραμματισμού και πλατφόρμες blogging (WordPress) και για ηλεκτρονικά καταστήματα (WooCommerce, Magento, PrestaShop).

Αφήστε ένα σχόλιο