Тарифы Услуги Сим-карты

Структура операционной системы Linux. Структура каталогов и другие базовые понятия

Понимание файловой системы Linux, структуры каталогов, размещения конфигурационных, исполняемых и временных файлов поможет вам лучше разбираться в своей системе и стать успешным системным администратором. Файловая система Linux будет непривычна именно для новичка, только что перешедшего с Windows, ведь здесь все совсем по-другому. В отличие от Windows, программа не находится в одной папке, а, как правило, распределена по корневой файловой системе. Это распределение поддается определенным правилам. Вы когда-нибудь задавались вопросом, почему некоторые программы находятся в папке /bin, или /sbin, /usr/sbin, /usr/local/bin, в чем разница между этими каталогами?

Например, программа less, находится в каталоге /usr/bin, но почему не в /sbin или /usr/sbin. А такие программы, как ifconfig или fdisk находятся в каталоге /sbin и нигде иначе.

В этой статье будет полностью рассмотрена структура файловой системы Linux, после ее прочтения вы сможете понять смысл использования большинства папок в корневом каталоге Linux.

/ - корень

Это главный каталог в системе Linux. По сути, это и есть файловая система Linux. Здесь нет дисков или чего-то подобного, как в Windows. Вместо этого, адреса всех файлов начинаются с корня, а дополнительные разделы, флешки или оптические диски подключаются в папки корневого каталога.

Обратите внимание, что у пользователя root домашний каталог /root, но не сам /.

/bin - (binaries) бинарные файлы пользователя

Этот каталог содержит исполняемые файлы. Здесь расположены программы, которые можно использовать в однопользовательском режиме или режиме восстановления. Одним словом, те утилиты, которые могут использоваться пока еще не подключен каталог /usr/. Это такие общие команды, как cat, ls, tail, ps и т д.

/sbin - (system binaries) системные исполняемые файлы

Так же как и /bin, содержит двоичные исполняемые файлы, которые доступны на ранних этапах загрузки, когда не примонтирован каталог /usr. Но здесь находятся программы, которые можно выполнять только с правами суперпользователя. Это разные утилиты для обслуживания системы. Например, iptables, reboot, fdisk, ifconfig,swapon и т д.

/etc - (etcetera) конфигурационные файлы

В этой папке содержатся конфигурационные файлы всех программ, установленных в системе.

Кроме конфигурационных файлов, в системе инициализации Init Scripts, здесь находятся скрипты запуска и завершения системных демонов, монтирования файловых систем и автозагрузки программ. Структура каталогов linux в этой папке может быть немного запутанной, но предназначение всех их - настройка и конфигурация.

/dev - (devices) файлы устройств

В Linux все, в том числе внешние устройства являются файлами. Таким образом, все подключенные флешки, клавиатуры, микрофоны, камеры - это просто файлы в каталоге /dev/. Этот каталог содержит не совсем обычную файловую систему. Структура файловой системы Linux и содержащиеся в папке /dev файлы инициализируются при загрузке системы, сервисом udev. Выполняется сканирование всех подключенных устройств и создание для них специальных файлов. Это такие устройства, как: /dev/sda, /dev/sr0, /dev/tty1, /dev/usbmon0 и т д.

/proc - (proccess) информация о процессах

Это тоже необычная файловая система, а подсистема, динамически создаваемая ядром. Здесь содержится вся информация о запущенных процессах в реальном времени. По сути, это псевдофайловая система, содержащая подробную информацию о каждом процессе, его Pid, имя исполняемого файла, параметры запуска, доступ к оперативной памяти и так далее. Также здесь можно найти информацию об использовании системных ресурсов, например, /proc/cpuinfo, /proc/meminfo или /proc/uptime. Кроме файлов в этом каталоге есть большая структура папок linux, из которых можно узнать достаточно много информации о системе.

/var (variable) - Переменные файлы

Название каталога /var говорит само за себя, он должен содержать файлы, которые часто изменяются. Размер этих файлов постоянно увеличивается. Здесь содержатся файлы системных журналов, различные кеши, базы данных и так далее. Дальше рассмотрим назначение каталогов Linux в папке /var/.

/var/log - Файлы логов

/var/lib - базы данных

Еще один тип изменяемых файлов - это файлы баз данных, пакеты, сохраненные пакетным менеджером и т д.

/var/mail - почта

В эту папку почтовый сервер складывает все полученные или отправленные электронные письма, здесь же могут находиться его логи и файлы конфигурации.

/var/spool - принтер

Изначально, эта папка отвечала за очереди печати на принтере и работу набора программ cpus.

/var/lock - файлы блокировок

Здесь находятся файлы блокировок. Эти файлы означают, что определенный ресурс, файл или устройство занят и не может быть использован другим процессом. Apt-get, например, блокирует свою базу данных, чтобы другие программы не могли ее использовать, пока программа с ней работает.

/var/run - PID процессов

