Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Файловая система Linux и структура каталогов

Читайте также:
  1. A) структура рабочего стола
  2. ERP — информационная система масштаба предприятия
  3. GNU/Linux
  4. GNU/Linux
  5. I Операционная система ОС Unix
  6. I Операционная система ОС Unix
  7. I Операционная система ОС Unix
  8. I. Правосознание: понятие, структура, функции и виды.
  9. I. Система социального регулирования общественных отношений.
  10. I. Система социального регулирования общественных отношений.

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

Ядро Linux состоит из шести основных подсистем:

· управления процессами;

· взаимодействия между процессами;

· управления памятью;

· управления файловой системой;

· управления операциями ввода/вывода;

· сетевая подсистема.

Все шесть подсистем контролируют доступ к системным ресурсам (рис.6.6).

 

Рис.6.6. Архитектура Linux

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

Подсистема взаимодействия процессов (Interprocess communication, IPC) ядра позволяет процессам взаимодействовать друг с другом. Эта подсистема работает совместно с диспетчером процессов, обеспечивая совместный доступ к информации и передачу сообщений с помощью самых разнообразных методов.

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

Пользователи получают доступ и файлам и папкам, перемещаясь по дереву каталогов. Корень дерева каталогов называется корневым (root) каталогом. Из корневого каталога пользователи могут перейти к любой доступной файловой системе. Пользовательские процессы запрашивают данные файловой системы через интерфейс системных вызовов. Когда системе нужен доступ к файлу или папке дерева каталогов, взаимодействие осуществляется через интерфейс виртуальной файловой системы (virtual file system, VFS), обеспечивающий единый способ доступа ко всем файлам и каталогам, размещенным в неоднородных файловых системах (например, ext2 и NFS). Виртуальная файловая система передает запросы конкретной файловой системе, которая отвечает за схему размещении и место хранения данных.

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

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

Пользователь взаимодействует с ядром при помощи специальной программной оболочки (shell) или с помощью прикладных программ, в которых предусмотрены средства передачи команд от пользователя в ядро. По существу, shell является одной из прикладных программ, предназначенной для интерпретации команд пользователя, которые передаются с клавиатуры (или мыши) из удобной для человека формы в ядро Linux. Команды преобразуются в коды, которые понимает ядро ОС. Оболочки shell бывают различные: командные или графические, например, KDE или GNOME. К известным оболочкам командного типа можно отнести: ash, bash, sh, ksh и другие, которые для управления системой предоставляют пользователю командную строку и развитую систему сообщений. Все они имеют встроенный интерпретатор команд пользователя и работают примерно одинаково.

Организация процессов и потоков (задач - в терминологии Linux). Диспетчер процессов хранит список всех задач в виде двух структур данных. Первая структура представляет собой кольцевой список, каждая запись которого содержит указатели на предыдущую и последующую задачу. Обращение к этой структуре происходит в том случае, когда ядру необходимо проанализировать все задачи, которые должны быть выполнены в системе. Второй структурой является хэш-таблица. При создании задачи ей присваивается уникальный идентификатор процесса (process identifier, PID). Идентификаторы процессов передаются хэш-функции для определения местоположения процесса в таблице процессов. Хэш-метод обеспечивает быстрый доступ к специфическим структурам данных задачи, если ядру известен ее PID.

