Вътрешно устройство на Linux. Книга „Вътрешни елементи на Linux“

Вътрешни елементи на LinuxБраян Уорд

(Все още няма оценки)

Заглавие: Linux Internals

За книгата Linux Internals от Brian Ward

Операционната система Linux е достойна алтернатива на Windows, някои версии на която не са много удобни и са твърде „тежки“ за компютърните ресурси. Браян Уорд е написал удивителна книга за самопомощ, която е подходяща за всеки, който иска да се запознае с тази система и нейните богати възможности почти от нулата. Четенето на книгата „Linux Internals“ се препоръчва за тези, които искат да се задълбочат във всички механизми на ядрото на Linux, да разберат неговата вътрешна структура и философия. Тази работа не е подходяща за повърхностно изучаване на принципите на работа и прехвърляне на шаблонни схеми от една операционна система в друга.

Тази книга ще представлява интерес за широк кръг читатели - както за компютърни специалисти, така и за начинаещи. Не е нужно да сте професионалист по програмиране, за да прочетете тази работа, само основни компютърни умения. Ако разбирате какво е графичен интерфейс на операционна система и знаете как да работите с папки и директории, книгата ще бъде разбираема за вас.

Компютърната работа “Linux Internals” е много подробна и е разделена на 17 глави. В първите четири раздела авторът говори за общите концепции на тази система и принципа на нейната работа: структурата на ядрото и обвивката, основните команди и структурата на директориите и функционалността на файловите и дисковите системи. Следва повече информация за това как да започнете с тази система: как да заредите ядрото на Linux и да стартирате потребителско пространство. Следващите глави навлизат по-дълбоко в работните потоци на Linux и използването на ресурсите. Освен това Брайън Уорд засегна проблемите на програмирането на shell скриптове и работата с езика C. От общ материал авторът постепенно навлиза по-дълбоко в подробности, които са от интерес за разработчиците на софтуер.

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

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

На нашия уебсайт за книги можете да изтеглите сайта безплатно без регистрация или да прочетете онлайн книгата „Linux Internals“ от Браян Уорд във формати epub, fb2, txt, rtf, pdf за iPad, iPhone, Android и Kindle. Книгата ще ви достави много приятни мигове и истинско удоволствие от четенето. Можете да закупите пълната версия от наш партньор. Освен това тук ще намерите най-новите новини от литературния свят, ще научите биографията на любимите си автори. За начинаещи писатели има отделен раздел с полезни съвети и трикове, интересни статии, благодарение на които вие сами можете да опитате ръката си в литературните занаяти.

Изтеглете безплатна книга „Linux Internals“ от Brian Ward

Във формат fb2: Изтегли
Във формат rtf: Изтегли
Във формат epub: Изтегли
Във формат текст:

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

Нива и слоеве на абстракция в операционната система Linux

Използването на абстракции за разбиване на компютърните системи на компоненти ги прави по-лесни за разбиране, но няма никаква полза, ако няма структура. Ще подредим компонентите на слоеве или нива. Слоят или слой е начин за класифициране (или групиране) на компоненти според тяхното местоположение между потребителя и хардуера. Браузъри, игри и т.н. са разположени на горния слой; на долния слой виждаме паметта на компютъра: нули и единици. Операционната система заема най-голям брой слоеве между тези два.

Операционната система Linux има три основни нива. Хардуерът е разположен в основата. Те включват памет и един или повече централни процесори (CPU), които извършват изчисления и заявки за четене от и запис в паметта. Устройства като твърди дискове и мрежови интерфейси също се считат за хардуер.

Нивото по-горе е ядрото, което е ядрото на операционната система. Ядрото е програма, която се намира в паметта на компютъра и дава инструкции на централния процесор. Ядрото управлява хардуера и действа основно като интерфейс между хардуера и всяка работеща програма.

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

Има важна разлика между начина, по който се стартират процесите на ядрото и потребителските процеси: ядрото работи в режим на ядрото, докато потребителските процеси се изпълняват в потребителски режим. Кодът, работещ в режим на ядрото, има неограничен достъп до процесора и RAM. Това е мощно предимство, но може да бъде опасно, защото позволява на процесите на ядрото лесно да нарушат цялата система. Областта, която е достъпна само за ядрото, се нарича пространство на ядрото.

Потребителският режим, за сравнение, има само ограничено (обикновено малко) количество налична памет и са разрешени само безопасни за процесора инструкции. Потребителското пространство се отнася до области от RAM, които могат да бъдат достъпни от потребителски процеси. Ако даден процес се провали, последствията ще бъдат ограничени и ядрото ще може да го изчисти. Това означава, че ако например браузърът ви се срине, научните изчисления, които сте изпълнявали във фонов режим от няколко дни, няма да бъдат прекъснати.

Теоретично един неконтролиран потребителски процес не е в състояние да причини значителна вреда на системата. Това наистина зависи от това какво смятате за „съществена вреда“ и от специалните привилегии на процеса, тъй като на някои процеси е позволено да правят повече от други. Например, може ли потребителски процес напълно да унищожи данните на твърд диск? Ако конфигурирате разрешенията правилно, това може и ще бъде изключително опасно за вас. Съществуват предпазни мерки за предотвратяване на това и на повечето процеси просто няма да бъде позволено да причиняват хаос по този начин.

Основни команди и структура на директорията

Тази глава е препратка към командите и помощните програми на операционната система Unix. Вероятно вече знаете повечето от тези команди, но за да ви вдъхнем малко увереност, особено що се отнася до структурата на директорията. Ето някои уводни материали, които ще използвам в цялата книга.

