Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Системное и сетевое администрирование. Учебное пособие
.pdf
5) $HOME/.editor – задает редактор по умолчанию для данного
пользователя;
6) $HOME/.gitconfig – в файле указывается имя по умолчанию и ад-
рес электронной почты для указания в коммитах Git;
7) $HOME/.profile – командная оболочка с регистрацией выполняет
команды из скрипта.profile при запуске;
8) $HOME/.ssh/config – конфигурация SSH для конкретного пользо-
вателя.
2.10. РАБОТА С ФАЙЛОВОЙ СИСТЕМОЙ
2.10.1. Особенности файловых систем
Файловая система – это способ, которым файлы именуются, хранятся, извлекаются, обновляются на диске или в хранилище. Структура
файловой системы должна иметь предопределенный формат, понятный
системе.
Организация файловой системы – это форматирование, разметка
и способ хранения организованных структур данных на жестком диске.
Разделена такая системная оболочка на два сегмента: meta-данные (имя
файла, дата
В Linux организация данных на устройствах хранения, таких как
жесткие диски и SSD, осуществляется через сложную структуру. Она
содержит в себе блоки данных и индексные узлы (inodes). Когда создается новый файл, система назначает ему один или несколько индексных узлов, в которых сохраняются метаданные этого файла.
Каждый
фикатор, необходимый для отслеживания файла в системе. Он хранит
все сведения о файле, кроме его имени и фактического содержимого.
Фактическое содержимое файла хранится в блоках данных, их размер
определяется при организации файловой системы. В дальнейшем она
контролирует размещение этих блоков на физическом носителе, оптимизируя
того, файловая система отвечает за эффективное использование дискового пространства, размещая файлы таким образом, чтобы снизить
задержку при доступе и уменьшить фрагментацию данных. Это также
предполагает применение алгоритмов для определения наилучшего
создания, размер) и пользовательские данные.
индексный узел представляет собой уникальный иденти-
доступ к информации и минимизируя фрагментацию. Кроме
31

расположения файлов и папок на диске с учетом текущего использования и доступного пространства. Такая организация повышает гибкость и производительность системы, позволяя ей быстро находить
и обрабатывать данные, что также облегчает восстановление и управление файлами благодаря четкой компоновке индексных узлов и блоков данных.
Файловая система Linux – это древовидная (tree-shared) сложная
структура, начинающаяся с корня. Она состоит из каталогов (директорий, directory) и подкаталогов (subdirectory). Каждый файл и файловая
система взаимосвязаны между собой. Эта структура соответствует типичной схеме, предложенной FHS (стандарт, поддерживаемый System
Linux Foundation).
Для Linux существует множество различных файловых систем,
наиболее распространенными среди них являются следующие: Ext,
Ext2, Ext3, Ext4, JFS, XFS, Btrfs, Swap. Описанные типы файловых систем имеют разный функционал
и набор заданных команд.
Ext (extended file system) – расширенная файловая система, была
предложена в 1992 году и считается одной из первых. Ее функциональность была разработана частично на основе файловой системы
UNIX. Начальная цель – выйти за рамки файловой системы, существовавшей до нее (MINIX), и преодолеть ее ограничения. Сегодня практически не используется.
Ext2 – вторая расширенная файловая
система. Известна с 1993 года,
была разработана как аналог предыдущей файловой системы. В ней
были реализованы инновации в рамках объема памяти, изменена общая производительность. Она позволяет хранить до 2 ТБ данных.
Ext3 – третья расширенная файловая система, была разработана
в 2001 году. Превосходит предыдущую тем, что является журналируемой (journaling), т. е. она записывает в
отдельный журнал изменения
(обновления) файлов и данных до того, как эти действия были завершены. В этой файловой системе применяется алгоритм, позволяющий
восстановить файлы после перезагрузки.
Ext4 – четвертая расширенная файловая система, была создана
в 2006 году. Она преодолела многочисленные ограничения, которые
были в третьей версии, на сегодняшний день широко используется
и является
файловой системой по умолчанию в большинстве дистрибу-
тивов Linux.
32

