-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathideology.tex
79 lines (76 loc) · 13.1 KB
/
ideology.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
\chapter {Идеология unix}
\section {Компоненты}
\subsection{ядро ОС}
Ядро операционной системы обеспечивает уровень абстракции над аппаратурой компьютера и обеспечивает удобства пользователя.
\subsection{средства инициализации системы}
Чтобы система была готова к работе с пользователем, нужно выполнить определённый набор действий.
Как минимум нужно отконфигурировать сетевую подсистему, смонтировать файловые системы, установить системные часы, запустить необходимые фоновые процессы (например планировщик).
\par
Всё это делается средствами инициализации системы. В общем случае UNIX система при старте запускает исполняемый файл, лежащий в /sbin/init. Далее этот исполняемый файл становится процессом 1 и отслеживает процесс инициализации системы. В дальнейшем я описываю стартовый процесс для SysV системы. Для BSD систем он несколько отличается, но начинается всё там же - в /sbin/init
\par
Следующие шаги инициализации описаны в файле /etc/inittab, который читается процессом init. В нём указана последовательность действий при инициализации, записаны процессы, которые должны стартовать на каждом runlevel-е. По этим правилам, управление передаётся набору скриптов в /etc/rc[0-6].d/, которые отвечают за старт/остановку системных сервисов.
\par
В linux-системах, эти скрипты именуются по маске [S|K][0-9][0-9]имя, и являются символическими ссылками на скрипты находящиеся в /etc/init.d/. Разберём строение имени символической ссылки: S - стартовать сервис на данном runlevel-е.
K - остановить.
цифры - порядок выполнения данных действий.
имя - символическое имя, чтобы сисадмин оставался белым и пушистым, и чтобы волосы у него не седели от стресса.
\subsection{системные утилиты, обеспечивающие исполнение ядром его функций}
Сюда входят утилиты загрузки модулей ядра, демоны создания файлов устройств, утилиты конфигурирования сетевой подсистемы.
\subsection{пользовательске утилиты}
В этот раздел входят те программы, что предназначены для использования обычным пользователем (команы операций с файлами, awk, sed, bc, текстовые редакторы и тд).
\subsection{системные библиотеки}
Библиотеки предназначены для предотвращения дублирования кода, за счёт его разделения между приложениями.
\subsection{командная оболочка}
Собственно командная оболочка выделена только потому что, это один из основных способов взаимодействия с UNIX системой (графическую подсистему мы пока не рассматриваем). Кроме того, эта же оболочка используется для исполнения скриптов, являющихся основой системы инициализации UNIX.
\subsection{система документации}
Так как система без документации бесполезна, а бумажные руководства пользователь не читает, пока его не клюнет жареный петух, то возникает необходимость в системе документации. Тем более, что пользователь просто не может помнить абсолютно все возможные опции команд и форматы конфигурационных файлов.
В систему документации входят утилиты man, apropos и info.
Утилита man выводит документацию по конкретной команде.
Утилита apropos выполняет поиск по ключевым словам в базе данных man. Она используется, когда пользователь не знает точного имени команды или раздела man.
Утилита info (из пакета texinfo) обеспечивает доступ к альтернативной системе документации info. Она отличается от базы данных man, тем, что она структурирована и связана гиперссылками.
\section {Основные принципы}
\subsection{всё есть поток байтов}
\subsection{лень читать вывод программы - дай это другой программе или конвеер}
Если
\subsection{модульность - программа должна делать одно дело, но хорошо}
\subsection{администратор может всё. Пользователь может только убить себя об стену (вынести содержимое своего \$home) на этом в общем случае его привилегии и заканчиваются.}
\subsection{Права доступа}
В UNIX стандартная модель прав определяет 3 степени разделения прав:
\begin{enumerate}
\item для владельца
\item для группы
\item для всех остальных
\end{enumerate}
Всего есть 3 основных права: чтение, запись, исполнение. Право на исполнение для каталога означает право на вход в него. Права записываются либо в виде 3-х разрядного восьмеричного числа.
1 - исполнение (x)
2 - чтение (r)
4 - запись (w)
записывается это в виде: rwxrwxrwx где первые 3 знака это права владельца, вторые - группы, третьи - всех остальных.
Как уже упоминалось у файлов есть понятие владельца и группы. Это позволяет достаточно просто и в то же время гибко управлять правами доступа.
\subsection{Типы файлов}
\subsubsection{Файл}
Просто пользовательские данные, поток байтов :).
\subsubsection{Каталог}
В UNIX каталог это тоже файл, в некоторых версиях (например в netbsd) его даже можно прочитать как файл.
\subsubsection{Символьное устройство}
Устройства в unix делятся на две категории - символьные и блочные. Символьные устройства позволяют обеспечить посимвольный доступ к ним - это последовательные порты, устройства ввода и многие другие.
\subsubsection{Блочное устройство}
Блочные устройства, это устройства, обращение к которым идёт только блоком - например жесткие диски или ленточные накопители. Файлы устройств обычно лежат в каталоге /dev и выглядят на выводе ls -l вот так:
brw-rw---- 1 root disk 8, 0 Фев 17 19:57 sda
crw------- 1 root root 10, 1 Фев 17 19:57 psaux
первое устройство блочное, второе символьное.
\subsubsection{Мягкая ссылка}
В системе unix поддерживается понятие ссылки. Ссылка - это специальный тип файла, который позволяет обращаться к одному и тому же файлу по нескольким именам (например для экономии дискового пространства).
Ссылки бывают мягкие и жесткие. Мягкая ссылка, это файл, содержащий путь, по которому нужно искать объект, на который указывает ссылка.
\subsubsection{Жесткая ссылка}
Жесткая ссылка внешне не отличима от обычного файла, в этом её преимущество. Недостаток в том, что жесткая ссылка может указывать только в пределы той файловой системы, на которой она находится.
\subsubsection{Именованный канал (FIFO)}
Именованный канал или FIFO это одно из средств межпроцессного взаимодействия в unix. Используется он для передачи данных между процессами в одном направлении. Для использования, один процесс открывает FIFO на чтение как файл, а второй на запись. В результате возникает однонаправленный канал передачи данных, буферизируемый ядром системы. Создаются именованные каналы с помощью команды mkfifo
\subsection{Имена файлов - как можно и как нельзя. И главное - как желательно}
В unix файлы могут иметь практически произвольные имена. Ограничением является только требование, чтобы длина пути не превышала 256 символов. Единственная рекомендация - не включать управляющие символы в имя файла (сложно сделать что-то с файлом, названным '-' или '*', но можно. Попробуйте сами).
Имена файлов даются в кодировке используемой unix системы, а так как ходовых русских кодировок в unix 3 штуки, следует осторожно относится к называнию файлов русскими именами.
Ещё одно пожелание к названиям файлов - отсутствие в них пробелов (уж сколько пользователей встало на эти грабли при написании скриптов, а файлы так продолжают называть).
\subsection{Понятие потоков stdin, stdout, stderr.}
Любой запускаемый процесс в unix автоматически получает 3 потока ввода-вывода, называемые stdin, stdout,stderr. Первый из них предназначен для ввода данных, второй для вывода, третий для вывода сообщений об ошибках. По умолчанию только stderr является небуферизированным потоком. Остальные 2 потока ввода вывода буферизированы по концу строки, то есть вывод производится только при появлении конца строки в данных потоках.
Отдельный поток для вывода ошибок позволяет перенаправить его в файл лога и анализировать позднее.
Перенаправление ввода вывода, как уже было сказано выше является одной из основ идеологии unix (если тебе лень читать вывод программы - заставь его читать другую программу).