Защо говорим за Unix команди? Тази книга не е ли за това как работи Linux? Да, разбира се, за това, но в самата сърцевина на Linux е системата Unix.

Ще видите думата Unix по-често тук, отколкото Linux, защото това, което научавате, може веднага да бъде приложено към Solaris, BSD и други системи, свързани с Unix. Опитах се да избегна покриването на твърде много разширения на потребителския интерфейс, специфични за Linux, не само за да ви дам солидна основа за използване на други системи, но и защото такива разширения са доста нестабилни. Ще можете да се адаптирате към новите версии на Linux по-бързо, ако знаете основните команди.

Как се зарежда ядрото на Linux?

Вече знаете за физическата и логическата структура на Linux система, какво представлява ядрото и как да работите с процесите. Ще получите информация за това как ядрото се стартира или зарежда, с други думи, как ядрото се премества в паметта до момента, в който стартира първият потребителски процес. Опростена диаграма на процеса на зареждане изглежда така.

  1. Системният BIOS или фърмуерът за зареждане зарежда и стартира системата за зареждане на системата.
  2. Системата за зареждане на системата намира образа на ядрото на диска, зарежда го в паметта и го изпълнява.
  3. Ядрото инициализира устройствата и техните драйвери.
  4. Ядрото монтира основната файлова система.
  5. Ядрото изпълнява командата init с ID на процес 1. Тази точка е началото на потребителското пространство.
  6. Командата init стартира останалите системни процеси.
  7. В даден момент командата init стартира процес, който ви позволява да влезете в системата. Това обикновено се случва в края или малко преди зареждането на системата.

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

Способността да идентифицирате всеки етап от процеса на зареждане ще се окаже безценна при отстраняване на проблеми при зареждане и също така ще ви помогне да разберете системата като цяло. Въпреки това, режимът на стартиране по подразбиране в много версии на Linux често прави някои от ранните стъпки трудни (ако не и невъзможни) за идентифициране и вероятно ще можете да ги прегледате едва след като приключат, след като влезете в.

Въведение в софтуера за компилиране на C код

Повечето публично достъпни софтуерни пакети на трети страни за Unix идват в изходен код, който можете да изградите и инсталирате. Една от причините за това е, че има толкова много различни версии и архитектури на Unix (и самия Linux), че би било трудно да се създадат двоични пакети за всички възможни комбинации от платформи. Друга важна причина е, че широкото разпространение на изходния код в общността на Unix насърчава потребителите да коригират грешки в софтуера и да въвеждат нови функции, което дава смисъл на термина "отворен код".

Почти всичко, което виждате в Linux система, може да бъде получено като изходен код, от ядрото и C библиотеката до браузърите. Възможно е дори да актуализирате и разширите системата като цяло чрез (пре)инсталиране на части от системата от изходния код. Вероятно обаче не трябва да надграждате компютъра си, като инсталирате всичко от източника, освен ако не ви харесва процесът или имате друга причина.

Linux обикновено предоставя лесни начини за актуализиране на критични части на системата, като команди в директорията /bin, и едно изключително важно свойство на системите е, че те обикновено коригират проблемите със сигурността много бързо. Въпреки това, не очаквайте вашата версия да предостави всичко необходимо без вашето участие. Ето няколко причини, поради които може да се наложи сами да инсталирате определени пакети:

  • за управление на конфигурационни параметри;
  • за да инсталирате софтуера, където имате нужда. Можете дори да инсталирате няколко различни версии на един и същи пакет;
  • за да контролирате коя версия инсталирате. Системните дистрибуции не винаги имат най-новата версия на всички пакети, особено тези, свързани с допълнителен софтуер (като библиотеки на Python);
  • за да разберете по-добре как работи пакетът.

Уеб сървъри и приложения

Linux е популярна система за уеб сървъри и управляващият монарх сред сървърите за приложения на Linux е Apache HTTP Server (обикновено наричан просто Apache). Друг уеб сървър, за който често ще чувате, е Tomcat (също проект на разработчиците на Apache); осигурява поддръжка за Java приложения.

Самите уеб сървъри не правят много: те могат да съхраняват файлове и това е всичко. Крайната цел на повечето уеб сървъри, като Apache, е да предоставят платформа за изпълнение на уеб приложения. Например проектът Wikipedia е изграден върху пакета MediaWiki, който можете да използвате, за да организирате свой собствен wiki проект. Системите за управление на съдържанието като WordPress и Drupal ви позволяват да създавате свои собствени блогове и мултимедийни уебсайтове. Всички тези приложения са базирани на езици за програмиране, които работят особено добре на Linux. Например системите MediaWiki, WordPress и Drupal са написани на PHP.

Градивните елементи, които изграждат уеб приложенията, са силно модулни, така че е лесно да добавяте свои собствени разширения и да създавате приложения, използвайки рамки като Django, Flask и Rails, които предоставят съоръжения за общи уеб рамки и функции, като например използване на шаблони, мулти- управление на потребителите и поддръжка на бази данни.

Изтеглете от безплатно хранилище за файлове

Разрешете captcha за достъп до връзките!

Издадохме книга на Браян Уорд, която вече се превърна в бестселър на Запад. Той описва всички тънкости на работата с операционната система Linux, системната администрация и дълбоките механизми, които осигуряват функционалност на Linux на ниско ниво. На страниците на тази публикация ще придобиете основни познания за работа с ядрото на Linux и принципите на правилната работа на компютърните мрежи. Книгата засяга и проблемите на програмирането на shell скриптове и работата с езика C, обхваща теми за информационна сигурност, виртуализация и други незаменими неща.

