Linux Ботуши

Както се оказва, няма много в процеса на зареждане:

1. Зареждащото устройство намира изображението на ядрото на disk, зарежда го в паметта и го стартира.
2. Ядрото инициализиране на устройствата и НТИ драйвери.
3. Ядрото монтира главния файлsystem.
4. Ядрото започва първоначален обади да планирате.
5. първоначален поставя останалата част от процесите в движение.
6. Последните процеси, които инициализиращите започва като част от обувка последователност ви позволяват да влезете.

Идентифицирането на всеки етап от процеса на зареждане е безценно при решаването на проблеми при стартиране и разбирането на system като цяло. За да започнете, нулирайте зареждащото устройство, което е началният екран или подканата, която получавате, след като компютърът направи самопроверка при включване, като попита коя операция system да бягам. След като направите избор, зареждащото устройство стартира Linux ядрото, предавайки управлението на system към ядрото.

Има подробно обсъждане на ядрото никъде в тази книга, от която е откъс тази статия. Тази статия покрива етап ядрото инициализация, етапът, когато ядрото отпечатва куп съобщения за хардуера, присъстващ на system. Ядрото стартира init веднага след като изведе съобщение, провъзгласяващо, че ядрото е монтирало корен файлsystem:

VFS: Монтирани root (ext2 файловеsystem) Само за четене.

Скоро след това ще видите съобщение за стартиране на init, последвано от system съобщения за стартиране на услугата и накрая получавате някакъв подкана за вход.

ЗАБЕЛЕЖКА На Кардинал Linux, началната бележка е особено очевидна, защото ви „приветства“ в Red Hat Linux.“ Всички съобщения след това показват успех или неуспех в скоби от дясната страна на екрана.

Повечето от тази глава се занимава с първоначален, Защото това е, когато част от обувка последователност имате най-контрол.
първоначален

Няма нищо специално за init. Това е програма като всяка друга на Linux systemи ще го намерите в / sbin заедно с други system двоични файлове. Основната цел на init е да стартира и спира други програми в определена последователност. Всичко, което трябва да знаете, е как работи тази последователност.

Има няколко различни вариации, но повечето Linux дистрибуциите използват System V стил, обсъден тук. Някои дистрибуции използват по-опростена версия, която наподобява BSD init, но е малко вероятно да се сблъскате с това.

Нива на работа

Във всеки един момент на a Linux system, изпълнява се определен основен набор от процеси. Това състояние на machine се нарича неговото ниво на изпълнение и се обозначава с число от 0 до 6. The system прекарва по-голямата част от времето си на едно ниво. Когато обаче затворите machine down, init превключва на различно ниво на изпълнение, за да прекрати system услуги по подреден начин и да каже на ядрото да спре. Още едно ниво на изпълнение е за един потребител mode, обсъдени по-късно.

Най-лесният начин да се справите с нивата на изпълнение е да разгледате конфигурационния файл на init, /etc/inittab. Потърсете ред като следния:

ID: 5: initdefault:

Този ред означава, че default runlevel на system е 5. Всички редове във файла inittab приемат тази форма, с четири полета, разделени с двоеточие, които се появяват в следния ред:
# A уникален идентификатор (на кратко низ, като например ID в предишния пример)
# The приложимият брой ниво на работа (и)
# Действието, което init трябва да предприеме (в предишния пример, действието е да зададете default ниво на изпълнение до 5)
# A Команда за изпълнение (по избор)

Няма команда за изпълнение в предходния initdefault пример, защото командата няма смисъл в контекста на задаване на default runlevel. Погледнете малко по-надолу в inittab, докато видите ред като този:

l5: 5: изчакайте :/ и т.н. / rc.d / RC 5

Тази линия задейства повечето от system конфигурация и услуги чрез директории rc * .d и init.d. Можете да видите, че init е настроен да изпълнява команда, наречена /etc/rc.d/rc 5, когато е в ниво на изпълнение 5. Действието изчакване казва кога и как init изпълнява командата: run rc 5 веднъж, когато entering runlevel 5 и след това изчакайте тази команда да приключи, преди да направите нещо друго.

Има няколко различни действия в addition към инициалdefault и изчакайте, особено по отношение на управлението на захранването, а ръководството за inittab (5) ви разказва всичко за тях. Тези, които най-вероятно ще срещнете, са обяснени в следващите раздели.

респавуннати

Действието respawn кара init да изпълни командата, която следва, и ако командата завърши изпълнението, да я изпълни отново. Вероятно ще видите нещо подобно на този ред във вашия inittab файл:

1: 2345: респавуннати :/ SBIN / mingetty tty1

Гети програми предоставят покани за влизане. Предходната линия е за първи виртуална конзола (/ сътрудничество / tty1), тази, която виждате, когато натиснете ALT или CONTROL-ALT-F1 F1. The респавуннати действие носи покана за влизане обратно след като излезете.

ctrlдругаде

- ctrlaltdel действие контролира какво system прави, когато натиснете CONTROL-ALT-DELETE на виртуална конзола. На повечето systems, това е някаква команда за рестартиране, използваща командата за изключване.

sysinit

Действието sysinit е първото нещо, което init трябва да стартира, когато се стартира, преди това enterвъв всякакви критерии.

