Μπότες Linux

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

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

Ο προσδιορισμός κάθε στάδιο της διαδικασίας εκκίνησης είναι ανεκτίμητη σε καθορισμό των προβλημάτων εκκίνησης και την κατανόηση του συστήματος στο σύνολό του. Για να ξεκινήσετε, το μηδέν για το φορτωτή εκκίνησης, η οποία είναι η αρχική οθόνη ή να σας ζητήσει να πάρει μετά από τον υπολογιστή δεν ΣΜΝ power-on self-test, ζητώντας Ποιο λειτουργικό σύστημα για να τρέξει. Αφού κάνετε την επιλογή, ο φορτωτής εκκίνησης τρέχει τον πυρήνα του Linux, Παράδοση του ελέγχου του συστήματος στον πυρήνα.

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

VFS: Mounted ρίζα (ext2 fileσύστημα) μόνο για ανάγνωση.

Αμέσως μετά, θα εμφανιστεί ένα μήνυμα για init εκκίνηση, ΑΚΟΛΟΥΘΟΥΜΕΝΗ ΑΠΟ μηνύματα εκκίνησης του συστήματος παροχής υπηρεσιών, και, τέλος, θα έχετε την προτροπή κάποιου είδους.

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

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

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

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

runlevels

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

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

id: 5: initdefault:

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

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

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

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

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

respawn

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

1: 2345: respawn: / sbin / mingetty tty1

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

ctrlaltdel

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

sysinit

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

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

Τώρα είστε έτοιμοι να μάθετε πώς init ξεκινά τις υπηρεσίες του συστήματος, μόνο το πριν σας επιτρέπει να συνδεθείτε. Θυμηθείτε αυτό το 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 σε ένα μέσο όνομα της εντολής που θα πρέπει να εκτελέσετε την εντολή σε κατάσταση εκκίνησης, καθώς και τον αριθμό (00 μέσω 99) καθορίζει ΠΟΥ στην ακολουθία rc ξεκινά την εντολή.

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

Μπορείτε να Μια από αυτές τις υπηρεσίες ξεκινούν με το χέρι. Για παράδειγμα, αν θέλετε να ξεκινήσετε το Web httpd λογισμικό διακομιστή χειροκίνητα, εκτελέστε σπίτι S99httpd. Ομοίως, εάν ποτέ χρειαστεί να σκοτώσει μία από τις υπηρεσίες Όταν η μηχανή είναι ενεργοποιημένη, μπορείτε να εκτελέσετε την εντολή στο rc *. Δ κατάλογο με το επιχείρημα στάση (στάση S99httpd, για παράδειγμα).

Μερικοί * rc. Καταλόγους Α που περιέχουν εντολές αρχίζουν με K (για "kill", ή σταματάτε τη λειτουργία). Σε αυτή την περίπτωση, rc τρέχει την εντολή με το επιχείρημα ΑΝΤΙ στάση του σπιτιού. Είστε πιο πιθανό να αντιμετωπίσουν τις εντολές Κ σε runlevels που κλείνουν το σύστημα προς τα κάτω.

Προσθέτοντας και αφαιρώντας τις υπηρεσίες

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

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

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

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

mv _S99httpd S99httpd

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

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

Όταν προσθέτετε μια υπηρεσία, βεβαιωθείτε ότι έχετε επιλέξει Εκείνη τη χρονιά ΑΠΑΙΤΕΙΤΑΙ όπως στην ακολουθία εκκίνησης για να ξεκινήσει η υπηρεσία. Εάν η υπηρεσία ξεκινά πολύ σύντομα, μπορεί να μην λειτουργήσει, εξαιτίας της εξάρτησης από κάποια άλλη υπηρεσία. Για μη ουσιωδών υπηρεσιών, οι περισσότεροι διαχειριστές συστημάτων προτιμούν αριθμούς στα 90s, αφού οι περισσότερες από τις υπηρεσίες που cam με το σύστημα.

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

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

Έλεγχος init

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

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

telinit 3

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

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

telinit q

Μπορείτε επίσης να χρησιμοποιήσετε telinit s για να μεταβείτε σε κατάσταση λειτουργίας ενός χρήστη.

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

Επίσης, το init ελέγχει πως το σύστημα κλείνει και επανεκκινήσεις. Ο σωστός τρόπος για να κλείσει ένα μηχάνημα Linux είναι να χρησιμοποιήσετε την εντολή shutdown.

Υπάρχουν δύο βασικοί τρόποι για να χρησιμοποιήσετε τον τερματισμό λειτουργίας. Αν σταματήσει το σύστημα, κλείνει το μηχάνημα κάτω και κρατά τα κάτω. Για να σταματήσει το μηχάνημα αμέσως, χρησιμοποιήστε αυτήν την εντολή:

shutdown-h now

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

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

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

Για να γίνει η επανεκκίνηση του συστήματος 10 λεπτά, εκτελέστε την εντολή:

shutdown-r + 10

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

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

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

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

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

Μπότες Linux

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