Кой трябва да прочете книгата

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

Необходимите условия

Не е нужно да сте програмист, за да прочетете тази книга. Ще ви трябват само основни компютърни умения: трябва да можете да навигирате в графичния интерфейс (при инсталиране и конфигуриране на системния интерфейс), както и да имате разбиране за файлове и директории (папки). Трябва също да сте готови да потърсите вашата система и онлайн за допълнителна документация. Както беше отбелязано по-горе, най-важното нещо е вашата воля и желание да изследвате вашия компютър.

Как се чете книга

Когато става въпрос за технически теми, предаването на всички необходими знания не е лесна задача. От една страна, читателят затъва в ненужни подробности и му е трудно да схване същността, тъй като човешкият ум просто не може да обработи голям брой нови понятия едновременно. От друга страна, липсата на подробности води до факта, че читателят получава само бегла представа за темата и не е готов да асимилира допълнителен материал.

В тази книга авторът опрости представянето и структурира материала. В повечето глави първо се представя важна информация, която е необходима за по-нататъшна работа. Докато четете главата, ще срещнете допълнителен материал в нея. Трябва ли веднага да схванете тези подробности? В повечето случаи авторът смята, че не. Ако очите ви започнат да се изцъклят от количеството подробности, свързани с материала, който току-що научихте, не се колебайте да преминете към следващата глава или да си вземете почивка. Очакват ви други важни неща.

Как е организирана тази книга?

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

Повечето от началните глави (с изключение на Глава 2) се фокусират силно върху ядрото на Linux, но докато напредвате в книгата, ще работите и във вашето потребителско пространство. Ако не разбирате за какво говори авторът сега, не се притеснявайте, обясненията ще бъдат дадени в Глава 1. Материалът е представен, когато е възможно, без препратка към системно разпространение. Би било скучно да се описват всички варианти на системата, така че Уорд се опита да говори за двете основни семейства дистрибуции: Debian (включително Ubuntu) и RHEL/Fedora/CentOS. Акцентът е върху сървърни и работни станции версии. Вградени системи като Android и OpenWRT също са представени, но научаването на разликите между тези платформи е оставено на вас.

Какво е новото във второто издание

Първото издание на тази книга се занимава главно с потребителската страна на работата на Linux система. Основният фокус беше върху дизайна на неговите части и как те да функционират. По това време много елементи от системата бяха трудни за инсталиране и правилно конфигуриране.

Благодарение на упоритата работа на разработчиците на софтуер и създателите на Linux дистрибуция, това се промени. Уорд преработи материала на първото издание за актуализации, като обърна особено внимание на процеса на стартиране на системата и как тя управлява хардуера, и премахна остарелите материали (като подробно обяснение на процеса на печат), за да разшири дискусията за ролята на Linux ядрото в всяко разпределение. Вероятно взаимодействате с ядрото много по-често, отколкото предполагате, и авторът специално е отбелязал моментите, когато това се случва.

Уорд също пренареди представянето на книгата, за да отговаря на интересите и нуждите на съвременните читатели. Единственото нещо, което не се е променило, е дължината на книгата.

Авторът искаше да ви предостави необходимата информация, за да започнете бързо. Усвояването им ще изисква известно усилие, но Уорд не възнамерява да ви направи „щангист“, за да можете да преодолеете тази книга. След като разберете важните точки, посочени тук, ще ви бъде лесно да намерите подробностите и да ги разберете.

Авторът е премахнал някои исторически подробности, които са били в първото издание, главно за да привлече вниманието ви. Ако се интересувате от системата Linux и нейната връзка с историята на системата Unix, вижте книгата на Peter H. Salus The Daemon, the Gnu и Penguin (Reed Media Services, 2008) - тя разказва как използваният от нас софтуер.

Повече подробности за книгата можете да намерите на

Браян Уорд

Вътрешни елементи на Linux

Преводач С. Черников

Технически редактор Н. Гринчик

Литературен редактор О. Андриевич

Художници А. Барцевич, В. Шимкевич

Коректори Т. Курянович, Е. Павлович

Оформление А. Барцевич

Браян Уорд

Вътрешни елементи на Linux. - Санкт Петербург: Питър, 2015.

ISBN 978-5-496-01952-1

© Издателска къща LLC "Питер", 2015

Всички права запазени. Никоя част от тази книга не може да бъде възпроизвеждана под никаква форма без писменото разрешение на притежателите на авторските права.

Предговор

Написах тази книга с убеждението, че за да бъдете успешни и ефективни, трябва да разберете как компютърният ви софтуер работи и работи.

Операционната система Linux е страхотна за изучаване, тъй като по-голямата част от системната конфигурация се съхранява в прости файлове, които са доста лесни за четене. Просто трябва да разберете за какво отговаря всяка част и след това да съберете всичко заедно. На това е посветена тази книга.

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

Искате ли да знаете защо някои неща работят, а други не? Чудите ли се какво ще се случи, ако промените нещо? Тогава вие сте един от „развлекателите“.

Необходимите условия

Не е нужно да сте програмист, за да прочетете тази книга. Ще ви трябват само основни компютърни умения: трябва да можете да навигирате в графичния интерфейс (при инсталиране и конфигуриране на системния интерфейс), както и да имате разбиране за файлове и директории (папки). Трябва също да сте готови да потърсите вашата система и онлайн за допълнителна документация. Както беше отбелязано по-горе, най-важното нещо е вашата воля и желание да изследвате вашия компютър.