Содержит файлы с PID процессов, которые могут быть использованы, для взаимодействия между программами. В отличие от каталога /run данные сохраняются после перезагрузки.

/tmp (temp) - Временные файлы

В этом каталоге содержатся временные файлы, созданные системой, любыми программами или пользователями. Все пользователи имеют право записи в эту директорию.

Файлы удаляются при каждой перезагрузке. Аналогом Windows является папка Windows\Temp, здесь тоже хранятся все временные файлы.

/usr - (user applications) Программы пользователя

Это самый большой каталог с большим количеством функций. Тут наиболее большая структура каталогов Linux. Здесь находятся исполняемые файлы, исходники программ, различные ресурсы приложений, картинки, музыку и документацию.

/usr/bin/ - Исполняемые файлы

Содержит исполняемые файлы различных программ, которые не нужны на первых этапах загрузки системы, например, музыкальные плееры, графические редакторы, браузеры и так далее.

/usr/sbin/

Содержит двоичные файлы программ для системного администрирования, которые нужно выполнять с правами суперпользователя. Например, таких как Gparted, sshd, useradd, userdel и т д.

/usr/lib/ - Библиотеки

Содержит библиотеки для программ из /usr/bin или /usr/sbin.

/usr/local - Файлы пользователя

Содержит файлы программ, библиотек, и настроек созданные пользователем. Например, здесь могут храниться программы собранные и установленные из исходников и скрипты, написанные вручную.

/home - Домашняя папка

В этой папке хранятся домашние каталоги всех пользователей. В них они могут хранить свои личные файлы, настройки программ и т д. Например, /home/sergiy и т д. Если сравнивать с Windows, то это ваша папка пользователя на диске C, но в отличии от WIndows, home как правило размещается на отдельном разделе, поэтому при переустановке системы все ваши данные и настройки программ сохранятся.

/boot - Файлы загрузчика

Содержит все файлы, связанные с загрузчиком системы. Это ядро vmlinuz, образ initrd, а также файлы загрузчика, находящие в каталоге /boot/grub.

/lib (library) - Системные библиотеки

Содержит файлы системных библиотек, которые используются исполняемыми файлами в каталогах /bin и /sbin.

Библиотеки имеют имена файлов с расширением *.so и начинаются с префикса lib*. Например, libncurses.so.5.7. Папка /lib64 в 64 битных системах содержит 64 битные версии библиотек из /lib. Эту папку можно сравнить с WIndows\system32, там тоже сгружены все библиотеки системы, только там они лежат смешанные с исполняемыми файлами, а здесь все отдельно.

/opt (Optional applications) - Дополнительные программы

В эту папку устанавливаются проприетарные программы, игры или драйвера. Это программы созданные в виде отдельных исполняемых файлов самими производителями. Такие программы устанавливаются в под-каталоги /opt/, они очень похожи на программы Windows, все исполняемые файлы, библиотеки и файлы конфигурации находятся в одной папке.

/mnt (mount) - Монтирование

В этот каталог системные администраторы могут монтировать внешние или дополнительные файловые системы.

/media - Съемные носители

В этот каталог система монтирует все подключаемые внешние накопители - USB флешки, оптические диски и другие носители информации.

/srv (server) - Сервер

В этом каталоге содержатся файлы серверов и сервисов. Например, могут содержаться файлы веб-сервера apache.

/run - процессы

Еще один каталог, содержащий PID файлы процессов, похожий на /var/run, но в отличие от него, он размещен в TMPFS, а поэтому после перезагрузки все файлы теряются.

/sys (system) - Информация о системе

Назначение каталогов Linux из этой папки - получение информации о системе непосредственно от ядра. Это еще одна файловая система организуемая ядром и позволяющая просматривать и изменить многие параметры работы системы, например, работу swap, контролировать вентиляторы и многое другое.

/root

Это домашний каталог или Домашняя папка суперпользователя. Эта директория фактически ничем не отличается от директории обычного пользователя. Данная директория по умолчанию всегда расположена в корневом каталоге файловой системы. Это было сделано для предотвращения проблем с доступом к директории /home. В случае когда к каталогу /home по какой-то причине невозможно получить доступ, в системе всегда есть возможность залогиниться под учетной записью суперпользователя, для решения возникших проблем с доступом.

/sbin

Основные системные программы для администрирования и настройки системы (iptables, ifconfig и т.д.).

/srv

Параметры, которые специфичные для окружения системы. Чаще всего данная директория пуста.

/sys

/sys - это директория, к которой примонтирована виртуальная файловая система sysfs, которая добавляет в пространство пользователя информацию ядра Linux о присутствующих в системе устройствах и драйверах. В версии ядра ниже 2.6 не использовалась.

/sys/block

/sys/block содержит директории всех блочных устройств, присутствующих в данный момент в системе.

/sys/bus

В этой директории находится список шин, определенных в ядре Linux (eisa, pci и т.д.).

/sys/class

Каталог содержит список группированных устройств по классам (printer, scsi-devices и т.д.).