2.10.2. Типы файлов в Linux
–
d
p
Выделяют следующие типы файлов Linux: обычные файлы (regular
file), именованный канал (named pipe), файл для туннелей и устройств
(device file), символическая ссылка (soft link), директории (каталоги),
сокет (socket). В табл. 2.2 приведена характеристика некоторых типов
файлов, применяемых в Linux.
Таблица 2.2
Характеристика типов файлов
Тип файлов Обозначение Назначение
Обычные файлы
Каталоги
Символьные
ссылки
Блочные
устройства
Символьные
устройства
Каналы
Сокеты s
Хранение символьных и двоичных данных
Организация доступа к файлам
l
b
c
Предоставление доступа к файлам, расположенным на любых носителях
Предоставление интерфейса для взаимодействия с аппаратным обеспечением компьютера
Организация взаимодействия процессов в операционной системе
2.10.3. Директории в Linux
В отличие от файловой системы MS Windows, которая имеет несколько корней, файловая система Linux допускает лишь один корень.
Корневой каталог является местом, где находятся все остальные директории и файлы операционной системы (обозначается прямой ко сой
чертой). Вся структура папок в Linux представлена в едином каталоге,
именуемом корневым (root directory).
К основным каталогам, входящим в корневой каталог
, относятся
следующие:
/home – домашняя директория (home directory). Разделы Linux –
это многопользовательская оболочка, поэтому отдельному пользователю назначается отдельный объект в системе, доступный исключительно ему и суперпользователю;
33

/bin (сокращенно от binary) – здесь операционная система хранит
основные программные коды. Бинарные файлы – исполняемые организованные структуры данных, содержащие откомпилированный исходный код;
/sbin (сокращенно от system binary) – эта директория зарезервирована для программного обеспечения, необходимого для регенерации,
загрузки и отката;
/opt (где opt – «необязательный») – это место, где хранятся ин-
сталлированные вручную приложения
/usr (Unix System Resources). В отличие от /bin или /sbin, которые
принадлежат приложениям, включенным в систему, эта директория
принадлежит пользовательским приложениям.
Наиболее распространенными подкаталогами являются следующие
подкаталоги /usr:
и программы;
/usr/bin – большинство двоичных программ;
/usr/include – заголовочные организованные структуры данных,
необходимые для компиляции исходного кода;
/usr/sbin – подкаталоги, предназначенные для задач, выполняю-
щихся многократно;
/usr/lib – libraries (библиотеки);
/usr/src – исходные тексты ядра, файлы заголовков (header files);
/usr/share – разделяемые от архитектуры файлы (документы,
иконки, шрифты).
Изначально каталог /usr предназначался для всего, что связано
с пользователем, но со временем он потерял свое значение и теперь это
место для хранения программного обеспечения и пользовательских
данных.
Library files – это программы, используемые совместно другими
приложениями; /lib – библиотека (library), т. е. директории библиотечных файлов (/lib /lib32 /lib64).
/boot – это статический
файл ядра (kernel) и файлы (configuration files), необходимые для запуска компьютера.
/sys – это место, где пользователь (user) взаимодействует с ядром
(kernel). Его рассматривают как путь к ядру со структурой, заданной
заранее. В директорию монтирована виртуальная файловая система
загрузчик, который содержит исполняемый
34

sysfs, т. е. интерфейс ядра для доступа к данным подключенных
устройств.
/tmp – это место, где хранят временные структуры данных
(temporary files), необходимые приложениям во время сеанса работы.
/dev – это место, где находятся файлы устройств (special files), при
помощи которых программное обеспечение взаимодействует с периферией. Файлы устройств разделяют на символьные и блочные. Блочное
устройство (block device) выполняет ввод
данных в виде блоков (например, SSD диск), а символьное устройство
(symbol device) выполняет ввод-вывод информации в виде символов
(например, клавиатура).
/proc – это место, где хранится информация о процессах. В данном
каталоге находятся псевдофайлы (pseudofiles), содержащие сведения
о системных ресурсах.
/run – это директория, в которую монтируется виртуальная файловая система tmpfs для хранения
процессами. Здесь находятся сведения о времени выполнения оперативной памяти. Эти файлы хранятся в оперативной памяти и по завершении сеанса исчезают.
/root – это каталог для администратора (super user), домашняя директория пользователя root.
файлов, связанных с выполняющимися
-вывод информационных
2.10.4. Монтирование файловых систем
Чтобы данные раздела диска стали доступны, этот раздел должен
быть смонтирован в корневую файловую систему. Существуют следующие виды монтирования.
1. Временное через консольную команду mount.
2. Постоянное через файл /etc/fstab.
3. Монтирование с помощью службы systemd.
К основным опциям монтирования относятся следующие:
1) auto – файловая система монтируется автоматически;
2) ro – монтируется в режиме «только
3) rw – монтируется в режиме «чтение и запись»;
4) dev – файловая система может содержать файлы блочных и сим-
вольных устройств;
5) exec – файловая система может содержать исполняемые файлы;
6) suid – разрешено использование битов SUID и SGID;
чтение»;
35