Когато става въпрос за технически предмети, предаването на всички необходими знания не е лесна задача. От една страна, читателят затъва в ненужни подробности и му е трудно да схване същността, тъй като човешкият ум просто не може да обработи голям брой нови понятия едновременно. От друга страна, липсата на подробности води до факта, че читателят получава само бегла представа за темата и не е готов да асимилира допълнителен материал.

В тази книга опростих представянето и структурирах материала. В повечето глави първо се представя важна информация, която е необходима за по-нататъшна работа. Докато четете главата, ще срещнете допълнителен материал в нея. Трябва ли веднага да схванете тези подробности? В повечето случаи мисля, че не. Ако очите ви започнат да се изцъклят от количеството подробности, свързани с материала, който току-що научихте, не се колебайте да преминете към следващата глава или да си вземете почивка. Очакват ви други важни неща.

Практически подход

За работа ще ви е необходим компютър с операционна система Linux. Може да предпочетете виртуална инсталация - използвах VirtualBox, за да тествам повечето от материала в тази книга. Трябва да имате суперпотребителски (root) достъп, въпреки че през повечето време трябва да използвате стандартен потребителски акаунт. Ще работите предимно в командния ред, терминалния прозорец или отдалечената сесия. Ако не сте работили често в тази среда, това е добре; ще научите повече за нея в Глава 2.

Обикновено командите ще изглеждат така:

Въведете текст, който е маркиран с удебелен шрифт; Текстът на отговора, който машината ще изведе, се показва с нормален шрифт. Символът $ е подкана за потребител с обикновен акаунт. Ако видите символа # в подканата, трябва да сте влезли като суперпотребител (повече за това в Глава 2).

Как е организирана тази книга?

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

Повечето от началните глави (с изключение на Глава 2) се фокусират силно върху ядрото на Linux, но докато напредвате в книгата, ще работите и във вашето потребителско пространство. Ако не разбирате за какво говоря сега, не се притеснявайте, обясненията ще бъдат дадени в Глава 1.

Материалът е представен, когато е възможно, без препратка към системно разпространение. Би било скучно да описвам всички варианти на системата, затова се опитах да говоря за двете основни семейства дистрибуции: Debian (включително Ubuntu) и RHEL/Fedora/CentOS. Акцентът е върху сървърни и работни станции версии. Вградени системи като Android и OpenWRT също са представени, но научаването на разликите между тези платформи е оставено на вас.

Какво е новото във второто издание

Първото издание на тази книга се занимава главно с потребителската страна на работата на Linux система. Основният фокус беше върху дизайна на неговите части и как те да функционират. По това време много елементи от системата бяха трудни за инсталиране и правилно конфигуриране.

Благодарение на упоритата работа на разработчиците на софтуер и създателите на Linux дистрибуция, това се промени. Прегледах материалите от първото издание за актуализации, като обърнах специално внимание на процеса на стартиране на системата и как тя управлява хардуера, и премахнах остарели материали (като подробно обяснение на процеса на печат), за да разширя дискусията за ролята на Linux ядро във всяка дистрибуция. Вероятно взаимодействате с ядрото по-често, отколкото предполагате, и специално съм отбелязал моментите, когато това се случва.

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

Исках да ви предоставя информацията, от която се нуждаете, за да започнете бързо. Усвояването им ще изисква известно усилие, но нямам намерение да ви правя „щангист“, за да можете да преодолеете тази книга. След като разберете важните точки, посочени тук, ще ви бъде лесно да намерите подробностите и да ги разберете.

Премахнах някои исторически подробности, които бяха в първото издание, главно за да насоча вниманието ви. Ако се интересувате от системата Linux и нейната връзка с историята на системата Unix, вижте книгата на Peter H. Salus Демонът, Гну и Пингвинът(Reed Media Services, 2008) - Говори за това как софтуерът, който използваме, се е развил.

Текуща страница: 1 (книгата има общо 30 страници) [наличен пасаж за четене: 17 страници]

Браян Уорд

Вътрешни елементи на Linux

Преводач С. Черников

Технически редактор Н. Гринчик

Литературен редактор О. Андриевич

Художници А. Барцевич, В. Шимкевич

Коректори Т. Курянович, Е. Павлович

Оформление А. Барцевич

Браян Уорд

Вътрешни елементи на Linux. – Санкт Петербург: Питър, 2015.

ISBN 978-5-496-01952-1

© Издателска къща LLC "Питер", 2015

Всички права запазени. Никоя част от тази книга не може да бъде възпроизвеждана под никаква форма без писменото разрешение на притежателите на авторските права.

Предговор

Написах тази книга с убеждението, че за да бъдете успешни и ефективни, трябва да разберете как компютърният ви софтуер работи и работи.

Операционната система Linux е страхотна за изучаване, тъй като по-голямата част от системната конфигурация се съхранява в прости файлове, които са доста лесни за четене. Просто трябва да разберете за какво отговаря всяка част и след това да съберете всичко заедно. На това е посветена тази книга.

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

Искате ли да знаете защо някои неща работят, а други не? Чудите ли се какво ще се случи, ако промените нещо? Тогава вие сте един от „развлекателите“.

Необходимите условия

Не е нужно да сте програмист, за да прочетете тази книга. Ще ви трябват само основни компютърни умения: трябва да можете да навигирате в графичния интерфейс (при инсталиране и конфигуриране на системния интерфейс), както и да имате разбиране за файлове и директории (папки). Трябва също да сте готови да потърсите вашата система и онлайн за допълнителна документация. Както беше отбелязано по-горе, най-важното нещо е вашата воля и желание да изследвате вашия компютър.