/tmp

Временное хранилище данных. Аналог папки в ОС Windows - C:/Windows/Temp. Все пользователи имеют права чтения и записи в этом каталоге.

/usr

В этом каталоге хранятся все установленные пакеты программ, документация, исходный код ядра и система X Window. Все пользователи кроме суперпользователя root имеют доступ только для чтения. Может быть смонтирована по сети и может быть общей для нескольких машин.

/usr/bin

Директория дополнительных программ для всех учетных записей.

/usr/games

Каталог для размещения доступных компьютерных игр в системе.

/usr/include

Заголовочные файлы С++.

/usr/lib

Системные библиотеки для программ, расположенных в директории /usr.

/usr/local

По стандарту /usr должен быть общим для нескольких компьютеров и смонтирован по сети, а /usr/local должен содержать установленные пакеты программы только на локальной машине (к примеру, /usr - бюджет семьи, а /usr/local - личный кошелек каждого). Но чаще всего директория /usr/local используется для установки программ, которые не предназначены для конкретного дистрибутива (к примеру для пакетного дистрибутива Ubuntu в /usr находятся "родные" установленные пакеты, а /usr/local находятся собранные пакеты из исходников).

Linux (Линукс) – это операционная система, которая на сегодняшний день является фактически единственной альтернативной заменой ОС Windows от Microsoft. Свое начало Linux берет с 1991 года, когда молодой программист с Финляндии Линус Торвальдс взялся за работу над самой первой версией системы, которая и была названа в честь его имени. Рассвет популярности Linux начался с самого его возникновения. Это связано, в первую очередь, с тем, что ядро этой ОС, как и большинство программ, написанных под нее, обладают очень важными качествами.

Ядро Ядро это операционная система низкого Машинно-зависимая часть традиционного уровня, обрабатывающая файлы, работающая с ядра ОС UNIX включает следующие компоненты: дисками, сетью и выполняющая другие необходимые операции. (пока это зависит от особенностей аппаратуры); Ядро операционной системы Linux представляет элементами собой монолитную микроядерной систему архитектуры. раскрутка и инициализация системы на низком уровне с прерываний; При компиляции ядра можно разрешить динамическую первичная обработка внутренних и внешних управление памятью (в той части, которая относится к загрузку и выгрузку очень многих компонентов ядра - особенностям аппаратной поддержки виртуальной так называемых модулей. В момент загрузки модуля памяти); его код загружается на уровне системы и связывается с остальной частью ядра. Внутри модуля могут использоваться функции. любые экспортируемые ядром переключение контекста процессов между режимами пользователя и ядра; связанные с особенностями целевой платформы части драйверов устройств.

Файловая структура (система) /bin – основные двоичные пользовательские модули /boot – файлы статической загрузки /cdrom – исторически выбранная точка монтирования для CD-дисков /dev – файлы устройств /etc – конфигурационные файлы /home – домашние каталоги /lib – основные разделяемые библиотеки /lost+found – восстановленные файлы /media – подключаемые носители /proc – файлы ядра и процессов /root – домашний каталог пользователя root /srv – данные сервисных служб /tmp – временные файлы /usr – пользовательские двоичные файлы и данные, используемые только для чтения (показано на картинке)

Интерфейс (графическая оболочка) – это программа, организующая взаимодействие пользователя с компьютером. Обеспечивает поддержку окон, меню, иконок, мыши и других известных элементов GUI - графического интерфейса пользователя. На основе X строятся более сложные графические среды; наиболее популярные из них - KDE и GNOME. GUI - это набор иконок, меню, диалогов, панелей, окон, и других графических элементов, позволяющих пользователям легко работать с компьютером и приложениями. KDE и Gnome - интегрированные рабочие среды. Пользователи работают с элементами интерфейса и программами.

Утилиты Утилита (англ. utility или tool) - вспомогательная компьютерная программа в Встроенные в Linux программные утилиты и языки. составе g++ -GNU C++ компилятор; Perl - очень мощный скриптовый язык; g 77 - GNU FORTRAN компилятор; (параметрам, настройкам, установкам), либо делают процесс f 2 c - перекодировщик из FORTRAN в C; изменения параметров (автоматизируют его). Fort 77 - компилятор FORTRAN. Выполняет f 2 c, а затем общего программного обеспечения для выполнения специализированных типовых задач. Утилиты предоставляют доступ к возможностям Виды утилит по связи с ОС использует gcc или g++; Независимые утилиты, не требующие для своей работы операционной системы, Grep - поиск фрагмента текста в файлах, удовлетворяющего набранной маске. Маска определяется с Системные утилиты, входящие в поставку ОС и требующие её помощью стандартной системы обозначений, называемой наличия "регулярные выражения «; Виды утилит по функциям Диспетчеры файлов; Архиваторы (с возможным сжатием данных); Просмотрщики; Деинсталлятор - обеспечения [; программа для Tr - translation utility (другими словами - замена букв в текстовом файле); Gawk - GNU awk (используется для обработки форматированных текстовых файлов); удаления программного sed - утилита для обработки текстовых файлов;

