- Linux является многозадачной системой
- 6.2. Использование getpid() и getppid()
- 6.3. Порождение процесса
- 6.4. Замена образа процесса
- Linux является многозадачной системой
- уПЪДБОЙЕ ЙНЕОЙ РПМШЪПЧБФЕМС
- чИПД Ч УЙУФЕНХ
- чЙТФХБМШОБС ЛПОУПМШ
- пВПМПЮЛЙ Й ЛПНБОДЩ
- чЩИПД ЙЪ УЙУФЕНЩ
- йЪНЕОЕОЙЕ РБТПМС
- жБКМЩ Й ЛБФБМПЗЙ
- дЕТЕЧП ЛБФБМПЗПЧ
- фЕЛХЭЙК ЛБФБМПЗ
- пВТБЭЕОЙЕ Л ДПНБЫОЕНХ ЛБФБМПЗХ
Linux является многозадачной системой
Эта глава открывает большую и очень важную для Linux-программиста тему многозадачности. Описать все сразу не получится, поэтому мы будем неоднократно возвращаться к многозадачности в последующих главах книги. Пристегните ремни покрепче!
Наберите в своей оболочке следующую команду:
На экран будут выведен список всех работающих в системе процессов. Если хотите посчитать количество процессов, наберите что-нибудь, набодобие этого:
Первое число — это количество работающих в системе процессов. Пользователи KDE могут воспользоваться программой kpm, а пользователи Gnome — программой gnome-system-monitor для получения информации о процессах. На то он и Linux, чтобы позволять пользователю делать одно и то же разными способами.
Возникает вопрос: «Что такое процесс?». Процессы в Linux, как и файлы, являются аксиоматическими понятиями. Иногда процесс отождествляют с запущенной программой, однако это не всегда так. Будем считать, что процесс — это рабочая единица системы, которая выполняет что-то. Многозадачность — это возможность одновременного сосуществования нескольких процессов в одной системе.
Linux — многозадачная операционная система. Это означает что процессы в ней работают одновременно. Естественно, это условная формулировка. Ядро Linux постоянно переключает процессы, то есть время от времени дает каждому из них сколько-нибудь процессорного времени. Переключение происходит довольно быстро, поэтому нам кажется, что процессы работают одновременно.
Одни процессы могут порождать другие процессы, образовывая древовидную структуру. Порождающие процессы называются родителями или родительскими процессами, а порожденные — потомками или дочерними процессами. На вершине этого «дерева» находится процесс init, который порождается автоматически ядром в процесссе загрузки системы.
К каждому процессу в системе привязана пара целых неотрицательных чисел: идентификатор процесса PID (Process IDentifier) и идентификатор родительского процесса PPID (Parent Process IDentifier). Для каждого процесса PID является уникальным (в конкретный момент времени), а PPID равен идентификатору процесса-родителя. Если ввести в оболочку команду ps -ef, то на экран будет выведен список процессов со значениями их PID и PPID (вторая и третья колонки соотв.). Вот, например, что творится у меня в системе:
Надо отметить, что процесс init всегда имеет идентификатор 1 и PPID равный 0. Хотя в реальности процесса с идентификатором 0 не существует. Дерево процессов можно также пресставить в наглядном виде при помощи опции —forest программы ps:
Если вызвать программу ps без аргументов, то будет выведен список процессов, принадлежащих текущей группе, то есть работающих под текущим терминалом. О том, что такое терминалы и группы процессов, будет рассказано в последующих главах.
6.2. Использование getpid() и getppid()
Процесс может узнать свой идентификатор (PID), а также родительский идентификатор (PPID) при помощи системных вызовов getpid() и getppid().
Системные вызовы getpid() и getppid() имеют следующие прототипы:
Для использования getpid() и getppid() в программу должны быть включены директивой #include заголовочные файлы unistd.h и sys/types.h (для типа pid_t). Вызов getpid() возвращает идентификатор текущего процесса (PID), а getppid() возвращает идентификатор родителя (PPID). pid_t — это целый тип, размерность которого зависит от конкретной системы. Значениями этого типа можно оперировать как обычными целыми числами типа int.
Рассмотрим теперь простую программу, которая выводит на экран PID и PPID, а затем «замирает» до тех пор, пока пользователь не нажмет .
Проверим теперь, как работает эта программа. Для этого откомпилируем и запустим ее:
Теперь, не нажимая , откроем другое терминальное окно и проверим, правильность работы системных вызовов getpid() и getppid():
6.3. Порождение процесса
Как уже говорилось ранее, процесс в Linux — это нечто, выполняющее программный код. Этот код называют образом процесса (process image). Рассмотрим простой пример, когда вы находитесь в оболочке bash и выполняете команду ls. В этом случае происходит следующее. Образ программы-оболочки bash выполняется в процессе #1. Затем вы вводите команду ls, и оболочка определяет, что нужно запустить внешнюю программу (/bin/ls). Тогда процесс #1 создает свою почти точную копию, процесс #2, который выполняет тот же самый программный код. После этого процесс #2 заменяет свой текущий образ (оболочку) другим образом (программой /bin/ls). В итоге получаем отдельный процесс, выполняющий отдельную программу.
«К чему такая путаница?» — спросите вы. Зачем сначала «клонировать» процесс, а затем заменять в нем образ? Не проще ли все делать одной-единственной операцией? Ответы на подобные вопросы дать тяжело, но, как правило, с опытом прихоидит понимание того, что подобная схема является одной из граней красоты Unix-систем.
Попробуем все-таки разобраться, почему в Unix-системах порождение процесса отделено от запуска программы. Для этого выясним, что же происходит с данными при «клонировании» процесса. Итак, каждый процесс хранит в своей памяти различные данные (переменные, файловые дескрипторы и проч.). При порождении нового процесса, потомок получает точную копию данных родителя. Но как только новый процесс создан, родитель и потомок уже распоряжаются своими копиями по своему усмотрению. Это позволяет распараллелить программу, заставив ее выполнять какой-нибудь трудоемкий алгоритм в отдельном процессе.
Может быть кто-то из вас слышал про то, что в Linux есть потоки, которые позволяют в одной программе реализовывать параллельное выполнение нескольких функций. Опять же возникает вопрос: «Если есть потоки, зачем вся эта головомойка с клонированиями и заменой образов?». А дело в том, что потоки работают с общими данными и выполняются в одной программе. Если в потоке произошло что-то страшное, то это, как правило, отражается на всей программе в целом. Хотя технически потоки реализованы в Linux на базе процессов, но процесс все же является более независимой единицей. Крах дочернего процесса никак не отражается на работе родителя, если сам родитель этого не пожелает.
По правде сказать, программисты редко прибегают к методике распараллеливания одной программы при помощи процессов. Но суть в том, что в Unix-системах программист обладает полной свободой выбора стратегии многозадачности. И это здорово!
Разберемся теперь с тем, как на практике происходит «клонирование» процессов. Для этого используется простой системный вызов fork(), прототип которого находится в файле unistd.h:
Если fork() завершается с ошибкой, то возвращается -1. Это редкий случай, связанный с нехваткой памяти или превышением лимита на количество процессов. Но если разделение произошло, то программе нужно позаботиться об идентификации своего «Я», то есть определении того, где родитель, а где потомок. Это делается очень просто: в родительский процесс fork() возвращает идентификатор потомка, а потомок получает 0. Следующий пример демонстрирует то, как это происходит.
Проверяем, что получилось:
Обратите внимание, что поскольку после вызова fork() программу выполняли уже два независимых процесса, то сообщение родителя вполне могло бы появиться первым.
6.4. Замена образа процесса
Итак, теперь мы умеем порождать процессы. Научимся теперь заменять образ текущего процесса другой программой. Для этих целей используется системный вызов execve(), который объявлен в заголовочном файле unistd.h вот так:
Все очень просто: системный вызов execve() заменяет текущий образ процесса программой из файла с именем path, набором аргументов argv и окружением envp. Здесь следует только учитывать, что path — это не просто имя программы, а путь к ней. Иными словами, чтобы запустить ls, нужно в первом аргументе указать «/bin/ls».
Массивы строк argv и envp обязательно должны заканчиваться элементом NULL. Кроме того, следует помнить, что первый элемент массива argv (argv[0]) — это имя программы или что-либо иное. Непосредственные аргументы программы отсчитываются от элемента с номером 1.
В случае успешного завершения execve() ничего не возвращает, поскольку новая программа получает полное и безвозвратное управление текущим процессом. Если произошла ошибка, то по традиции возвращается -1.
Рассмотрим теперь пример программы, которая заменяет свой образ другой программой.
Итак, данная программа выводит свой PID и передает безвозвратное управление программе cat без аргументов и без окружения. Проверяем:
Программа вывела идентификатор процесса и замерла в смиренном ожидании. Откроем теперь другое терминальное окно и проверим, что же творится с нашим процессом:
Итак, мы убедились, что теперь процесс 30150 выполняет программа cat. Теперь можно вернуться в исходное окно и нажатием Ctrl+D завершить работу cat.
И, наконец, следующий пример демонстрирует запуск программы в отдельном процессе.
Обратите внимание, что поскольку execve() не может возвращать ничего кроме -1, то для обработки возможной ошибки вовсе не обязательно создавать ветвление. Иными словами, если вызов execve() возвратил что-то, то это однозначно ошибка.
Источник
Linux является многозадачной системой
уЙУФЕНБ Linux СЧМСЕФУС НОПЗПЪБДБЮОПК НОПЗПРПМШЪПЧБФЕМШУЛПК ПРЕТБГЙПООПК УЙУФЕНПК. ьФП ПЪОБЮБЕФ, ЮФП НОПЗП МАДЕК НПЗХФ ПДОПЧТЕНЕООП ЪБРХУЛБФШ РП НОПЗХ ТБЪМЙЮОЩИ РТЙМПЦЕОЙК ПДОПЧТЕНЕООП ОБ ПДОПН Й ФПН ЦЕ ЛПНРШАФЕТЕ. ьФЙН УЙУФЕНБ Linux ПФМЙЮБЕФУС ПФ УЙУФЕНЩ MS-DOS, ЗДЕ Ч ПДОП Й ФП ЦЕ ЧТЕНС ОБ ЛПНРШАФЕТЕ НПЦЕФ ТБВПФБФШ ФПМШЛП ПДЙО ЮЕМПЧЕЛ. юФПВЩ УЙУФЕНБ Linux УНПЗМБ « ХЪОБФШ » РПМШЪПЧБФЕМС, ПО ДПМЦЕО ЧПКФЙ Ч УЙУФЕНХ (log in), ЮФП ФТЕВХЕФ ЧЧЕДЕОЙС ЙНЕОЙ РПМШЪПЧБФЕМС (login name) Й РБТПМС (password). рП РЕТЧПНХ ЙЪ ОЙИ УЙУФЕНБ ТБЪМЙЮБЕФ РПМШЪПЧБФЕМС, Б ЧФПТПК УМХЦЙФ РЕТУПОБМШОЩН « ЛМАЮПН » ДМС ЧИПДБ Ч УЙУФЕНХ; ЬФПФ ЛМАЮ РТЕДХУНПФТЕО ДМС ФПЗП, ЮФПВЩ ОЙЛБЛПК ДТХЗПК ЮЕМПЧЕЛ ОЕ УНПЗ ЧПКФЙ Ч УЙУФЕНХ РПД ЧБЫЙН ЙНЕОЕН.
оБ ФТБДЙГЙПООЩИ УЙУФЕНБИ UNIX ЙНС Й ОБЮБМШОЩК РБТПМШ ЧБН ДБЈФ УЙУФЕНОЩК БДНЙОЙУФТБФПТ, ЛПФПТЩК ПФЧЕЮБЕФ ЪБ ТБВПФХ ДБООПК УЙУФЕНЩ. оП ЕУМЙ ЧЩљ— ФПФ РПМШЪПЧБФЕМШ Linux, ОБ ЛПФПТПЗП МПЦБФУС ПВСЪБООПУФЙ УЙУФЕНОПЗП БДНЙОЙУФТБФПТБ, ФП РЕТЕД ЧИПДПН Ч УЙУФЕНХ ЧБН ФТЕВХЕФУС УПЪДБФШ УЕВЕ ЙНС РПМШЪПЧБФЕМС. ч ДБМШОЕКЫЕН ВХДЕФ ТБУУНБФТЙЧБФШУС ХУМПЧОЩК РПМШЪПЧБФЕМШ РП ЙНЕОЙ мБТТЙ, ОБ ЛПФПТПЗП Ч УЙУФЕНЕ ЪБЧЕДЕОП ЙНС РПМШЪПЧБФЕМС larry.
лТПНЕ ФПЗП, ЛБЦДПНХ ЛПНРШАФЕТХ РТЙУЧПЕОП ЙНС ЛПНРШАФЕТБ (ИПУФБ). рП ЬФПНХ ЙНЕОЙ (host name) ЛПНРШАФЕТЩ ТБУРПЪОБАФУС Ч УЕФЙ. пДОБЛП ДБЦЕ ЕУМЙ ЛПНРШАФЕТ ОЕ РПДЛМАЮЈО Л УЕФЙ, ПО ДПМЦЕО ЙНЕФШ ЙНС. дМС ЧУЕИ РТЙНЕТПЧ, РТЙЧПДЙНЩИ ОЙЦЕ, ЙНЕОЕН ЛПНРШАФЕТБ ВХДЕФ mousehouse.
уПЪДБОЙЕ ЙНЕОЙ РПМШЪПЧБФЕМС
рТЕЦДЕ ЮЕН ОБЮБФШ ТБВПФХ Ч ФПМШЛП ЮФП ХУФБОПЧМЕООПК УЙУФЕНЕ Linux, ОХЦОП УПЪДБФШ УЕВЕ ЙНС РПМШЪПЧБФЕМС ДМС РПЧУЕДОЕЧОПК ТБВПФЩ. вХДЕФ ОЕРТБЧЙМШОЩН ДМС ЬФПЗП ЙУРПМШЪПЧБФШ ЙНС root, РПФПНХ ЮФП ЬФП ЙНС ТЕЪЕТЧЙТХЕФУС ДМС ЧЩРПМОЕОЙС ПУПВЩИ ЛПНБОД Й ДМС ТБВПФ РП РПДДЕТЦБОЙА ТБВПФПУРПУПВОПУФЙ УЙУФЕНЩ. ьФЙ ЧПРТПУЩ ПВУХЦДБАФУС ОЙЦЕ.
дМС ФПЗП, ЮФПВЩ УПЪДБФШ УЕВЕ ЙНС РПМШЪПЧБФЕМС, УМЕДХЕФ ЧПКФЙ Ч УЙУФЕНХ ЛБЛ РПМШЪПЧБФЕМШ root Й ЙУРПМШЪПЧБФШ ЛПНБОДХ useradd ЙМЙ adduser . рПДТПВОЕЕ П ЬФПН НПЦОП РТПЮЙФБФШ Ч ТБЪДЕМЕ ТХЛПЧПДУФЧБ.
чИПД Ч УЙУФЕНХ
пВЩЮОП РТЙ ЧИПДЕ Ч УЙУФЕНХ ЧЩ ЧЙДЙФЕ ОБ ЬЛТБОЕ РТЙНЕТОП УМЕДХАЭЕЕ РТЙЗМБЫЕОЙЕ:
дБМЕЕ УМЕДХЕФ ЧЧЕУФЙ ЧБЫ РБТПМШ. оБВЙТБЕНЩЕ РТЙ ЬФПН УЙНЧПМЩ ОЕ ВХДХФ РПСЧМСФШУС ОБ ЬЛТБОЕ, ФБЛ ЮФП ОБВЙТБКФЕ БЛЛХТБФОП. еУМЙ РБТПМШ ВХДЕФ ОБВТБО ОЕЧЕТОП, ЧЩ ХЧЙДЙФЕ ОБ ЬЛТБОЕ УМЕДХАЭЕЕ УППВЭЕОЙЕ:
(ОЕРТБЧЙМШОП ЧЧЕДЕОП ЙНС РПМШЪПЧБФЕМС), Й РТПГЕДХТХ ЧИПДБ Ч УЙУФЕНХ РТЙДЈФУС РПЧФПТЙФШ.
рПУМЕ ФПЗП, ЛБЛ ЙНС РПМШЪПЧБФЕМС Й РБТПМШ ЧЧЕДЕОЩ РТБЧЙМШОП, НПЦОП УЮЙФБФШ, ЮФП УПУФПСМУС «ПЖЙГЙБМШОЩК» ЧИПД Ч УЙУФЕНХ, Й РТЙУФХРБФШ Л ТБВПФЕ.
чЙТФХБМШОБС ЛПОУПМШ
лПОУПМШ УЙУФЕНЩ РТЕДУФБЧМСЕФ УПВПК НПОЙФПТ Й ЛМБЧЙБФХТХ, ОЕРПУТЕДУФЧЕООП РПДЛМАЮЈООЩЕ Л ЛПНРШАФЕТХ. рПУЛПМШЛХ УЙУФЕНБ Linux СЧМСЕФУС НОПЗПРПМШЪПЧБФЕМШУЛПК ПРЕТБГЙПООПК УЙУФЕНПК, Л ЛПНРШАФЕТХ ЮЕТЕЪ РПУМЕДПЧБФЕМШОЩЕ РПТФЩ НПЗХФ ВЩФШ РПДЛМАЮЕОЩ ДТХЗЙЕ ФЕТНЙОБМЩ, ОП ПОЙ ОЕ ВХДХФ ЛПОУПМСНЙ. уЙУФЕНБ Linux, РПДПВОП ДТХЗЙН ЧЕТУЙСН УЙУФЕНЩ UNIX, РТЕДПУФБЧМСЕФ ДПУФХР Л ЧЙТФХБМШОЩН ЛПОУПМСН (ДБМЕЕљ— чл), У ЛПФПТЩИ НПЦОП ПУХЭЕУФЧМСФШ ПДОПЧТЕНЕООП ОЕУЛПМШЛП УЕБОУПЧ ТБВПФЩ Ч УЙУФЕНЕ (login session).
дМС ДЕНПОУФТБГЙЙ ЬФПЗП ЧПКДЙФЕ Ч УЙУФЕНХ. дБМШЫЕ ОБЦНЙФЕ ЛПНВЙОБГЙА ЛМБЧЙЫ Alt — F2 . чЩ УОПЧБ ХЧЙДЙФЕ РТЙЗМБЫЕОЙЕ login:. рТЙ ЬФПН РЕТЕД ЧБНЙ ЧФПТБС ЧЙТФХБМШОБС ЛПОУПМШ. юФПВЩ ЧЕТОХФШУС Л РЕТЧПК ЧЙТФХБМШОПК ЛПОУПМЙ, ОБЦНЙФЕ ЛПНВЙОБГЙА ЛМБЧЙЫ Alt — F1 . пЮЕЧЙДОП, ЮФП ЧЩ ЧЕТОХМЙУШ Ч ХЦЕ ОБЮБФЩК УЕБОУ ТБВПФЩ.
фПМШЛП ЮФП ХУФБОПЧМЕООБС УЙУФЕНБ Linux, ЧПЪНПЦОП, РТЕДПУФБЧМСЕФ ДПУФХР ФПМШЛП Л РЕТЧЩН ЫЕУФЙ (ЙМЙ ПЛПМП ФПЗП) чл, Л ЛПФПТЩН НПЦОП ПВТБЭБФШУС, ОБЦЙНБС ЛПНВЙОБГЙЙ ЛМБЧЙЫ Alt — F1 љ— Alt — F6 љ— ЙљФ.љД. лБЛ ЧЙДОП, чл љ— ПЮЕОШ НПЭОПЕ УТЕДУФЧП, РПУЛПМШЛХ РПЪЧПМСЕФ ТБВПФБФШ УТБЪХ Ч ОЕУЛПМШЛЙИ УЕБОУБИ Ч ПДОП Й ФП ЦЕ ЧТЕНС.
рТЙ ФПН, ЮФП РТЙНЕОЕОЙЕ чл ПФЮБУФЙ ПЗТБОЙЮЕОП (Ч ЛПОГЕ ЛПОГПЧ, РЕТЕД ЗМБЪБНЙ Х РПМШЪПЧБФЕМС ЧУЕЗДБ ФПМШЛП ПДОБ чл), ЬФБ ДЕНПОУФТБГЙС ДПМЦОБ УПЪДБФШ Х ЧБУ ЧРЕЮБФМЕОЙЕ П ЧПЪНПЦОПУФСИ НОПЗПРПМШЪПЧБФЕМШУЛПЗП ТЕЦЙНБ УЙУФЕНЩ Linux. ч ФП ЧТЕНС, ЛБЛ РТПЙУИПДЙФ ОЕЛПФПТБС ТБВПФБ ОБ РЕТЧПК чл, ЧЩ НПЦЕФЕ РЕТЕЛМАЮЙФШУС ОБ ЧФПТХА чл Й ТБВПФБФШ ОБД ЮЕН-ОЙВХДШ ДТХЗЙН.
пВПМПЮЛЙ Й ЛПНБОДЩ
вПМШЫБС ЮБУФШ ПВЭЕОЙС У УЙУФЕНПК Linux РТПЙУИПДЙФ ЮЕТЕЪ РПУТЕДУФЧП ЛПНБОДОЩИ ПВПМПЮЕЛ (shell). лПНБОДОБС ПВПМПЮЛБљ— ЬФП РТПЗТБННБ, ЛПФПТБС ЧПУРТЙОЙНБЕФ ЛПНБОДЩ, ЧЧПДЙНЩЕ У ЛМБЧЙБФХТЩ, Й РТЕПВТБЪХЕФ ЙИ Ч ЙОУФТХЛГЙЙ ПРЕТБГЙПООПК УЙУФЕНЕ. бОБМПЗЙЮОЩЕ ЖХОЛГЙЙ ЙУРПМОСЕФ РТПЗТБННБ COMMAND.COM
рПУМЕ ФПЗП, ЛБЛ ЧЩ ЧПЫМЙ Ч УЙУФЕНХ, ПРЕТБГЙПООБС УЙУФЕНБ ЪБРХУЛБЕФ ЛПНБОДОХА ПВПМПЮЛХ, Й ЧЩ НПЦЕФЕ ЧЧПДЙФШ ЛПНБОДЩ. рТЙЧЕДЈН РТПУФПК РТЙНЕТ. рХУФШ мБТТЙ ЧИПДЙФ Ч УЙУФЕНХ Й ПЦЙДБЕФ РТЙЗМБЫЕОЙС (prompt) УЙУФЕНЩ.
б ФЕРЕТШ РПРТПВХЕН ЪБУФБЧЙФШ УЙУФЕНХ УДЕМБФШ ЛПЕ-ЮФП ЪБВБЧОПЕ:
лБЛ ПЛБЪЩЧБЕФУС, make СЧМСЕФУС ЙНЕОЕН ОЕЛПФПТПК УЙУФЕНОПК РТПЗТБННЩ, Й ПВПМПЮЛБ ЙУРПМОЙМБ ЬФХ РТПЗТБННХ, ЛПЗДБ ЕК ДБМЙ ФБЛХА ЛПНБОДХ. л УПЦБМЕОЙА, Ч ЬФПФ ТБЪ ПРЕТБГЙПООПК УЙУФЕНЕ ОЕ ЧУЕ Ч ЬФПК ЛПНБОДЕ РПОТБЧЙМПУШ.
йФБЛ, ЮФП ЦЕ ФБЛПЕ ЛПНБОДБ? пВТБФЙНУС Л РТЙЧЕДЈООПНХ ЧЩЫЕ РТЙНЕТХ. лПНБОДПК СЧМСЕФУС РЕТЧПЕ УМПЧП Ч ЛПНБОДОПК УФТПЛЕљ— make ; ЬФП ОБЪЩЧБЕФУС ЙНЕОЕН ЛПНБОДЩ. чУЕ ПУФБМШОПЕ Ч ЛПНБОДОПК УФТПЛЕ ЧПУРТЙОЙНБЕФУС Ч ЛБЮЕУФЧЕ БТЗХНЕОФПЧ ЬФПК ЛПНБОДЩ. ч УМЕДХАЭЕН РТЙНЕТЕ:
ЙНС ЛПНБОДЩљ— cp , Б БТЗХНЕОФЩљ— foo Й bar.
лПЗДБ ЧЩ ЧЧПДЙФЕ ЛПНБОДХ, ПВПМПЮЛБ РТПЙЪЧПДЙФ ОЕУЛПМШЛП ДЕКУФЧЙК. чП-РЕТЧЩИ, ПОБ РТПЧЕТСЕФ, СЧМСЕФУС МЙ ЛПНБОДБ ЧОХФТЕООЕК ДМС ПВПМПЮЛЙ. чОХФТЕООЕК ЛПНБОДПК ОБЪЩЧБЕФУС ЛПНБОДБ, РТП ЛПФПТХА ПВПМПЮЛБ УБНБ РП УЕВЕ ЪОБЕФ, ЛБЛ ЕЈ ЙУРПМОСФШ. йНЕЕФУС ОЕУЛПМШЛП ЧОХФТЕООЙИ ЛПНБОД ПВПМПЮЕЛ, Й ПОЙ ВХДХФ ТБУУНПФТЕОЩ ОЙЦЕ. фБЛЦЕ ПВПМПЮЛБ РТПЧЕТСЕФ, ОЕ СЧМСЕФУС МЙ ЛПНБОДБ РУЕЧДПОЙНПН (alias) ДТХЗПК ЛПНБОДЩ. еУМЙ ТЕЪХМШФБФ ЧУЕИ РТПЧЕТПЛ ПФТЙГБФЕМШОЩК, ФП ПВПМПЮЛБ ЙЭЕФ РТПЗТБННХ У ЬФЙН ЙНЕОЕН ОБ ДЙУЛЕ. еУМЙ РТПЗТБННБ ОБИПДЙФУС, ПВПМПЮЛБ ЕЈ ЙУРПМОСЕФ, РЕТЕДБЧБС ЕК БТЗХНЕОФЩ, ЧЧЕДЈООЩЕ Ч ЛПНБОДОПК УФТПЛЕ.
ч РЕТЧПН ЙЪ ОБЫЙИ РТЙНЕТПЧ ПВПМПЮЛБ ЙУЛБМБ РТПЗТБННХ РПД ОБЪЧБОЙЕН make , ОБЫМБ ЕЈ Й ЪБРХУФЙМБ У БТЗХНЕОФПН cake. оБ УБНПН ДЕМЕ make љ— ЬФП РТПЗТБННБ, ЛПФПТБС ЮБУФП ЙУРПМШЪХЕФУС ДМС ЛПНРЙМЙТПЧБОЙС ЛТХРОЩИ РТПЗТБНН, Й Ч ЛБЮЕУФЧЕ БТЗХНЕОФБ Х ОЕЈ ЙУРПМШЪХЕФУС ЙНС РТПЗТБННЩ, ЛПФПТХА ОХЦОП ЛПНРЙМЙТПЧБФШ. ч ДБООПН УМХЮБЕ, ПФДБЧБС ЛПНБОДХ make cake , НЩ ПФДБМЙ РТЙЛБЪ ЛПНРЙМСФПТХ make ЛПНРЙМЙТПЧБФШ РТПЗТБННХ cake . рПУЛПМШЛХ ЛПНРЙМСФПТ make ОЕ ОБЫЈМ РТПЗТБННХ У ФБЛЙН ЙНЕОЕН, ПО ЧЩДБМ УППВЭЕОЙЕ ПВ ПЫЙВЛЕ (ЛПФПТПЕ ОБН НПЦЕФ РПЛБЪБФШУС УНЕЫОЩН) Й ЧЕТОХМ ОБУ Л РТЙЗМБЫЕОЙА ПВПМПЮЛЙ.
рПУНПФТЙН ФЕРЕТШ, ЮФП ВХДЕФ, ЕУМЙ ПВПМПЮЛБ ОЕ УНПЦЕФ ОБКФЙ РТПЗТБННХ У ЧЧЕДЈООЩН ОБНЙ ЙНЕОЕН. чЧЕДЈН УМЕДХАЭХА ЛПНБОДХ:
чУЕ ПЮЕЧЙДОП: ПВПМПЮЛБ ОЕ УНПЗМБ ОБКФЙ РТПЗТБННХ У ДБООЩН ЕК ЙНЕОЕН (ЪДЕУШљ— eat ) Й ЧЩДБМБ УППВЭЕОЙЕ ПВ ПЫЙВЛЕ. ьФП УППВЭЕОЙЕ ВХДЕФ ЮБУФП РПСЧМСФШУС, ЕУМЙ ЧЩ ВХДЕФЕ ОЕРТБЧЙМШОП ЧЧПДЙФШ ЛПНБОДХ У ЛМБЧЙБФХТЩ (ОБРТЙНЕТ, ЕУМЙ ВЩ Ч УБНПН РЕТЧПН РТЙНЕТЕ ЧЩ ОБВТБМЙ mkae love ЧНЕУФП make love ).
чЩИПД ЙЪ УЙУФЕНЩ
рТЕЦДЕ, ЮЕН ЙДФЙ ДБМШЫЕ, УМЕДХЕФ УЛБЪБФШ, ЛБЛ ЧЩИПДЙФШ ЙЪ УЙУФЕНЩ. дМС ЧЩИПДБ ЙЪ УЙУФЕНЩ ОХЦОП РПУМЕ РТЙЗМБЫЕОЙС ПВПМПЮЛЙ ЧЧЕУФЙ ЛПНБОДХ
уХЭЕУФЧХАФ Й ДТХЗЙЕ УРПУПВЩ ЧЩКФЙ ЙЪ УЙУФЕНЩ, ОП ЬФПФ СЧМСЕФУС УБНЩН ОБДЈЦОЩН.
йЪНЕОЕОЙЕ РБТПМС
уМЕДХЕФ ФБЛЦЕ ЪОБФШ, ЛБЛ ЙЪНЕОСФШ РБТПМШ. дМС ЬФПЗП ОХЦОП ЧЧЕУФЙ ЛПНБОДХ passwd . уОБЮБМБ ЬФБ ЛПНБОДБ РТЕДМПЦЙФ ЧЧЕУФЙ УФБТЩК РБТПМШ, Б РПФПН љ— ОПЧЩК РБТПМШ. ьФБ ЛПНБОДБ РПРТПУЙФ ЧБУ ЪБФЕН ЕЭЈ ТБЪ ЧЧЕУФЙ ОПЧЩК РБТПМШ ДМС РПДФЧЕТЦДЕОЙС. у РБТПМЕН ОХЦОП ПВТБЭБФШУС БЛЛХТБФОП Й ОЕ ЪБВЩЧБФШ ЕЗП, РПУЛПМШЛХ, ЕУМЙ ЧЩ ЪБВХДЕФЕ УЧПК РБТПМШ, ЧБН РТЙДЈФУС РТПУЙФШ УЙУФЕНОПЗП БДНЙОЙУФТБФПТБ УОСФШ РБТПМШ У ЧБЫЕЗП ЙНЕОЙ. еУМЙ ЧЩ љ— УБНЙ УЕВЕ УЙУФЕНОЩК БДНЙОЙУФТБФПТ, ФП ХЛБЪБОЙС РП УНЕОЕ РБТПМС ЧЩ НПЦЕФЕ ОБКФЙ Ч ТБЪДЕМЕ « хРТБЧМЕОЙЕ РПМШЪПЧБФЕМСНЙ » Ч ТХЛПЧПДУФЧЕ РП ДЙУФТЙВХФЙЧХ.
жБКМЩ Й ЛБФБМПЗЙ
ч ВПМШЫЙОУФЧЕ ПРЕТБГЙПООЩИ УЙУФЕН (ЧЛМАЮБС УЙУФЕНХ Linux) ЙУРПМШЪХЕФУС РПОСФЙЕ ЖБКМБ (file). жБКМ љ— ЬФП ОЕЛПФПТЩК « ЛХУПЛ » ЙОЖПТНБГЙЙ, ЛПФПТПНХ ДБОП ЙНС, ОБЪЩЧБЕНПЕ ЙНЕОЕН ЖБКМБ (filename). рТЙНЕТБНЙ ЖБКМПЧ НПЗХФ УМХЦЙФШ ТБВПФБ РП ЙУФПТЙЙ, РПУМБОЙЕ, РТЙЫЕДЫЕЕ РП ЬМЕЛФТПООПК РПЮФЕ, Б ФБЛЦЕ ЙУРПМОСЕНБС РТПЗТБННБ. оХЦОП ЪОБФШ, ЮФП ОБ ДЙУЛЕ ЙОЖПТНБГЙС УПИТБОСЕФУС ФПМШЛП Ч ЧЙДЕ ПФДЕМШОЩИ ЖБКМПЧ.
жБКМЩ ТБЪМЙЮБАФУС РП УЧПЙН ЙНЕОБН. оБРТЙНЕТ, УЧПК ЖБКМ У ТБВПФПК РП ЙУФПТЙЙ ЧЩ НПЦЕФЕ ОБЪЧБФШ history-paper. ч ЬФЙИ УМХЮБСИ ЙНС ЖБКМБ ЧЩВЙТБЕФУС ФБЛЙН, ЮФПВЩ ПОП ЛБЛЙН-ФП ПВТБЪПН ИБТБЛФЕТЙЪПЧБМП УПДЕТЦЙНПЕ ДБООПЗП ЖБКМБ. дМС ЙНЈО ЖБКМПЧ ОЕФ ФБЛПЗП УФБОДБТФОПЗП ЖПТНБФБ, ЛБЛПК ЕУФШ Ч УЙУФЕНЕ MS-DOS Й Ч ОЕЛПФПТЩИ ДТХЗЙИ ПРЕТБГЙПООЩИ УЙУФЕНБИ. ч РТЙОГЙРЕ, ЙНС ЖБКМБ НПЦЕФ УПДЕТЦБФШ МАВЩЕ УЙНЧПМЩ (ЪБ ЙУЛМАЮЕОЙЕН УЙНЧПМБ / љ— УНЩУМ ЬФПЗП УЙНЧПМБ ВХДЕФ ТБЪЯСУОЈО ОЙЦЕ). дМЙОБ ЙНЕОЙ ЖБКМБ ПЗТБОЙЮЕОБ 256 ЪОБЛБНЙ.
рПОСФЙЕ ЖБКМБ ФЕУОП УЧСЪБОП У РПОСФЙЕН ЛБФБМПЗБ (directory). лБФБМПЗ љ— ЬФП ОБВПТ ЖБКМПЧ. йОПЗДБ ЛБФБМПЗ ОБЪЩЧБАФ « РБРЛБ », РП БОБМПЗЙЙ У РБРЛПК, Ч ЛПФПТПК УПДЕТЦЙФУС НОПЗП ТБЪМЙЮОЩИ МЙУФПЧ. пДОБЛП ЬФБ БОБМПЗЙС ОЕ ЧРПМОЕ ФПЮОБ, РПУЛПМШЛХ ЛБФБМПЗ УПДЕТЦЙФ ОЕ УПВУФЧЕООП ЖБКМЩ, Б УУЩМЛЙ ОБ ЖБКМЩ, Б ФБЛЦЕ Й ОБ ДТХЗЙЕ ЛБФБМПЗЙ. вПМЕЕ РПДИПДСЭБС БОБМПЗЙСљ— ВЙВМЙПФЕЮОЩК ЛБФБМПЗ ЙМЙ ЛБТФПФЕЛБ. лБФБМПЗБН ДБАФУС ЙНЕОБ, РП ЛПФПТЩН ЙИ НПЦОП ТБУРПЪОБЧБФШ. лТПНЕ ЬФПЗП, ЛБФБМПЗЙ ПВТБЪХАФ УФТХЛФХТХ ФЙРБ ДЕТЕЧБ; ЙОЩНЙ УМПЧБНЙ, УХЭЕУФЧХЕФ ЕДЙОУФЧЕООЩК ЛПТОЕЧПК ЛБФБМПЗ, ЛПФПТЩК УПДЕТЦЙФ ЧОХФТЙ УЕВС ЧУЕ ПУФБМШОЩЕ ЛБФБМПЗЙ.
лБЛ УМЕДУФЧЙЕ, Л ЖБКМХ НПЦОП ПВТБЭБФШУС, ХЛБЪЩЧБС РХФШ (path) Л ЬФПНХ ЖБКМХ. рХФШ УПУФПЙФ ЙЪ ЙНЕОЙ ЛБФБМПЗБ, ЪБ ЛПФПТЩН РЙЫЕФУС ЙНС ЖБКМБ. рХУФШ, ОБРТЙНЕТ, Х РПМШЪПЧБФЕМС мБТТЙ ЕУФШ ЛБФБМПЗ papers, Ч ЛПФПТПН УПДЕТЦЙФУС ФТЙ ЖБКМБ: history-final, english-lit, masters-thesis. лБЦДЩК ЙЪ ЬФЙИ ФТЈИ ЖБКМПЧ УПДЕТЦЙФ ЙОЖПТНБГЙА П ФТЈИ ТБВПФБИ, ЛПФПТЩНЙ Ч ДБООЩК НПНЕОФ ЪБОЙНБЕФУС мБТТЙ. юФПВЩ ПВТБФЙФШУС Л ЖБКМХ english-lit, мБТТЙ НПЦЕФ ХЛБЪБФШ РХФШ Л ЖБКМХ, ОБРТЙНЕТ, УМЕДХАЭЙН ПВТБЪПН:
рТЙ ХЛБЪБОЙЙ РХФЙ, ЛБЛ НПЦОП ХЧЙДЕФШ, ЙНЕОБ ЛБФБМПЗБ Й ЖБКМБ ТБЪДЕМСАФУС УЙНЧПМПН /. рП ЬФПК РТЙЮЙОЕ ЙНЕОБ ЖБКМПЧ ОЕ НПЗХФ УПДЕТЦБФШ ЬФПФ УЙНЧПМ. рПМШЪПЧБФЕМСН УЙУФЕНЩ MS-DOS ВХДЕФ ЪОБЛПНБ ЬФБ УЙУФЕНБ ПВПЪОБЮЕОЙК, ИПФС Ч УЙУФЕНЕ MS-DOS ЧНЕУФП УЙНЧПМБ / ЙУРПМШЪХЕФУС ФБЛ ОБЪЩЧБЕНЩК « ПВТБФОЩК УМЬЫ » ( \).
лБЛ ХЛБЪЩЧБМПУШ ЧЩЫЕ, ЛБФБМПЗЙ НПЗХФ ВЩФШ ЧМПЦЕОЩ ДТХЗ Ч ДТХЗБ. рХУФШ, ОБРТЙНЕТ, Ч ПДОПН ЛБФБМПЗЕ papers ЙНЕЕФУС ДТХЗПК ЛБФБМПЗ У ЙНЕОЕН notes. лБФБМПЗ notes УПДЕТЦЙФ ЖБКМЩ math-notes Й cheat-sheet. рХФШ Л ЖБКМХ cheat-sheet РТЕДУФБЧМСЕФУС УМЕДХАЭЙН ПВТБЪПН:
нЩ ЧЙДЙН, ЮФП РХФШ Л ЖБКМХ ОБРПНЙОБЕФ ПРЙУБОЙЕ РХФЙ Ч МБВЙТЙОФЕ. лБФБМПЗ, ЛПФПТЩК УПДЕТЦЙФ ДБООЩК РПДЛБФБМПЗ, ПВЩЮОП ОБЪЩЧБЕФУС ТПДЙФЕМШУЛЙН ЛБФБМПЗПН (parent directory). ч ДБООПН РТЙНЕТЕ ЛБФБМПЗ papers СЧМСЕФУС ТПДЙФЕМШУЛЙН ДМС ЛБФБМПЗБ notes.
дЕТЕЧП ЛБФБМПЗПЧ
ч ВПМШЫЙОУФЧЕ УЙУФЕН Linux ЙУРПМШЪХЕФУС УФБОДБТФОПЕ ТБУРПМПЦЕОЙЕ ЖБКМПЧ, ФБЛ ЮФП НЕУФПРПМПЦЕОЙЕ ПУОПЧОЩИ УЙУФЕНОЩИ ЖБКМПЧ Й РТПЗТБНН МЕЗЛП ОБКФЙ. лБФБМПЗЙ ПВТБЪХАФ УФТХЛФХТХ Ч ЧЙДЕ ДЕТЕЧБ, ЛПФПТПЕ ОБЮЙОБЕФУС У ЛБФБМПЗБ /. ьФПФ ЛБФБМПЗ ОБЪЩЧБЕФУС ФБЛЦЕ ЛПТОЕЧЩН ЛБФБМПЗПН (root directory). оЕРПУТЕДУФЧЕООП Л ЛБФБМПЗХ / РТЙНЩЛБАФ ЧБЦОЩЕ РПДЛБФБМПЗЙ /bin, /etc, /dev, /usr Й ДТХЗЙЕ. ч УЧПА ПЮЕТЕДШ ЬФЙ ЛБФБМПЗЙ УПДЕТЦБФ ДТХЗЙЕ ЛБФБМПЗЙ, Ч ЛПФПТЩИ ОБИПДСФУС ЛПОЖЙЗХТБГЙПООЩЕ ЖБКМЩ УЙУФЕНЩ, РТПЗТБННЩ ЙљФ.љД.
лБЦДЩК РПМШЪПЧБФЕМШ ЙНЕЕФ УЧПК ДПНБЫОЙК ЛБФБМПЗ (home directory). ьФПФ ЛБФБМПЗ ЧЩДЕМЕО РПМШЪПЧБФЕМА ДМС ИТБОЕОЙС Ч ОЕН УЧПЙИ ЖБКМПЧ. ч РТЙЧЕДЈООЩИ ЧЩЫЕ РТЙНЕТБИ ЧУЕ ЖБКМЩ, ЛПФПТЩЕ УПЪДБМ мБТТЙ (ОБРТЙНЕТ, ЖБКМЩ cheat-sheet Й history-final), УПДЕТЦБФУС Ч ДПНБЫОЕН ЛБФБМПЗЕ РПМШЪПЧБФЕМС larry. пВЩЮОП УПВУФЧЕООЩЕ ЛБФБМПЗЙ РПМШЪПЧБФЕМЕК УПДЕТЦБФУС Ч ЛБФБМПЗЕ /home, Й ОБЪЧБОЙС ЬФЙИ ЛБФБМПЗПЧ УПЧРБДБАФ У ЙНЕОБНЙ РПМШЪПЧБФЕМЕК. фБЛЙН ПВТБЪПН, УПВУФЧЕООЩК ЛБФБМПЗ РПМШЪПЧБФЕМС larry ОБЪЩЧБЕФУС /home/larry.
фЕЛХЭЙК ЛБФБМПЗ
ч МАВПК НПНЕОФ ЧТЕНЕОЙ ПФДБЧБЕНБС ЛПНБОДБ ПФОПУЙФУС Л ФЕЛХЭЕНХ ЛБФБМПЗХ (current directory). рТЙ ЧИПДЕ Ч УЙУФЕНХ ФЕЛХЭЙН ЛБФБМПЗПН ОБЪОБЮБЕФУС ЧБЫ ДПНБЫОЙК ЛБФБМПЗ (Ч ОБЫЕН УМХЮБЕ /home/larry). пВТБЭБСУШ Л ЖБКМХ, НПЦОП ХЛБЪЩЧБФШ ЛБЛ РПМОЩК РХФШ Л ЬФПНХ ЖБКМХ, ФБЛ Й ФПМШЛП РХФШ ПФ ФЕЛХЭЕЗП ЛБФБМПЗБ.
рТЙЧЕДЈН РТЙНЕТ. х РПМШЪПЧБФЕМС larry ЕУФШ ЛБФБМПЗ papers, Й Ч ОЕН ЕУФШ ЖБКМ history-final. еУМЙ мБТТЙ ИПЮЕФ ЧЪЗМСОХФШ, ЮФП ЪБРЙУБОП Ч ЬФПН ЖБКМЕ, ПО НПЦЕФ ЙУРПМШЪПЧБФШ ЛПНБОДХ
лПНБОДБ more РТПУФП ЧЩЧПДЙФ УПДЕТЦЙНПЕ ЖБКМБ ОБ ЬЛТБО РП ПДОПНХ ЬЛТБОХ ЪБ ПДЙО ТБЪ. ч ДБООПН УМХЮБЕ, РПУЛПМШЛХ ФЕЛХЭЙН ЛБФБМПЗПН СЧМСЕФУС /home/larry, РПМШЪПЧБФЕМШ НПЦЕФ ПВТБФЙФШУС Л ЖБКМХ ПФОПУЙФЕМШОП ФЕЛХЭЕЗП ЛБФБМПЗБ Й ПФДБФШ УМЕДХАЭХА ЛПНБОДХ:
еУМЙ ЙНС ЖБКМБ (ОБРТЙНЕТ, papers/final) ОБЮЙОБЕФУС У УЙНЧПМБ, ПФМЙЮОПЗП ПФ /, ФП ЬФП ЪОБЮЙФ, ЮФП Л ЖБКМХ ПВТБЭБАФУС ПФОПУЙФЕМШОП ФЕЛХЭЕЗП ЛБФБМПЗБ. фБЛПК УРПУПВ ПВТБЭЕОЙС ОБЪЩЧБЕФУС ПФОПУЙФЕМШОЩН РХФЈН (relative path).
оБПВПТПФ, ЕУМЙ ЙНС ЖБКМБ ОБЮЙОБЕФУС УП ЪОБЛБ /, ФП УЙУФЕНБ ЙОФЕТРТЕФЙТХЕФ ЬФП ЛБЛ РПМОЩК РХФШ (full path), Ф.љЕ. РХФШ, ЛПФПТЩК ЧЕДЈФ Л ЖБКМХ, ОБЮЙОБС У ЛПТОЕЧПЗП ЛБФБМПЗБ /. ьФП ЕЭЈ ОБЪЩЧБАФ БВУПМАФОЩН РХФЈН (absolute path).
пВТБЭЕОЙЕ Л ДПНБЫОЕНХ ЛБФБМПЗХ
ч ЛПНБОДОЩИ ПВПМПЮЛБИ tcsh Й bash [4] ДПНБЫОЙК ЛБФБМПЗ НПЦОП ПВПЪОБЮБФШ УЙНЧПМПН
ЬЛЧЙЧБМЕОФОБ ФБЛПК ЛПНБОДЕ:
лПНБОДОБС ПВПМПЮЛБ ЪБНЕОСЕФ УЙНЧПМ
ЙНЕОЕН ЧБЫЕЗП ДПНБЫОЕЗП ЛБФБМПЗБ.
) НПЦОП ФБЛЦЕ ПВПЪОБЮБФШ ДПНБЫОЙЕ ЛБФБМПЗЙ ДТХЗЙИ РПМШЪПЧБФЕМЕК. фБЛ, РХФШ
karl/letters ВХДЕФ РТЕПВТБЪПЧБО ПВПМПЮЛПК Ч РХФШ /home/karl/letters, ЕУМЙ /home/karl СЧМСЕФУС ДПНБЫОЙН ЛБФБМПЗПН РПМШЪПЧБФЕМС karl. фБЛЙН ПВТБЪПН, УЙНЧПМ
љ— ЬФП РТПУФП УПЛТБЭЕОЙЕ. оЙ ПДЙО ЛБФБМПЗ ОЕ ОБЪЩЧБЕФУС
[4] ъДЕУШ ЗПЧПТЙФУС П ЛПНБОДОЩИ ПВПМПЮЛБИ tcsh Й bash . ч УЙУФЕНЕ Linux ЛПНБОДОЩЕ ПВПМПЮЛЙљ— ЬФП РТПЗТБННЩ, ЛПФПТЩЕ ЮЙФБАФ ЛПНБОДЩ, ПФДБЧБЕНЩЕ ЙН РПМШЪПЧБФЕМЕН, Й ЧЩРПМОСАФ ЙИ. вПМШЫЙОУФЧП ЧБТЙБОФПЧ УЙУФЕНЩ Linux ДМС ОПЧЩИ РПМШЪПЧБФЕМЕК ЪБРХУЛБАФ ПДОХ ЙЪ ЬФЙИ ДЧХИ ЛПНБОДОЩИ ПВПМПЮЕЛ: bash ЙМЙ tcsh .
Источник