Когато става въпрос за технически предмети, предаването на всички необходими знания не е лесна задача. От една страна, читателят затъва в ненужни подробности и му е трудно да схване същността, тъй като човешкият ум просто не може да обработи голям брой нови понятия едновременно. От друга страна, липсата на подробности води до факта, че читателят получава само бегла представа за темата и не е готов да асимилира допълнителен материал.

В тази книга опростих представянето и структурирах материала. В повечето глави първо се представя важна информация, която е необходима за по-нататъшна работа. Докато четете главата, ще срещнете допълнителен материал в нея. Трябва ли веднага да схванете тези подробности? В повечето случаи мисля, че не. Ако очите ви започнат да се изцъклят от количеството подробности, свързани с материала, който току-що научихте, не се колебайте да преминете към следващата глава или да си вземете почивка. Очакват ви други важни неща.

Практически подход

За работа ще ви е необходим компютър с операционна система Linux. Може да предпочетете виртуална инсталация - използвах VirtualBox, за да тествам повечето от материала в тази книга. Трябва да имате суперпотребителски (root) достъп, въпреки че през повечето време трябва да използвате стандартен потребителски акаунт. Ще работите предимно в командния ред, терминалния прозорец или отдалечената сесия. Ако не сте работили често в тази среда, това е добре; ще научите повече за нея в Глава 2.

Обикновено командите ще изглеждат така:

Въведете текст, който е маркиран с удебелен шрифт; Текстът на отговора, който машината ще изведе, се показва с нормален шрифт. Символът $ е подкана за потребител с обикновен акаунт. Ако видите символа # в подканата, трябва да използвате акаунта на суперпотребител (повече за това в Глава 2).

Как е организирана тази книга?

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

Повечето от началните глави (с изключение на Глава 2) се фокусират силно върху ядрото на Linux, но докато напредвате в книгата, ще работите и във вашето потребителско пространство. Ако не разбирате за какво говоря сега, не се притеснявайте, обясненията ще бъдат дадени в Глава 1.

Материалът е представен, когато е възможно, без препратка към системно разпространение. Би било скучно да описвам всички варианти на системата, затова се опитах да говоря за двете основни семейства дистрибуции: Debian (включително Ubuntu) и RHEL/Fedora/CentOS. Акцентът е върху сървърни и работни станции версии. Вградени системи като Android и OpenWRT също са представени, но научаването на разликите между тези платформи е оставено на вас.

Какво е новото във второто издание

Първото издание на тази книга се занимава главно с потребителската страна на работата на Linux система. Основният фокус беше върху дизайна на неговите части и как те да функционират. По това време много елементи от системата бяха трудни за инсталиране и правилно конфигуриране.

Благодарение на упоритата работа на разработчиците на софтуер и създателите на Linux дистрибуция, това се промени. Прегледах материалите от първото издание за актуализации, като обърнах специално внимание на процеса на стартиране на системата и как тя управлява хардуера, и премахнах остарели материали (като подробно обяснение на процеса на печат), за да разширя дискусията за ролята на Linux ядро във всяка дистрибуция. Вероятно взаимодействате с ядрото по-често, отколкото предполагате, и специално съм отбелязал моментите, когато това се случва.

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

Исках да ви предоставя информацията, от която се нуждаете, за да започнете бързо. Усвояването им ще изисква известно усилие, но нямам намерение да ви правя „щангист“, за да можете да преодолеете тази книга. След като разберете важните точки, посочени тук, ще ви бъде лесно да намерите подробностите и да ги разберете.

Премахнах някои исторически подробности, които бяха в първото издание, главно за да насоча вниманието ви. Ако се интересувате от системата Linux и нейната връзка с историята на системата Unix, вижте книгата на Peter H. Salus Демонът, Гну и Пингвинът(Reed Media Services, 2008) - Говори за това как софтуерът, който използваме, се е развил.

Бележка за терминологията

В момента има дебат относно имената на някои елементи на операционните системи. Дори името на системата Linux е включено - трябва ли да се нарича Linux или GNU/Linux (за да отрази използването на някои елементи от проекта GNU)? В книгата се опитах да използвам възможно най-често срещаните и най-малко тромави имена.

Благодарности

Благодаря на всички, които ми помогнаха в работата по първото издание. Това са Джеймс Дънкан, Дъглас Н. Арнолд, Бил Фенър, Кен Хорнщайн, Скот Диксън, Дан Ерлих, Феликс Лий, Феликс Лий, Скот Шварц, Грегъри П. Смит, Дан Съли, Карол Хурадо и Джина Стийл. За това издание специално благодаря на Jordi Gutiérrez Hermoso за неговия отличен технически преглед; неговите предложения и разяснения са безценни. Благодаря също на Доминик Пулен и Доналд Карон за бързата им реакция в ранните етапи на работата и на Синджу Хсие, който търпеливо работи с мен, за да преработим тази книга.

Бих искал също да благодаря на моя редактор по разработка, Бил Полок, и на редактора по продукцията, Лоръл Чун. Серена Янг, Алисън Лоу и всички в No Starch Press, както винаги, свършиха чудесна работа, създавайки това ново издание на книгата.

От издателството

Моля, изпращайте вашите коментари, предложения и въпроси по имейл [имейл защитен](Издателство Петър, компютърно издание).

Ще се радваме да чуем вашето мнение!

На сайта на издателството http://www.piter.com ще намерите подробна информация за нашите книги.

1. Голямата картина

На пръв поглед една съвременна операционна система, като Linux, е доста сложна и се състои от голям брой части, които едновременно функционират и взаимодействат помежду си. Така един уеб сървър може да комуникира със сървър на база данни, който от своя страна използва споделена библиотека, която се използва от много други програми. Как работи всичко?