Как процеси в нива на работа начало

Вече сте готови да научите как да инициирате system услуги, точно преди да ви позволи да влезете. Припомнете си тази inittab линия от по-рано:

l5: 5: изчакайте :/ и т.н. / 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

РК 5 команда стартира програми в тази директория ниво на работа, като пуснете GMT ​​команди:

S10sysklogd дома
S12kerneld дома
S15netstd_init дома
S18netbase дома
...
S99sshd дома

Обърнете внимание на началния аргумент във всяка команда. S в името на команда означава, че командата трябва да се изпълнява в началото mode, а числото (00 до 99) определя къде в последователността rc започва командата.

The * RC. D команди са шел скриптове, които обикновено започват програми в / SBIN или / ЮЕсАр / SBIN. Обикновено можете да разберете това, което една от командите всъщност се като погледнете в сценария с по-малко или пейджър друга програма.

Можете да стартирате една от тези услуги на ръка. Например, ако искате ръчно да стартирате програмата за уеб сървър httpd, стартирайте S99httpd start. По същия начин, ако някога се наложи да убиете някоя от услугите, когато machine е включен, можете да изпълните командата в директорията 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 administratorпредпочитат номерата през 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, за да му кажете да превключи нивата на изпълнение, да прочете отново файла inittab или просто да shut down - system. Тъй като init винаги е първият процес на a system, идентификаторът на процеса му винаги е 1.

Можете да управлявате с първоначален telinit. Например, ако искате да преминете към ниво на работа 3, използвайте следната команда:

telinit 3

Когато превключвате нивата на изпълнение, init се опитва да убие всички процеси, които не са във файла inittab за новото ниво на изпълнение. Следователно трябва да внимавате с промяната на нивата на изпълнение.

Когато трябва add или премахнете задания за повторно пораждане или направите друга промяна във файла inittab, трябва да кажете на init за промяната и да го накарате да прочете отново файла. Някои хора използват kill -HUP 1, за да кажат на init да направи това. Този традиционен метод работи на повечето версии на Unix, стига да го въведете правилно. Можете обаче да изпълните и тази команда telinit:

telinit р

Можете също да използвате telinit s, за да превключите към единичен потребител mode.

Изключване

init също контролира как system изключва се и се рестартира. Правилният начин да shut down a Linux machine е да използвате командата за изключване.

Има два основни начина за използване на изключване. Ако спрете system, той затваря macHine надолу и го държи надолу. За да направите macнезабавно спрете, използвайте тази команда:

изключване-з сега

На повечето modern macсъчетава сравнително скорошни версии на Linux, спирането прекъсва захранването на machine. Можете също да рестартирате machine. За рестартиране използвайте -r вместо -h.

Процесът на изключване отнема няколко секунди. Никога не трябва да рестартирате или изключвате a machine през този етап.

В предишния пример сега е моментът да shut down. Този аргумент е задължителен, но има много начини за неговото уточняване. Ако искате machine да слезе някъде в бъдещето, един от начините е да използвате + n, където n е броят минути, които изключването трябва да изчака, преди да свърши работата си. За други options, вижте страницата с ръководството за изключване (8).

За да направите system рестартирайте след 10 минути, изпълнете тази команда:

изключване-R + 10

On Linux, изключването уведомява всеки влязъл, че machine пада, но не върши реална работа. Ако посочите време, различно от сега, изключването създава файл, наречен /etc/nologin. Когато този файл присъства, system забранява влизанията от никого, с изключение на суперпотребителя.

Кога system времето за изключване най-накрая пристига, изключването казва на init да превключи на ниво 0 за спиране и ниво 6 за рестартиране. Когато инициира enters runlevel 0 или 6, се извършва всичко по-долу, което можете да проверите, като разгледате скриптите вътре rc0.d и rc6.d:

1. първоначален убива всеки процес, че да може (както ако би преминаване към всяка друга ниво на работа).

# Първоначалните команди rc0.d / rc6.d се изпълняват, заключват system файлове на място и извършване на други подготовки за изключване.
# Следващите команди rc0.d/rc6.d демонтират всички файловеsystems, различни от корен.
# Допълнителни команди rc0.d/rc6.d монтират отново основния файлsystem Само за четене.
# Още повече команди rc0.d/rc6.d записват всички буферирани данни във файлаsystem с програмата за синхронизиране.
# Окончателните rc0.d / rc6.d команди казва на ядрото да се рестартира или да спре с рестартиране, спиране, или изключен двигател програма.

Програмите за рестартиране и спиране се държат по различен начин за всяко ниво на изпълнение, което може да доведе до объркване. от default, тези програми извикват изключване с -r или -h options, но ако system вече е на нивото на спиране или рестартиране, програмите казват на ядрото да се изключи незабавно. Ако наистина искате да затворите вашия macзабързайте бързо (пренебрегвайки всякакви възможни щети от неправилно изключване), използвайте опцията -f.

Като пасиониран по технологии, пиша с удоволствие в StealthSettings.com от 2006 г. Имам обширен опит с операционни системи: macOS, Windows и Linux, както и с програмни езици и платформи за блогове (WordPress) и онлайн магазини (WooCommerce, Magento, PrestaShop).

Оставете коментар