Любая UNIX-подобная операционная система состоит из ядра, некоторых системных и прикладных программ. Системные программы используют средства, предоставляемые ядром для обеспечения выполнения различных функций операционной системы. Системные и все остальные программы выполняются «на поверхности ядра» - в пользовательском режиме. Довольно часто операционная система содержит компиляторы и соответствующие им библиотеки (GCC и C библиотеки для Linux), хотя не обязательно все языки программирования должны быть частью операционной системы. Документация, а иногда даже игры, могут являться ее частью. Обычно состав операционной системы определяется содержимым установочного диска.

Операционную систему Linux можно рассматривать в виде Unix-пирамиды, изображенной на рисунке.

Рисунок Уровни операционной системы Unix

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

На голом «железе» работает система Unix, функции которой заключаются в управлении аппаратным обеспечением и предоставлении всем программам интерфейса системных вызовов. Эти системные вызовы позволяют программа создавать процессы, файлы и прочие ресурсы, а так же управлять ими.

Все программы обращаются к системным вызовам, помещая аргументы в регистры центрального процессора и выполняя команду эмулированного прерывания для переключения из пользовательского режима в режим ядра и передачи управления операционной системе Unix. За работу команд эмулированного прерывания отвечают библиотечные функции, по одной на системный вызов. Таким образом, чтобы обратиться к системному вызову READ, программа на С должна вызвать библиотечную процедуру READ.

Помимо операционной системы и библиотеки системных вызовов все версии Unix содержать большое количество стандартных программ. К этим программам относятся: командный процессор (оболочка), компиляторы, редакторы, программы обработки текста и утилиты для работы с файлами.

Многие утилиты можно отнести к одной из трех категорий:

1 Редакторы;

Фильтры – считывают входную информацию, поступившую либо от пользователя, либо из файла или другого источника, изучают и обрабатывают ее, а затем выдают результат. Для написания скрипта-фильтра используется специальный язык AWK. К фильтрам относятся – grep, sort, wc, pr, cmp, comm., cpio, fmt, fgrep, srd;

Коммуникационные программы – используются для связи с другими пользователями Вашей системы и других систем.

Таким образом, мы можем говорить о трех интерфейсах в операционной системе Unix: интерфейс системных вызовов, интерфейс библиотечных функций и интерфейс, образованный набором стандартных обслуживающих программ.

Хотя именно последний интерфейс большинство пользователей считает системой Unix, в действительности он не имеет практически ни какого отношения к самой операционной системе и легко может быть заменен.

Дистрибутивы Linux

Дистрибутив Linux – это набор пакетов программного обеспечения, включающий базовые компоненты операционной систем (в том числе, ядро Linux), некоторую совокупность программных приложений и программу инсталляции, которая позволяет установить на компьютер пользователя операционную систему GNU/Linux без привлечения высококвалифицированного эксперта, и набор прикладных программ, необходимых для конкретного применения системы.

Признаков, по которым различаются отдельные дистрибутивы существует очень много. Вот только некоторые из них:

­ ориентация (или назначение) дистрибутива на конкретную область применений;

­ требования к аппаратному обеспечению;

­ используемая графическая оболочка (например, KDE, GNOME или XFce);

­ наличие средств локализации, обеспечивающих поддержку необходимых вам;

­ носитель, с которого может запускаться система;

­ организация процедуры начальной загрузки системы (System V или BSD);

­ используемая система управления пакетами (например, dpkg в Debian, RPM в Fedora Core). Программное обеспечение, содержащееся в пакете, поставляется в одном из двух основных видов: в виде бинарных файлов , которые предназначены для непосредственной установки в вашу систему, без какой-либо дополнительной обработки (например, компиляции) и в виде исходных текстов , которые обычно содержат текст на каком-то языке программирования, заархивированный в формате tar и упакованный программой gzip, а также вспомогательные файлы, необходимые для компиляции приложения из файлов пакета;

­ структура каталогов файловой системы (хотя все файловые системы должны по возможности соответствовать стандарту на структуру каталогов файловой системы FHS - Filesystem Hierarchy Standard);

­ родословная или история происхождения дистрибутива (большая часть современных дистрибутивов ведет свою родословную либо от Red Hat, либо от Debian);

­ состав базового устанавливаемого программного обеспечения;

­ доступность дополнительных пакетов;

­ наличие и состав коммерческих программ, включенных в дистрибутив;

­ предоставляемые инструменты управления системой и так далее...

Рассмотрев более подробно все аспекты, по которым различаются дистрибутивы, можно констатировать, что существует три существенных критерия классификации дистрибутивов Linux:

­ стиль загрузки;

­ система управления пакетами;

­ назначение дистрибутива.

5. Файловая система - это часть операционной системы, работающая