Можете най-ефективно да разберете структурата на операционната система, като използвате абстракциие чист начин да кажете, че пренебрегвате повечето подробности. Например, когато шофирате кола, обикновено не е нужно да мислите за детайли като монтажните болтове, които държат двигателя вътре в колата, или хората, които асфалтират пътя и го поддържат в добро състояние. Ако се возите в кола като пътник, всичко, което трябва да знаете, е за какво е предназначена колата (отвежда ви до някъде) и някои основни правила за използването й (как да боравите с вратата и предпазния колан).

Ако карате кола, трябва да знаете повече. Ще трябва да се запознаете с органите за управление (като волан и педал за газ) и какво да правите в случай на неизправност.

Да приемем, че колата се движи рязко. Можете да разделите абстракцията „кола, която се движи по пътя“ на три части: колата, пътя и вашия стил на шофиране. Това ще помогне да се определи причината. Ако пътят е неравен, не е нужно да обвинявате колата или себе си. Вместо това можете да се опитате да разберете защо пътят се е влошил или, ако пътят е нов, защо строителите му са свършили толкова ужасна работа.

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

Тази глава предоставя общ преглед на компонентите, които изграждат една Linux система. Въпреки че всеки от тях има невероятно количество технически подробности, свързани с вътрешната структура, ние няма да им обръщаме внимание и ще се съсредоточим върху това какво правят тези компоненти по отношение на системата като цяло.

1.1. Нива и слоеве на абстракция в операционната система Linux

Използването на абстракции за разбиване на компютърните системи на компоненти ги прави по-лесни за разбиране, но няма никаква полза, ако няма структура. Ще подредим компонентите на слоеве или нива. Слой,или ниво,е начин за класифициране (или групиране) на компоненти според тяхното местоположение между потребителя и хардуера. Браузъри, игри и т.н. са разположени на горния слой; на долния слой виждаме паметта на компютъра: нули и единици. Операционната система заема най-голям брой слоеве между тези два.

Има три основни нива в операционната система Linux. На фиг. Фигура 1.1 показва нивата, както и някои от компонентите във всяко от тях. В основата са разположени хардуер. Те включват памет и един или повече централни процесори (CPU), които извършват изчисления и заявки за четене от и запис в паметта. Устройства като твърди дискове и мрежови интерфейси също се считат за хардуер.

Горното ниво се намира сърцевина, което е ядрото на операционната система. Ядрото е програма, която се намира в паметта на компютъра и дава инструкции на централния процесор. Ядрото управлява хардуера и действа основно като интерфейс между хардуера и всяка работеща програма.

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

Забележка

По-точен термин от "процес" е "потребителски процес", независимо дали потребителят взаимодейства директно с този процес. Например, всички уеб сървъри работят като потребителски процеси.

Има важна разлика между начина, по който се стартират процесите на ядрото и потребителските процеси: ядрото се стартира в режим на ядрото, а потребителските процеси - в потребителски режим. Кодът, работещ в режим на ядрото, има неограничен достъп до процесора и RAM. Това е мощно предимство, но може да бъде опасно, защото позволява на процесите на ядрото лесно да нарушат цялата система. Извиква се зоната, която е достъпна само за ядрото основно пространство.

В потребителски режим, за сравнение, е налично само ограничено (обикновено малко) количество памет и са разрешени само безопасни инструкции на процесора. Потребителско пространствоса области от RAM, които могат да бъдат достъпни от потребителски процеси. Ако даден процес се провали, последствията ще бъдат ограничени и ядрото ще може да го изчисти. Това означава, че ако например браузърът ви се срине, научните изчисления, които сте изпълнявали във фонов режим от няколко дни, няма да бъдат прекъснати.

Ориз. 1.1.Обща структура на операционната система Linux

Теоретично един неконтролиран потребителски процес не е в състояние да причини значителна вреда на системата. Това наистина зависи от това какво смятате за „съществена вреда“ и от специалните привилегии на процеса, тъй като на някои процеси е позволено да правят повече от други. Например, може ли потребителски процес напълно да унищожи данните на твърд диск? Ако конфигурирате разрешенията правилно, това може и ще бъде изключително опасно за вас. Съществуват предпазни мерки за предотвратяване на това и на повечето процеси просто няма да бъде позволено да причиняват хаос по този начин.

1.2. Хардуер: RAM

От целия компютърен хардуер RAMе може би най-важното. В най-суровата си форма RAM е просто огромно хранилище от низове от единици и нули. Всяка нула или единица се извиква малко. Това е мястото, където се намира работещото ядро ​​и процеси - те са просто големи колекции от битове. Всички входни и изходни данни от периферните устройства преминават през RAM също под формата на набори от битове. Процесорът просто работи с паметта: той чете инструкции и данни от нея и след това записва данните обратно в паметта.

Често ще срещнете термина "държава", което ще се отнася до памет, процеси, ядро ​​и други части на компютърна система. Строго погледнато, състояние е всяко подредено подреждане на битове. Например, ако има четири бита в паметта, тогава последователностите 0110, 0001 и 1011 представляват три различни състояния.

Когато смятате, че един процес може лесно да се състои от милиони битове памет, често е по-лесно да се използват абстрактни термини, когато се говори за състояния. Вместо да описвате състояние с помощта на битове, вие говорите за това, което се е случило или се случва в момента. Например, можете да кажете „този процес чака въвеждане“ или „процесът изпълнява втората стъпка от своята процедура за стартиране“.

ЗАБЕЛЕЖКА