7) user – обычному пользователю разрешено размонтировать дан-
ную файловую систему и при этом используются значения по умолчанию (noexec, nosuid, nodev);
8) defaults – установки по умолчанию (rw, suid, dev, exec, nouser,
async);
9) codepage (кодовая страница) – разрешено применять указанную
кодировку к именам файлов;
10) nodev – файловая система не может содержать файлы блочных
и символьных устройств;
11) noexec – файловая система не позволяет запускать
файлы;
12) nosuid – запрещено использование битов SUID и SGID;
13) nouser – обычному пользователю запрещено размонтировать
данную файловую систему.
исполняемые
2.10.5. Ключевые команды с файлами и папками в Linux
Через терминал в Linux доступен обширный арсенал команд для
работы с файлами и каталогами. К основным из них можно отнести
следующие:
1) ls – позволяет просмотреть, что находится внутри папки. Мож-
но использовать с различными опциями;
2) mkdir [имя каталога] – можно использовать для создания новой
папки;
3) cat [имя файла] – выводит текст файла прямо
4) less [имя файла] – дает возможность пролистывать содержимое
указанного файла по страницам;
5) touch [имя файла] – позволяет инициировать создание нового
файла без содержимого при условии, что файл с таким именем еще не
существует;
6) rm [имя файла] – удаляет указанный файл;
7) rm -r [имя каталога] – удаляет каталог и все его содержимое
курсивно;
8) ln -s [оригинальный файл] [ссылка] – формирует символиче-
скую ссылку, указывающую на выбранный файл или директорию;
9) pwd – выводит текущее местоположение в структуре каталогов;
10) which [программа] – показывает полный путь к исполняемому
файлу;
в окно терминала;
ре-
36

11) cd [путь к папке] – изменяет текущую директорию на указан-
ную;
12) cp [исходная папка] [целевая папка] – копирует файлы из одно-
го места в другое;
13) mv [текущий файл/каталог] [целевой каталог или новое имя] –
может как переместить, так и переименовать файлы или папки;
14) locate [имя файла] – помогает быстро найти файлы, соответ
-
ствующие заданному шаблону.
Эти команды можно считать основой для взаимодействия с файловой системой Linux. При необходимости их можно комбинировать или
расширять с помощью различных опций для выполнения сложных
задач.
2.11. РАБОТА С ПРОЦЕССАМИ
Операционную систему можно рассматривать как программное
обеспечение, создающее единое абстрактное представление ресурсов,
которые могут быть запрошены приложениями и
к которым они могут
получить доступ. В качестве таких ресурсов выступают основная память, файловые системы, сетевые интерфейсы и др. Соответственно
если есть такие абстракции ресурсов, которыми могут пользоваться
приложения, то нужна также система управления использованием этих
ресурсов. Для эффективного распределения имеющихся ресурсов
в современных операционных системах принята модель, в
которой выполнение приложения соответствует существованию одного или нескольких процессов.
Процесс – это совокупность взаимосвязанных и взаимодействующих действий, преобразующих входящие данные в исходящие. Поскольку программа – это совокупность инструкций, то процесс представляет собой непосредственное выполнение этих инструкций.
Важными элементами процесса являются программный код, который может совместно использоваться другими
процессами, и набор
данных, связанный с этим кодом. Следует также отметить, что любой
процесс имеет ряд связанных с ним элементов: идентификатор, приоритет по сравнению с другими процессами, состояние (например, выполнение или блокировка), указатели памяти, информация о состоянии
ввода-вывода и др. С каждым процессом связывается его адресное
пространство,
из которого он может читать и в которое он может
37

писать данные. Адресное пространство или образ памяти содержит
саму программу, данные к программе и стек программы. Таким образом, процесс – это контейнер, в котором содержится вся информация,
необходимая для работы программы.
Выделяют активные и фоновые процессы. Активный процесс имеет возможность вводить данные с терминала. В каждый момент у каждого
терминала может быть не более одного активного процесса.
Фоновый процесс – это процесс, не имеющий возможности вводить
данные с терминала. Пользователь может запустить любое число фоновых процессов, не превосходящее заранее заданного в системе.
Кроме того, процессы можно условно разбить на три категории: системные, фоновые (демоны) и прикладные (пользовательские). Фоновые процессы, предназначенные для обработки какой-либо активной
деятельности (например, связанной с электронной почтой, веб-страницами и др.), называются демонами [8].
Часто выделяют пять основных состояний процесса: выполнения
(действия), готовности к выполнению (готовности), заблокированный
(иногда используется термин «ожидающий»), новый и завершающий-
ся. Взаимодействие состояний
процесса приведено на рис. 2.3,
где цифрами
1 – процесс заблокирован
в ожидании ввода;
2 – диспетчер выбрал дру-
гой процесс;
3 – диспетчер выбрал этот
Рис. 2.3. Модель переходов между
состояниями процесса
В целом концепцию процесса можно охарактеризовать свойством
владения ресурсами, а также свойством планирования/выполнения.
Соответственно по отношению к процессам операционная система выполняет планирование и диспетчеризацию. По
но рассматривать независимо. Тогда единицу диспетчеризации можно
назвать потоком (thread) или облегченным процессом (lightweight
process), а единицу владения ресурсами – процессом (process) или заданием (task). Тогда многопоточностью (multithreading) будет являться
способность операционной системы поддерживать в рамках одного
процесс;
4 – входные данные стали
доступны.
показаны:
сути, эти свойства мож-
38