файлами, и предоставляющая способы хранения данных и организации доступа к ним, на информационном носителе или его разделе. В Unix-системах файловая система представляет собой некоторое устройство (жесткий диск или компакт-диск) или раздел диска, используемые для хранения файлов.

Основной файловой системой операционной системы Linux стала – Ext2 , с длинными именами файлов, длинными файлами и высоко производительностью. Однако Linux также поддерживает и другие файловые системы, используя для этого файловую систему NFS. При компоновке операционной системы Linux предлагает сделать выбор файловой системы, которая будет встроена в ядро. Другие файловые системы при необходимости могут динамически подгружаться во время исполнения в виде модулей.

Ext2 очень похожа на файловую систему BSD с небольшими изменениями. Размещение файловой системы Ext2 на диске показано на рисунке.

Файловая система Linux организована в виде дерева с одной исходной вершиной, которая называется корнем (записывается: « / » ), промежуточные вершины которого соответствуют каталогам, и листья - файлам и пустым каталогам. Символ « / » так же используется для разделения имен каталогов. Каждый каталог и файл файловой системы имеет уникальное полное имя. В каталоге содержатся два специальных имени: имя « . » - именующее сам этот каталог, и имя « . . » - именующее "родительский" каталог данного каталога. Файловая система Linux использует два имени пути: полное (абсолютное), которое начинается с корня, т.е. со знака « / » и родственное (относительное), которое начинается и имени текущего каталога.

6. Ext2 очень похожа на файловую систему BSD с небольшими изменениями. Размещение файловой системы Ext2 на диске показано на рисунке.

Рисунок – Размещение файловой системы Ext2 на диске

Вместо групп цилиндров Ext2 делит диск на группы блоков. Описатель группы содержит информацию о расположении битовых массивов, количестве свободных блоков и i-узлов в группе, а также количество каталогов в группе. В двух битовых массивах (блоковый битовый массив и битовый массив i-узлов) ведется учет свободных блоков и свободных i-узлов. Размер каждого битового массива равен одному блоку.

Несмотря на то, что основным назначением файловой системы является упорядочение хранимых ресурсов, программистам не очень хотелось бы “изобретать велосипед” для управления объектами других типов. В Linux объектами файловой системы являются: процессы, устройства, структуры данных ядра и параметры настройки, каналы межзадачного взаимодействия, папки, и, конечно, обычные файлы. Такое устройство файловой системы имеет как преимущества, так и недостатки. К преимуществам относится единый программный интерфейс, легкость доступа из интерпретатора команд. К недостаткам относится реализация файловой системы по методу Франкенштейна.

Файловая система состоит из четырех основных компонентов:

  1. Пространство имен – методы именования объектов и организации в виде единой иерархии
  2. API – набор системных вызовов для перемещения между объектами и управления ими
  3. Методы безопасности – схема защиты, сокрытия и совместного использования объектов
  4. Реализация – программный код, который связывает логические модели с дисковой подсистемой

Файловая система – это единая иерархическая структура, которая начинается с каталога / и разветвляется, охватывая произвольное число каталогов.

Каталог верхнего уровня называется корневым . Это моноиерархическая система отличается от используемой в Windows, где применяется понятие пространства имен, основанное на принципе деления диска на разделы.

Цепочка имен каталогов, через которые необходимо пройти для доступа к заданному файлу, вместе с именем этого файла образуют путь к файлу. Путь может быть абсолютным (например, /temp/foo ) или относительным (например, book4/filesystem ). Последние интерпретируются начиная с текущего каталога. Стоит отметить, что текущий каталог есть у каждого процесса (большинство процессов никогда не изменяют свои рабочие каталоги, и поэтому просто наследуют текущий каталог процесса, который их запустил).

Существует ограничение на длину имени файла – не более 255 символов. В имя нельзя включать символ косой черты и нулевые символы. Также есть ограничение на длину пути, который передается ядру в качестве аргумента системного вызова – 4095 байт.

Монтирование и демонтирование файловой системы

Файловое дерево формируется из отдельных частей, которые носят название файловых систем. Каждая файловая система имеет корневой каталог и список его подкаталогов и файлов. Большинство файловых систем представляет собой разделы жесткого диска или логические тома, но, как было сказано ранее, файловая система может принять облик всего, что подчиняется определенным функциональным признакам – сетевых файловых систем, компонентов ядра, дисков, устройств и т.д.

В большинстве случаев файловые системы присоединяются к файловому дереву с помощью команды mount . Эта команда связывает каталог существующего файлового дерева, называемый точкой монтирования, корневым каталогом новой файловой системы. На время монтирования доступ к прежнему содержимому точки монтирования становится невозможным. Например, команда $ sudo mount /dev/sda4 /users монтирует на устройстве /dev/sda4 файловую систему /users . По окончании монтирования можно с помощью команды ls /users просмотреть содержимое файловой системы. Список смонтированных пользователями файловых систем хранится в файле /etc/fstab . Демонтируются файловые системы с помощью команды umount . Занятую файловую систему демонтировать невозможно.