Тъй като състоянията обикновено се описват с помощта на абстрактни концепции, а не с действителни битове, терминът "изображение" се използва за обозначаване на всяко физическо подреждане на битове.

1.3. Ядро

Почти всичко, което прави ядрото, включва RAM. Една от задачите на ядрото е да разпредели паметта в няколко подсекции, след което ядрото трябва постоянно да поддържа информация за състоянието на тези подсекции в ред. Всеки процес използва определена за него област от паметта и ядрото трябва да гарантира, че процесите се придържат към своите области.

Ядрото отговаря за управлението на задачи в четири основни области на системата.

процеси.Ядрото е отговорно за това на кои процеси е разрешен достъп до централния процесор.

памет.Ядрото трябва да следи състоянието на цялата памет: каква част в момента е разпределена за определени процеси, какво може да бъде разпределено за споделяне между процесите и каква част е свободна.

Драйвери на устройства.Ядрото действа като интерфейс между хардуера (като твърд диск) и процесите. Обикновено управлението на хардуера се извършва от ядрото.

Системни повикванияИподдържа.Процесите обикновено използват системни повиквания, за да комуникират с ядрото.

Сега ще разгледаме накратко всяка от тези области.

ЗАБЕЛЕЖКА

За повече информация как работи ядрото, вижте Концепции на операционната система, 9-то издание, от Ейбрахам Силбершац, Питър Б. Галвин и Грег Ган, Гагне (Wiley, 2012) и Съвременни операционни системи, 4-то издание от Андрю С. Таненбаум и Хърбърт Бос (Прентис Хол, 2014).

1.3.1. Управление на процеси

Управление на процесиописва стартирането, спирането, възобновяването и прекратяването на процеси. Концепциите зад процесите на стартиране и спиране са доста прости. Малко по-трудно е да се опише как даден процес използва процесора по време на нормална работа.

Във всяка съвременна операционна система няколко процеса функционират "едновременно". Например, можете да стартирате браузър на компютъра си и едновременно да отворите електронна таблица. В действителност обаче нещата не са такива, каквито изглеждат: процесите, отговорни за тези приложения, обикновено не се стартират Vточноств един момент от времето.

Помислете за система с един централен процесор. Множество процеси могат да го използват, но във всеки един момент само един процес може действително да използва процесора. На практика всеки процес използва процесора за малка част от секундата и след това спира; след това друг процес използва процесора за малка част от секундата; след това идва ред на третия процес и т.н. Действието, при което един процес прехвърля управлението на процесора на друг процес, се нарича превключване на контекста.

Всеки период от време количество време– дава на процеса достатъчно време за извършване на значителни изчисления (и, разбира се, процесът често изпълнява текущата си задача в рамките на един квант). Тъй като квантите на времето са толкова малки, човек не ги възприема и му се струва, че в системата протичат едновременно няколко процеса (тази възможност е известна като "многозадачност").

Ядрото е отговорно за превключването на контекста. За да разберете как работи това, представете си ситуация, в която процес се изпълнява в потребителски режим, но неговият отрязък от време изтича. Това се случва.

1. Процесорът (реалният хардуер) прекъсва текущия процес с помощта на вътрешен таймер, превключва в режим на ядрото и връща контрола към него.

2. Ядрото записва текущото състояние на процесора и паметта, които ще са необходими за възобновяване на току-що прекъснатия процес.

3. Ядрото изпълнява всички задачи, които може да са се появили по време на предишния отрязък от време (например събиране на данни или I/O операции).

4. Ядрото вече е готово да стартира друг процес. Той анализира списъка с готови за изпълнение процеси и избира един от тях.

5. Ядрото подготвя паметта за новия процес и след това подготвя процесора.

6. Ядрото казва на процесора колко дълго ще продължи времевият отрязък за новия процес.

7. Ядрото поставя процесора в потребителски режим и прехвърля контрола на процесора.

Превключването на контекст отговаря на важен въпрос: Когаработи ли ядрото? Отговорът е: ядрото работи междувремеви отрязъци, разпределени за процеси, когато възникне превключване на контекста.

В система с множество процесори нещата са малко по-сложни, тъй като ядрото не трябва да спира да контролира текущия процесор, за да позволи на някой процес да се изпълнява на друг процесор. И все пак, за да извлече максимума от всички налични процесори, ядрото все още прави това (и може да използва определени трикове, за да спечели допълнително процесорно време).

1.3.2. Управление на паметта

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

Ядрото трябва да има собствена област на паметта, която не може да бъде достъпна от потребителски процеси;

Всеки потребителски процес се нуждае от собствена област на паметта;

Всеки потребителски процес не трябва да има достъп до паметта, разпределена за друг процес;

Потребителските процеси могат да споделят памет;

Част от паметта за потребителски процеси може да е само за четене;

Системата може да използва повече памет, отколкото е налична, като използва дисково пространство като спомагателно устройство.

Ядрото има помощник. Съвременните процесори съдържат модул за управление на паметта(MMU), който активира верига за достъп до паметта, наречена "виртуална памет". Когато използва виртуална памет, процесът няма достъп до паметта директно от физическото си местоположение в хардуера. Вместо това ядрото конфигурира всеки процес така, сякаш има контрол над цялата машина. Когато даден процес има достъп до паметта, MMU прихваща заявката и използва адресна карта на паметта, за да преведе местоположението в паметта, научено от процеса, във физическо място в паметта на компютъра. Въпреки това, ядрото трябва да инициализира, непрекъснато да поддържа и променя тази адресна карта. Например, по време на превключване на контекста, ядрото трябва да промени картата след заминаващия процес и да го подготви за предстоящия.