Каждая задача таблицы процессов представляется в виде структуры task_struct, служащей в роли дескриптора процесса (т.е. блока управления процессором (РСВ). В структуре task_struct хранятся переменные и вложенные структуры, описывающие процесс.

Задача переходит в состояние running (выполнения) после ее передачи в процессор (см. рис. 6.7). При блокировке задача переходит в состояние sleeping (спячки), а при приостанове работы в состояние останова (stopped). Состояние zombie (зомби) показывает, что выполнение задачи прекратилось, однако она еще не была удалена из системы. Например, если процесс состоит из нескольких потоков, он будет пребывать в состоянии зомби, пока все потоки не получат уведомление о завершении работы основного процесса. Задача в состоянии dead (смерти) может быть спо-

 

 

 

 


Рис.6.7. Граф переходов состояний задач

 

койно удалена из системы. Состояния active (активный) и expired (неактивный) используются при планировании выполнения процесса, и поэтому они не сохраняются в переменной state.

При загрузке ядра обычно запускается процесс init, который использует ядро для создания всех остальных задач. Задачи создаются путем вызова системной функции clone.

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

После создания задачи с помощью clone, она помещается в очередь выполнения процессора, содержащую ссылки на все задачи, состязающиеся за процессорное время. Массив приоритетов содержит указатели на отдельные уровни очереди выполнения.

Когда задача переходит в состояние блокировки либо спячки, или же ее выполнение прекращается по какой-либо иной причине, задача удаляется из очереди выполнения.

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

Управление памятью. В Linux выделение памяти осуществляется, как правило, с использованием одного и того же размера страницы (чаще 4 КБ или 8 КБ). В ряде архитектур, где поддерживаются страницы большего размера (например, 4 МБ), код ядра может размещаться в страницах большего размера.

Организация виртуальной памяти. В 32-битовых системах каждый процесс позволяет адресовать 232 байтов, то есть виртуальное адресное пространство процесса составляет 4 ГБ. В 64-битовых системах ядро поддерживает виртуальную адресацию до 2 петабайт (т.е. 2 миллионов гигабайт). Записи, описывающие связь физических адресов с виртуальными, хранятся в таблицах страниц каждого процесса. Система виртуальной памяти поддерживает до трех уровней таблиц страниц для определения связей между виртуальными страницами и страничными блоками(см. рисунок 6.8). Первый уровень иерархии таблицы страниц (глобальный каталог страниц) хранит адреса таблиц второго уровня. Таблицы второго уровня, называемые промежуточными каталогами страниц (page middle directory) содержат ссылки на таблицы третьего уровня. Третий уровень, на котором размещаются сами таблицы страниц, непосредственно задает отображение виртуальных страниц в страничные блоки (кадры страниц).

Организация физической памяти. Система управления памятью делит физическое адресное пространство системы на три зоны (memory zone) (см. рис. 6.9).

 

 

Рис.6.8. Организация таблиц страниц

 
 

 

 


Рис.6.9. Организация зон физической памяти (архитектура IA-32)

 

 

Размер каждой зоны зависит от конкретной архитектуры системы. Первая зона, называемая зоной прямого доступа к памяти (DMA memory) включает в себя основную память с адресами от0 до 16 МБ. Зона памяти DMA содержит данные и инструкции ядра (например, код программ начальной загрузки). Именно из этой зоны должна выделяться память для пользовательских процессов, когда свободная память в других зонах заканчивается.

Вторая зона, зона обычной памяти (normal memory), включает физическую память с адресами от 16 до 896 МБ. Зона обычной памяти может использоваться для хранения пользовательских страниц и страниц ядра, а также данных устройств, способных работать в режиме DMA с памятью свыше 16 МБ.

Третья зона, называемая верхней памятью (high memory), включит физическую память свыше 896 МБ и вплоть до 64 ГБ на процессорах Pentium. Верхняя память выделяется для пользовательских процессов, любых устройств, которые могут обращаться к данным областям памяти, и временных структур данные ядра.

Замена страниц. Диспетчер памяти Linux самостоятельно определяет, какие страницы следует хранить в ОЗУ, а какие могут быть выгружены на диск (этот процесс носит название подкачки или свопинга) в случае нехватки свободной памяти. Свопинг возможен только для страниц из виртуального адресного пространства пользователя. Поэтому страницы, содержащие код и данные ядра не могут участвовать в свопинге.

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

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

Подкачка. Когда в системе возникает дефицит доступных страничных блоков, ядро должно принять решение о том, какие страницы памяти следует вы ­ грузить, чтобы иметь свободные страницы памяти для обслуживания по­следующих запросов. За выполнение данной задачи отвечает демон под­качки kswapd, который высвобождает страницы, сохраняя неактуальные страницы на вторичном устройстве хранения. Если страница памяти отражает содержимое файла определенной файловой системы (т.е. когда данные файла хранятся в основной памяти), система обновляет файл, сохраняя в нем все изменения, которые были внесены в его копию в памяти.

Файловые системы ОС Linux рассмотрены в разделе 4.7.

Управление операциями ввода/вывода

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

Как правило, драйверы устройств реализуются в виде загружаемых модулей ядра. Драйверы, выпущенные в виде модулей, легко можно загружать и выгружать по требованию, благодаря чему отпадает необходимость их постоянного включения в ядро. Большинство устройств в системе Linux представлено в виде специальных файлов устройств (device special file). Специальные файлы устройств — это элементы каталога /dev, предоставляющие доступ к определенному устройству. Каждый файл в каталоге /dev соответствует блочному, либо символьному устройству. Список загруженных в текущий момент времени драйверов блочных и символьных устройств можно увидеть в файле /proc/devices.

Доступ к специальным файлам устройств организуется при помощи виртуальной файловой системы. Системные вызовы передаются виртуальной файловой системе, которая, в свою очередь, вызывает драйверы устройств.

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

Символьные устройства (character device) передают данные в виде потока байтов. В данную категорию попадают принтеры, консоли, клавиатура, манипуляторы мышь и модемы. Поскольку передача данных осуществляется в виде потока байтов, большинство символьных устройств поддерживают только последовательный доступ к данным. В драйверах символьных устройств реализованы базовые операции, например, открытие, закрытие, чтение и запись в символьное устройство.

В отличие от символьных устройств, блочные устройства позволяют обращаться к данным, хранимым в блоках фиксированного размера, в любой момент времени, независимо от того, где именно на устройстве хранятся эти данные. Для облегчения произвольного доступа к большим массивам информации (например, файлам на жестком диске) ядро должно реализовать систему управления блочными устройствами ввода/вывода, которая по сравнению со схемой управления символьными устройствами ввода/вывода является более сложной. С этой целью в ядро включены алгоритмы, которые пытаются оптимизировать работу накопителей с подвижными го­ловками. Подобно символьным устройствам, блочные устройства идентифициру­ются с помощью основного и дополнительного номеров. Подсистема блочного ввода/вывода ядра состоит из нескольких уровней, что позволяет придать модульность операциям ввода/вывода, благодаря помещению общего блока кода на каждом уровне. На рисунке 6.10 изображены уровни, через которые проходят блочные запросы ввода/вывода. Чтобы уменьшить количество времени, затрачиваемого на доступ к блочным устройствам, ядро использует две основных стратегии: кэширования данных и класте­ризации операций ввода/вывода.

Виртуальная файловая система
Файловые системы
Страничный кэш
Блочный уровень, BIOS
Драйверы
Оборудование

 

Рис.6.10. Уровни блочной подсистемы ввода/вывода

Принципиальное отличие между сетевым оборудованием и блочными или символьными устройствами заключается в том, что ядро не запрашивает данные с сетевых устройств. Здесь ситуация обратная: сетевые устройства используют прерывания, чтобы уведомить ядро о поступлении пакета. Как только ядро подготовит пакеты для передачи на другой узел сети, выполняется передача этих пакетов драйверу устройства соответствующей сетевой интерфейсной платы (network interface card, NIC). Для определения платы-отправителя пакета ядро анализирует внутреннюю таблицу маршрутизации, в которой перечислены адреса получателей, доступные для каждой интерфейсной платы. Драйвер обрабатывает пакеты в соответствии с дисциплиной очереди, определяющей порядок обработки устройствами. По умолчанию используется политика FIFO (первый пришел - первый на выходе), но возможно и использование более сложных политик, например, на основе приоритетов.

Взаимодействие процессов

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

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

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

· Abort — аварийное завершение процесса;

· выполнение дампа памяти (Dump), которое приводит к завершению процесса, но перед этим процесс генерирует файл ядра (core file), содержащий контекст выполнения процесса, включающий стек процесса, содержимое регистров и другую полезную для отладки информацию;

· простое игнорирование сигнала (Ignore);

· останов (Stop) выполнения процесса - часто используется в целях отладки;

· Continue - является обратным по отношению к четвертому — это переключение процесса из состояния останова в состояние готовности.

Каналы (pipe) позволяют двум процессам взаимодействовать между собой спомощью модели источник/получатель. Процесс-источник осуществляет запись данных в канал, после чего процесс-получатель считывает данные из канала попринципу FIFO (первый пришел — первый ушел). При создании канала для него выделяется свой индексный узел (объект i-node). Индексныеузлы канала не ссылаются на дисковые блоки. Они указывают на определенную страницу данных, называемую буфером канала (pipe buffer), которая используется ядром в качестве циклического буфера. Каждый канал имеет свой уникальный буфер канала, содержащий информацию, передаваемую между двумя процессами. Каналы представляются в виде файлов, доступ к которым осуществляется с помощью виртуальной файловой системы. Чтобы начать обмен данными по каналу, процесс должен создать канал и породить дочерний процесс, с которым он сможет общаться с помощью данного канала. Однако в отличие от файлов с данными, именованные каналы ссылаются на буфер, размещенный в оперативной памяти, а не на диске.

Механизм взаимодействия процессов в Linux с помощью сокетов (socket) позволяет двум процессам обмениваться данными путем установки прямых двунаправленных каналов связи (в отличие от простых каналов, рассмотренных выше). Каждый процесс может использовать сокет для передачи данных другому процессу. Из-за своей гибкости сокеты имеют более низкую производительность. Если приложению требуется установить однонаправленную связь между двумя процессами, вместо сокета лучше воспользоваться каналом.

Существует два основных типа сокетов, которые могут использоваться процессами. Потоковые сокеты (stream socket) передают информацию в виде потоков байтов. Дейтаграммные сокеты (datagram socket) передают информацию в виде независимых фрагментов информации, называемых дейтаграммами.

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

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

Масштабируемость

Вначале разработка ядра Linux была ориентирована на рынок настольных систем и серверов нижнего уровня. Но по мере реализации дополнительной функциональности, популярность Linux возрастала. Это подтолкнуло интерес к масштабированию и переносу операционной системы l.inux на более мощные системы (в том числе системы мэйнфрейм-типа) со стороны крупных компаний, таких как IBM и Hewlett-Packard, которые начали сотрудничать с независимыми разработчиками, чтобы добиться повышения конкурентоспособности Linux на рынке серверов верхнего уровня.

Такие компании как Red Hat, SuSE (www. suse. com) и Conectiva занялись выпуском дистрибутивов Linux, специально предназначенных для высокопроизводительных серверов, и предоставлением услуг по поддержке их дистрибутивов.

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

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

Список текущих реализаций Linux можно найти на Web-узле по адресу: www.linux.org.

 

Файловая система Linux и структура каталогов

Июнь 5th, 2010 Рубрики: Linux, Основы

Яндекс.Директ Все объявления Профессиональная разработка сайта От дизайна до тонкой настройки и запуска! Качественная поддержка.Адрес и телефон hoster.kz Интернет магазин от 100000 тенге Индивидуальный дизайн, скорость и безопасность, интеграция с 1САдрес и телефон istyle.kz

В сегодняшней статье своего блога k-max.name я бы хотел поделиться с общественностью структурой файловой системы в ОС Linux, а так же описанием основных каталогов, их назначения и использования в операционной системе.

Операционная система (ОС далее) Linux поддерживает множество файловых систем, в настоящее время наиболее широко используются: ext2, ext3,ext4, raiserfs. Так же современные ОС Linux совместимы с файловыми системами (ФС далее), используемыми ОС Windows, такими как NTFS и FAT32, но использование данных ФС в Linux крайне не желательно по причине того, что данные ФС разрабатывались под другую ОС и поддержка Windows-разделов ядром Linux реализована с помощью сторонних утилит/драйверов, что накладывает некоторые ограничения (например, согласно проекту Linux-NTFS на разделах с NTFS поддерживается практически только чтение (запись — лишь в существующие файлы без изменения их размера), так же ОС Linux не имеет возможности разграничивать права доступа к файлам на разделах NTFS).

Начну с общей структуры файловой системы. ФС Linux/UNIX физически представляет собой пространство раздела диска разбитое на блоки фиксированного размера, кратные размеру сектора — 1024, 2048, 4096 или 8120 байт. Размер блока указывается при создании файловой системы.

Структуру каталогов, в общем случае можно представить в виде следующей схемы:

Данная схема отображает то, что у одного объекта файловой системы (файла) может быть несколько путей. Грубо говоря, несколько файлов в структуре каталогов Linux могут быть физически одним файлом на диске. Или же другими словами, 1 физический файл на диске может иметь несколько имен (путей). Это достигается тем, что в файловой системе каждый файл идентифицируется уникальным номером, называемым Inode (инод = Индексный дескриптор).

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

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

/-

|-/etc-|-/etc/X11-|-/etc/X11/xinit.d

| | |-...

| |-files

| |-...

|-/opt

|-/home <- |-/user1-|-/user1/Desktop # примонтированный раздел ext3,

| | |-/user1/Documents # содержащий свое дерево каталогов

| | |-... # (/home - точка монтирования)

| |-/user2

|

|-....

|-/usr

|-/var

Посмотреть сколько файл имеет ссылок и инод файла можно командой:

[mc-sim@ASUS /]$ ls -li




Дата добавления: 2014-12-19; просмотров: 123 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.018 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав