Μπότες Linux

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

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

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

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

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

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

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

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

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

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

runlevels

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

Ο ευκολότερος τρόπος για να πάρετε μια λαβή για runlevels είναι να εξετάσει το αρχείο ρυθμίσεων init, το / etc / inittab. Ψάξτε για μια γραμμή όπως GMT:

id: 5: initdefault:

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

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

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

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

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

respawn

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

1: 2345: respawn: / sbin / mingetty tty1

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

ctrlaltdel

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

sysinit

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

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

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

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

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

Για runlevel 5, σε αυτό το παράδειγμα, οι εντολές έχουν κατά πάσα πιθανότητα είτε στο αρχείο / etc / rc.d / rc5.d ή / etc / rc5.d. 1 runlevel χρησιμοποιεί rc1.d, runlevel 2 χρήσεις rc2.d, και ούτω καθεξής. Μπορείτε να βρείτε τα ακόλουθα στοιχεία στο 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, θα πρέπει να ρίξουμε μια πιο προσεκτική ματιά στα αρχεία μέσα. Μια μεγάλη επιχείρηση αποκαλύπτει μια δομή σαν αυτό:

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 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

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

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

telinit 3

Όταν αλλάζετε runlevels, init προσπαθεί να σκοτώσει οποιαδήποτε διαδικασίες που aren'ta στο αρχείο inittab για τη νέα runlevel. Ως εκ τούτου, πρέπει να είστε προσεκτικοί σχετικά με την αλλαγή runlevels.

Όταν χρειάζεται να προσθέσετε ή κατάργηση respawning θέσεις εργασίας ή να κάνει οποιαδήποτε άλλη αλλαγή στο αρχείο inittab, θα πρέπει να πω init για την αλλαγή και να την κάνουν να ξαναδιαβάσει το αρχείο. Μερικοί άνθρωποι χρησιμοποιούν 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, κλείσιμο ειδοποιεί κάποιος συνδεθεί σε αυτό το μηχάνημα πηγαίνει κάτω, όμως, κάνει λίγη πραγματική δουλειά. Εάν καθορίσετε ένα χρόνο, εκτός από τώρα, ονομάζεται κλείσιμο Δημιουργεί το αρχείο / etc / nologin. Όταν το αρχείο είναι παρόν, το σύστημα απαγορεύει συνδέσεις από κανέναν εκτός από τον υπερχρήστη.

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

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

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

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

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

Αυτός ο ιστότοπος χρησιμοποιεί το Akismet για να μειώσει το spam. Μάθετε πώς επεξεργάζονται τα δεδομένα των σχολίων σας.