процесса несколько параллельных путей выполнения. Если рассматривать конкретную операционную систему, такую как Linux, то там процесс (задание) представляется структурой данных task_struct. В этой
структуре данных информация разбивается на следующие категории:
состояние, информация по планированию, идентификаторы, обмен информацией между процессами, связи, файловая система, адресное пространство и др.
Загрузка Linux завершается тем
, что на всех виртуальных консолях,
предназначенных для работы пользователей, запускается программа
getty, которая выводит приглашение и ожидает активности пользователя. Введенное входное имя getty передает программе login – она вводит
пароль и определяет, разрешено ли работать в системе с этим входным
именем и этим паролем. Если login приходит к выводу, что работать
можно, то он
запускает стартовый командный интерпретатор, посредством которого пользователь и управляет системой. Выполняющаяся
программа называется в Linux процессом. Все процессы система регистрирует в таблице процессов, присваивая каждому уникальный номер –
идентификатор процесса (process identificator, PID). Манипулируя процессами, система имеет дело именно с их идентификаторами: другого
способа отличить один процесс от другого нет. Для просмотра
своих
процессов можно воспользоваться утилитой ps («process status»).
Запуск одного процесса вместо другого устроен в Linux с помощью
системного вызова exec(). Старый процесс из памяти удаляется навсегда, вместо него загружается новый, при этом настройка окружения не
меняется, даже PID остается прежним. Вернуться к выполнению старого процесса невозможно, разве что запустить его снова с помощью
того
же exec() (от «execute» – «исполнить»). При этом имя файла (про-
граммы), из которого запускается процесс, и собственное имя процесса
(в таблице процессов) могут и не совпадать. Собственное имя процесса
– это такой же параметр командной строки, как и те, которые переда-
ются ему пользователем: для exec() требуется путь к файлу, полная командная
строка, ее нулевой (стартовый) элемент – название команды.
Параллельность работы процессов в Linux дискретная. Здесь и сейчас выполняться может столько процессов, сколько центральных процессоров есть в компьютере, например один. Дав этому одному процессу немного поработать, система запоминает все, что необходимо
ему для работы, приостанавливает его, и запускает следующий процесс
, потом следующий и т. д. Возникает очередь процессов, ожидаю-
39

щих выполнения. Только что поработавший процесс помещается в конец этой очереди, а следующий выбирается из ее начала. Когда очередь
вновь доходит до того первого процесса, система вспоминает необходимые для его выполнения данные (они называются контекстом процесса), и он продолжает работать. Такая схема разделения времени
между процессами носит название
псевдопараллелизма.
Особенности межпроцессного взаимодействия: в Unix-подобных
системах используется системный вызов fork(), который создает точную копию вызывающего процесса. После выполнения системного вызова fork() два процесса, родительский и дочерний, имеют единый образ памяти, единые строки описания конфигурации и одни и те же
открытые файлы. После этого дочерний процесс обычно изменяет
образ
памяти и запускает новую программу, выполняя системный вызов execve() или ему подобный. Для всех процессов существует ряд
ситуаций, когда им приходится взаимодействовать. Классический
пример – согласование действий процессов во время печати документа, когда один процесс поставляет данные, а другой выводит их на
печать. Если будет наблюдаться рассогласованность, то может возникнуть
ситуация, когда печать может начаться раньше, чем поступят
актуальные данные.
Одним из средств передачи информации между процессами являются каналы – разновидность «псевдофайла», используемая для соединения двух процессов. Информация записывается и считывается на
разных концах канала. Существует два типа каналов: именованные
и неименованные. Совместно использовать неименованные каналы могут только
связанные друг с другом процессы; не связанные друг с другом процессы могут совместно использовать только именованные
каналы.
2.12. РАБОТА С ВНЕШНИМИ УСТРОЙСТВАМИ
В Linux работа с внешними устройствами, такими как USBнакопители, принтеры, сетевые адаптеры и другие, осуществляется
через файловую систему, а именно через специальные файлы
устройств в каталоге /dev. Эти файлы предоставляют
интерфейс для
взаимодействия с аппаратным обеспечением. При подключении
устройства система автоматически его распознает и создает соответствующий файл устройства в /dev.
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