Организация файловой системы

Корневая файловая система содержит корневой каталог и минимальный набор файлов и подкаталогов. Файл ядра находится в недрах корневой файловой системы, но не имеет стандартного имени или точного местоположения.

Частью корневой файловой системы являются также каталог /etc для критических системных файлов и файлов конфигурации, каталоги /sbin и /bin - для важных ути­лит и иногда каталог /tmp - для временных файлов. Каталог /dev - это обычно ре­альный каталог, который включен в корневую файловую систему, но он (частично или полностью) может перекрываться другими файловыми системами, если ваша система виртуализировала поддержку своих устройств.

Одни системы хранят совместно используемые библиотечные файлы и прочие важ­ные программы (например, препроцессор языка С) в каталоге /lib . Другие переместили эти элементы в каталог /usr/lib , оставив для каталога /lib роль символьной ссылки.

Огромное значение имеют также каталоги /usr и /var . В первом хранится большин­ство стандартных программ и другие полезные компоненты, в частности интерактивная документация и библиотеки. Совсем не обязательно, чтобы каталог /usr был отдельной файловой системой, однако для удобства администрирования его, как правило, монти­руют именно так. Для того чтобы система могла загрузиться в многопользовательском режиме, необходимы оба каталога - /usr и /var . В каталоге /var содержатся буферные каталоги, журнальные файлы, учетная инфор­мация и прочие компоненты, специфичные для каждого компьютера. Поскольку при возникновении проблем журнальные файлы быстро разрастаются, рекомендуется помещать каталог /var в отдельную файловую систему. Домашние каталоги пользователей чаще всего хранятся в отдельной файловой си­стеме, которая обычно монтируется в корневом каталоге. Отдельные файловые системы можно использовать и для хранения больших информационных массивов, например библиотек исходных кодов программ и баз данных.

В таблице приведены стандартные каталоги и их содержимое

Каталог ОС Содержимое
/bin Все Команды операционной системы ядра
/boot LS Ядро и файлы для его загрузки
/dev Все Файлы устройств: дисков, принтеров, псевдотерминалов и т.д.
/etc Все Важные файлы запуска и конфигурации системы
/home Все Стандартные домашние каталоги пользователей
/kernel S Компоненты ядра
/lib Все Библиотеки, совместно используемые библиотеки и компоненты компилятора языка C
/media LS Точки монтирования файловых системы на съемных носителях
/mnt LSA Временные точки монтирования
/opt Все Программные пакеты необязательных приложения (которые пока не находят широкого применения)
/proc LSA Информация о всех выполняющихся процессах
/root LS Домашний каталог суперпользователя (часто просто /)
/sbin Все Команды, необходимые для обеспечения минимальной работоспособности системы
/stand H Автономные утилиты, средства диагностики и форматирования дисков
/tmp Все Временные файлы, которые могут удаляться при перезагрузке
/usr Все Иерархия дополнительных файлов и программ
/usb/bin Все Содержимое
/usr/include Все Файлы заголовков, предназначенные для компиляции C-программ
/usr/lib Все Библиотеки и вспомогательные файлы для стандартных программ
/usr/lib64 L 64-разрядные библиотеки для 64-разрядных дистрибутивов Linux
/usr/local Все Локальные программы (программы, создаваемые или устанавливаемые локальными пользователями)
/usr/sbin Все Менее важные файлы системного администрирования
/usr/share Все Элементы, общие для различных систем
/usr/share/man Все Страницы интерактивной документации
/usr/src LSA Исходные коды нелокальных программных пакетов (не находит широкого применения)
/usr/tmp Все Дополнительный каталог для временных файлов, которые могут сохраняться при перезагрузке
/var Все Системные данные и конфигурационные файлы
/var/adm Все Разное: журнальные файлы, записи об инсталляции системы, административные компоненты
/var/log LSA Системные журнальные файлы
/var/spool Все Буферные каталоги для принтеров, электронной почты и т.д.
/var/tmp Все Каталог для временного хранения файлов

Примечание: L = Linux, S = Solaris, H = HP-UX, A = AIX

Типы файлов

В большинстве реализаций файловых систем определены семь типов файлов:

  • Обычные файлы
  • Каталоги
  • Файлы байт-ориентированных (символьных) устройств
  • Файлы блочно-ориентированных (блочных) устройств
  • Локальные сокеты
  • Именованные каналы (реализующие принцип обслуживания FIFO – первым поступил первым обслужен)
  • Символьные ссылки

Определить тип существующего файла можно с помощью команды ls -ld . Первый символ в строке вывода обозначает тип объекта. Пример:

$ ls -ld /usr/include

где d – означает каталог

Возможные коды ля представления различных типов файлов представлены в таблице

Обычные файлы – это просто последовательность байтов. Файловые системы не налагают ограничения на его структуру. Текстовые документы, файлы данных, программные файлы, библиотеки функций и многое другое – все это хранится в обычных файлах. К их содержимому возможен как последовательный, так и прямой доступ.

