Linux Ботуши

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

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

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

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

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

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

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

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

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

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

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

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

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

ID: 5: initdefault:

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

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

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

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

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

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

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

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

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

ctrlдругаде

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

sysinit

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

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

Вече сте готови да научите как init стартира системните услуги, точно преди да ви позволи да влезете. Спомнете си този 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 в името на команда означава, че командата трябва да се изпълнява в режим на стартиране, а числото (00 до 99) определя къде в последователността rc стартира командата.

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

Можете да стартирате една от тези услуги на ръка. Например, ако искате да стартирате ръчно httpd уеб сървърната програма, стартирайте S99httpd start. По същия начин, ако някога трябва да убиете една от услугите, когато машината е включена, можете да изпълните командата в директорията rc*.d с аргумента stop (S99httpd stop, например).

Някои rc*.d директории съдържат команди, които започват с K (за "kill" или стоп режим). В този случай rc изпълнява командата с аргумента stop вместо start. Най-вероятно ще срещнете K команди в нива на изпълнение, които изключват системата.

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, а по-скоро добавете долна черта (_) в началото на името на връзката по следния начин:

MV S99httpd _S99httpd

По време на зареждане rc игнорира _S99httpd, защото не започва със S или K. Освен това, оригиналното име все още е очевидно и имате бърз достъп до командата, ако сте в крачка и трябва да я стартирате на ръка.

За да добавите услуга, трябва да създадете скрипт като другите в директорията init.d и след това да направите символна връзка в правилната директория rc*.d. Най-лесният начин да напишете скрипт е да прегледате скриптовете, които вече са в init.d, да направите копие на такъв, който разбирате, и да промените копието.

Когато добавяте услуга, уверете се, че сте избрали подходящо място в последователността на зареждане, за да стартирате услугата. Ако услугата започне твърде рано, тя може да не работи поради зависимост от друга услуга. За несъществени услуги повечето системни администратори предпочитат номера от 90-те, след повечето услуги, които идват със системата.

Linux дистрибуциите обикновено идват с команда за активиране и деактивиране на услуги в директориите rc * .d. Например в Debian командата е update-rc.d и в Red Hat Linux, командата е chkconfig. Налични са и графични потребителски интерфейси. Използването на тези програми помага да се поддържат последователни директориите за стартиране и помага при надграждане.

Подхвърлям: Един от най-често срещаните Linux проблемите с инсталацията е неправилно конфигуриран XFree86 сървър, който се включва и изключва, което прави системата неизползваема на конзолата. За да спрете това поведение, стартирайте в режим за един потребител и променете вашето ниво на изпълнение или услуги на ниво на изпълнение. Потърсете нещо, което съдържа xdm, gdm или kdm във вашите директории rc*.d или вашия /etc/inittab.

Контрол първоначален

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

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

telinit 3

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

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

telinit р

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

Изключване

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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