Забележка

Реализацията на адресна карта на паметта се нарича таблица на страниците.

Ще научите как да наблюдавате производителността на паметта в Глава 8.

1.3.3. Драйвери на устройства и управление

Работата на ядрото по отношение на устройствата е доста проста. Обикновено устройствата са достъпни само в режим на ядрото, тъй като неправилният достъп (например, когато потребителски процес се опита да изключи захранването) може да доведе до срив на компютъра. Друг проблем е, че различните устройства рядко имат един и същ софтуерен интерфейс, дори ако изпълняват една и съща задача: например две различни мрежови карти. Поради тази причина драйверите на устройства традиционно са част от ядрото и се стремят да предоставят унифициран интерфейс на потребителските процеси, за да улеснят работата на разработчиците на софтуер.

1.3.4. Системни обаждания и поддръжка

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

Две системни извиквания, fork() и exec(), са важни за разбирането как се стартират процесите:

Fork(). Когато процес извика fork(), ядрото създава почти идентично копие на процеса;

Exec(). Когато процес извика exec( програма), ядрото изпълнява програмата програма, който замества текущия процес.

С изключение на процеса на стартиране (глава 6), всичкопотребителските процеси в Linux система стартират в резултат на извикване fork() и в повечето случаи се прави извикване exec(), за да се стартира нова програма, а не копие на съществуващ процес. Прост пример е всяка програма, която стартирате от командния ред, като например командата ls, която показва съдържанието на директория. Когато въведете командата ls в терминален прозорец, обвивката, работеща в прозореца на терминала, извиква fork(), за да създаде копие на обвивката, а след това новото копие на обвивката извиква exec(ls), за да изпълни командата ls. На фиг. Фигура 1.2 показва последователността от процеси и системни извиквания за изпълнение на програми като ls.

Ориз. 1.2.Стартиране на нов процес

ЗАБЕЛЕЖКА

Системните повиквания обикновено се означават с помощта на скоби. В примера, показан на фиг. 1.2, процес, който иска от ядрото да създаде друг процес, трябва да издаде системното извикване fork(). Това обозначение идва от начина, по който извикванията са написани на езика за програмиране C. Не е необходимо да знаете C, за да разберете тази книга. Само не забравяйте, че системното извикване е взаимодействие между процес и ядрото. Освен това тази книга опростява някои групи системни повиквания. Например, извикването exec() обозначава цяло семейство от системни извиквания, които изпълняват подобна задача, но се различават по своята софтуерна реализация.

Ядрото също поддържа потребителски процеси, чиито функции се различават от традиционните системни извиквания. Най-известните от тях са псевдо устройства. От гледна точка на потребителските процеси, псевдоустройствата изглеждат като обикновени устройства, но са реализирани изцяло софтуерно. Всъщност те формално не би трябвало да са в ядрото, но все още присъстват в него по практически причини. Например, устройство, което генерира произволни числа (/dev/random), би било трудно да се приложи с необходимата степен на сигурност, като се използва потребителски процес.

Забележка

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

1.4. Потребителско пространство

Извиква се областта на RAM, която ядрото разпределя за потребителски процеси потребителско пространство. Тъй като процесът е просто състояние (или изображение) в паметта, потребителското пространство също има достъп до паметта на цялата колекция от работещи процеси. Може също да срещнете термина "потребителска земя", който се използва вместо потребителско пространство.

Повечето от реалните действия на една Linux система се случват в потребителското пространство. Въпреки че всички процеси са еднакви от гледна точка на ядрото, те изпълняват различни задачи за потребителите. Системните компоненти, които представляват потребителски процеси, са организирани в елементарна структура - сервизен слой (или слой). На фиг. Фигура 1.3 показва приблизителен набор от компоненти, взаимосвързани и взаимодействащи със системата Linux. Простите услуги са разположени на най-долното ниво (най-близо до ядрото), помощните програми са в средата, а приложенията, с които работи потребителят, са разположени на върха. Фигура 1.3 е изключително опростена диаграма, тъй като са показани само шест компонента, но можете да забележите, че горните компоненти са най-близо до потребителя (потребителския интерфейс и браузъра); компонентите на средно ниво имат пощенски сървър, който използва браузър; В долната част има няколко малки компонента.

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

Фигура 1.3 показва само грубо оформлението на потребителското пространство. В действителност няма правила в потребителското пространство. Например, повечето приложения и услуги записват диагностични съобщения, извик списания. Повечето програми използват стандартната услуга syslog за регистриране на съобщения, но някои избират сами да извършват регистриране.

Ориз. 1.3.Видове процеси и взаимодействия

Освен това някои компоненти на потребителското пространство може да са трудни за категоризиране. Компонентите от страната на сървъра, като например уеб сървър или сървър на база данни, могат да се считат за приложения от много високо ниво, тъй като изпълняват доста сложни задачи. Такива приложения могат да бъдат поставени в горната част на фигурата. 1.3. В същото време потребителските приложения може да зависят от сървърните приложения за изпълнение на задачи, с които не могат да се справят сами. В този случай сървърните компоненти трябва да бъдат поставени на средно ниво.

1.5. Потребители

Ядрото на Linux поддържа традиционната концепция за потребител на Unix система. Потребителе обект, който може да изпълнява процеси и да притежава файлове. Свързан с потребителя Потребителско име. Например, системата може да има потребител, наречен billyjoe. Въпреки това, ядрото не се занимава с потребителски имена, вместо това идентифицира потребителя с помощта на проста цифра потребителско име(Глава 7 говори за това как идентификаторите се свързват с потребителски имена).



Свързани публикации