Каталог хранит именованные ссылки и другие файлы. Он создается командой mkdir и удаляется (при условии, что он пуст) командой rmdir . Непустые каталоги можно удалять командой rm -r . Специальные ссылки ‘.’ и ‘..’ обозначают сам каталог и его родительский каталог соответственно. Такие ссылки нельзя удалить. Поскольку корневой каталог находится на вершине иерархии, ссылка ‘..’ эквивалентна ссылке ‘.’

Имя файла в действительности хранится в родительском каталоге, а не в самом файле. На файл можно ссылаться из нескольких каталогов одновременно и даже из нескольких элементов одного и того же каталога, причем у всех ссылок могут быть разные имена. Это создает иллюзию того, что файл одновременно присутствует в разных каталогах. Эти дополнительные жесткие (фиксированные) ссылки можно считать синонимами для исходных файлов, и с точки зрения файловой системы все ссылки на файл эквивалентны. Файловая система подсчитывает количество ссылок на каждый файл и при удалении файла не освобождает блоки данных до тех пор, пока не будет удалена последняя ссылка на него. Ссылки не могут указывать на файл, находящийся в другой файловой системе.

Жесткие ссылки создаются командой ln и удаляются командой rm . Синтаксис ко­манды ln легко запомнить, поскольку она является “зеркальным отражением” команды cp. Команда cp oldfile newfile создает копию файла oldfile с именем newfile, а команда ln newfile oldfile преобразует имя newfile в дополнительную ссылку на файл oldfile.

Файлы устройств позволяют программам получать доступ к аппаратным средства и периферийному оборудованию системы. Ядро включает (или загружает) специальные программы (драйверы), которые во всех деталях “знают”, как взаимодействовать с каж­дым из имеющихся устройств, поэтому само ядро может оставаться относительно аб­страктным и независимым от оборудования.

Драйверы устройств образуют стандартный коммуникационный интерфейс, кото­рый воспринимается пользователем как совокупность обычных файлов. Получив за­прос к файлу символьного или блочного устройства, файловая система передает этот запрос соответствующему драйверу. Важно отличать файлы устройств от драйверов этих устройств. Файлы сами по себе не являются драйверами.

Их можно рассматривать как шлюзы, через которые драйвер принимает запросы. Файлы символьных устройств позволяют связанным с ними драйверам выполнять соб­ственную буферизацию ввода-вывода. Файлы блочных устройств обрабатываются драй­верами, которые осуществляют ввод-вывод большими порциями, а буферизацию вы­полняет ядро. В прошлом некоторые типы аппаратных средств могли быть представлены файлами любого типа, но в современных системах такая конфигурация встречается редко.

Файлы устройств характеризуются двумя номерами: старшим и младшим. Старший номер устройства позволяет ядру определить, к какому драйверу относится файл, а младший номер, как правило, идентифицирует конкретное физическое устройство. На­пример, старший номер устройства 4 в Linux соответствует драйверу последовательного порта. Таким образом, первый последовательный порт (/ dev/tty0) будет иметь стар­ший номер 4 и младший номер 0.

Драйверы могут интерпретировать переданные им младшие номера устройств как угодно. Например, драйверы накопителей на магнитных лентах с помощью этого номе­ра определяют, необходимо ли перемотать ленту после закрытия файла устройства.

В далеком прошлом /dev играл роль общего каталога, а файлы устройств, которые в нем хранились, создавались с помощью команды mknod и удалялись командой rm . Стандартизировать работу по созданию файлов устройств помогал сценарий с именем MAKEDEV

К сожалению, эта “сырая” система плохо справлялась с безбрежным морем драйве­ров и типов устройств, которые появились в последние десятилетия. Кроме того, она способствовала возникновению разного рода потенциальных конфигурационных несты­ковок: например, файлы устройств ссылались на несуществующие устройства, устрой­ства оказывались недоступными, поскольку они не имели файлов устройств, и т.д.

В наши дни в большинстве систем реализована некоторая форма автоматического управления файлами устройств, которая позволяет системе играть более активную роль в конфигурировании собственных файлов устройств. Например, в Solaris каталоги /dev и /devices полностью виртуализированы. В дистрибутивах Linux каталог /dev является стандартным, но управлением файлами внутри него занимается демон udevd. (Демон udevd создает и удаляет файлы устройств в ответ на изменения в оборудовании, о кото­рых сообщает ядро.)

Установленные посредством сокетов соединения позволяют процессам взаимодей­ствовать, не подвергаясь влиянию других процессов. В системе UNIX поддерживается несколько видов сокетов, использование которых, как правило, предполагает наличие сети. Локальные сокеты доступны только на локальном компьютере, и обращение к ним осуществляется через специальные объекты файловой системы, а не через сетевые пор­ты. Иногда такие сокеты называют UNIX-сокетами.

Несмотря на то что другие процессы распознают файлы сокетов как элементы ка­талога, только процессы, между которыми установлено соответствующее соединение, могут осуществлять над файлом сокета операции чтения и записи. В качестве примеров стандартных средств, использующих локальные сокеты, можно назвать системы X Win­dow и Syslog.

Локальные сокеты создаются с помощью системного вызова socket . Когда с обеих сторон соединение закрыто, сокет можно удалить командой rm или с помощью систем­ного вызова unlink .

Подобно локальным сокетам, именованные каналы обеспечивают взаимодействие двух процессов, выполняемых на одном компьютере. Такие каналы еще называют фай­лами FIFO (First In, First Out - “первым поступил, первым обслужен”). Они создаются командой mknod и удаляются командой rm .

Как и в случае локальных сокетов, реальные экземпляры именованных каналов весь­ма немногочисленны и нечасто встречаются. Они редко требуют административного вмешательства.

Именованные каналы и локальные сокеты имеют практически одинаковое назначе­ние, а их обоюдное существование сложилось исторически. Если бы системы UNIX и Linux разрабатывались в наши дни, то об этих средствах взаимодействия вопрос бы не стоял; сейчас их заменили бы сетевые сокеты.

Работа с файлами в Linux

Прежде всего рассмотрим основные команды для работы с файлами и папками. Для создания файла используется команда touch , для создания директории команда mkdir .

user@ubuntu$ touch [имя файла] – создание файла

user@ubuntu$ mkdir [имя директории] – создание директории

Удаление файлов производится с помощью команды rm. Для директорий используется та же команда, только с ключом -r (рекурсивный).

user@ubuntu$ rm [имя файла] – удаление файла

user@ubuntu$ rm -r [имя директории] – удаление директории

Посмотреть в какой директории находимся можно командной pwd . Содержимое директории просматривается командой ls, которую удобно вызывать с ключом -l для просмотра расширенной информации о каждом файле. Переход на каталог осуществляется командой cd .

user@ubuntu$ pwd – текущая директория

user@ubuntu$ ls -l [путь директории] – содержимое директории

user@ubuntu$ cd [путь директории] – перейти к директории

Операции копирования и перемещения осуществляются командами cp и mv соответственно. В Linux нет специальной команды для переименования файла, вместо этого используется mv.

user@ubuntu$ cp [копируемый файл] [директория] – копирование файла

user@ubuntu$ mv [перемещаемый файл] [директория] – перемещение файла

user@ubuntu$ mv [текущее имя файла] [новое имя файла] – переименовать файл

В этом примере мы создаем директорию test/, переходим в нее командой cd. В этой директории создаем два файла file и file2. Выводим содержимое каталога командой ls -l. Копируем файл file и присваиваем ему имя file3. Переименовываем файл file в new_file командой mv . В конце удаляем все файлы в каталог командой rm *. * – обозначает любое количество символов. Переходим на каталог выше командой cd .. и удаляем каталог /test.

Права доступа в Linux

Права доступа к файлу или каталогу можно задать с помощью команды chmod . Такое право есть лишь у владельца файла и пользователя root. В Linux каждому файлу соответствует набор прав доступа, представленный в виде 8-и битов режима. Они определяют, какие пользователи имеют права читать, редактировать и исполнять файл.

Первым аргументом команды chmod является спецификация прав доступа. Второй и последующий аргументы - это имена файлов, права доступа к которым подлежат измене­нию. При использовании восьмеричной формы записи первая цифра относится к владель­цу, вторая - к группе, а третья - к другим пользователям. Если необходимо задать биты setuid/setgid или дополнительный бит, следует указывать не три, а четыре восьмерич­ные цифры: первая цифра в этом случае будет соответствовать трем специальным битам.

В таблице показано восемь возможных комбинаций для каждого трехбитового набо­ра, где символы r, w и х обозначают право чтения, записи и выполнения соответственно.

Например, команда chmod 711 myprog предоставляет владельцу все права, а осталь­ным пользователям - только право выполнения 9 .

При использовании мнемонического синтаксиса вы объединяете множество испол­нителей (u - пользователь, g - группа или о - другой) с оператором (+ добавить, – удалить и = присвоить) и набором прав доступа. Более подробное описание мне­монического синтаксиса можно найти на man-странице команды chmod, но синтаксис всегда лучше изучать на примерах.

Часто происходит такие ситуации, когда при запуске файла он ругается на недостаток прав. Решить такую проблему можно командой sudo chmod a+x file . Команда означает, что для файла file устанавливаются права на исполнение для всех пользователей.

При наличии опции -R команда chmod будет рекурсивно обновлять права доступа ко всем файлам указанного каталога и его подкаталогов. Здесь удобнее всего придержи­ваться мнемонического синтаксиса, чтобы менялись только те биты, которые заданы явно. Например, команда
chmod -R g+w mydir добавляет групповое право записи к каталогу mydir и его содержимому, не затрагивая остальные права.


Подписывайтесь на нашу