Как организована файловая система Linux?
Обновлено: 21.11.2024
Чтобы максимально эффективно использовать систему Linux, вы должны понимать, как Linux организует данные. Если вы знакомы с Microsoft Windows или другой операционной системой, вам будет несложно узнать, как Linux организует данные, поскольку большинство операционных систем организуют данные довольно схожим образом. В этом разделе объясняется, как Linux организует данные. Он также знакомит вас с несколькими важными командами Linux, которые работают с каталогами и файлами.
Если вы использовали MS-DOS, вы знакомы с понятиями файла и каталога, а также с различными командами MS-DOS, которые работают с файлами и каталогами. В Linux файлы и каталоги работают так же, как и в MS-DOS.
Когда вы входите в Linux, вы попадаете в специальный каталог, который называется вашим домашним каталогом. Как правило, у каждого пользователя есть отдельный домашний каталог, в котором пользователь создает личные файлы. Это упрощает пользователю поиск ранее созданных файлов, поскольку они хранятся отдельно от файлов других пользователей.
Рабочий каталог — или текущий рабочий каталог, как его иногда называют - это каталог, в котором вы сейчас работаете. Когда вы входите в Linux, ваш домашний каталог является вашим рабочим каталогом. С помощью команды cd (с которой вы вскоре познакомитесь) вы можете изменить свой рабочий каталог.
Каталоги системы Linux организованы в виде иерархии. В отличие от MS-DOS, которая обеспечивает отдельную иерархию для каждого раздела, Linux предоставляет единую иерархию, включающую все разделы. Самый верхний каталог дерева каталогов — это корневой каталог, который записывается с использованием прямой косой черты (/), а не обратной косой черты (\), используемой MS-DOS для обозначения корневого каталога.
< p> На рис. 4.3 показано гипотетическое дерево каталогов Linux. Корневой каталог содержит шесть подкаталогов: bin, dev и т. д., home, tmp и usr. В домашнем каталоге есть два подкаталога; каждый является домашним каталогом пользователя и имеет то же имя, что и пользователь, которому он принадлежит. Пользователь по имени bill создал в своем домашнем каталоге два подкаталога: books и school. Пользователь по имени patrick создал в своем домашнем каталоге один подкаталог: school.Каждый каталог (кроме корневого каталога) содержится в каталоге, известном как его родительский каталог. Например, родительский каталог счета является домашним.
Обратите внимание на рисунок, что существуют два каталога с именем school: один является подкаталогом Bill, а другой — подкаталогом patrick. Чтобы избежать путаницы, которая может возникнуть, когда несколько каталогов имеют одно и то же имя, каталоги указываются с помощью путей. Существует два вида путей: абсолютные и относительные. Абсолютный путь к каталогу отслеживает расположение каталога, начиная с корневого каталога; вы формируете путь как список каталогов, разделенных косой чертой (/). Например, абсолютный путь к уникальному каталогу с именем bill — /home/bill. Абсолютный путь подкаталога school в каталоге bill: /home/bill/school. Абсолютный путь подкаталога school с таким же именем в каталоге patrick — /home/patrick/school.
Если подкаталог находится на много уровней ниже корневого каталога , его абсолютный путь может быть длинным и громоздким. В таком случае может быть удобнее использовать относительный путь, который использует в качестве начальной точки текущий каталог, а не корневой каталог. Например, предположим, что каталог bill является текущим рабочим каталогом; вы можете обратиться к его подкаталогу books по относительному пути books. Обратите внимание, что относительный путь никогда не может начинаться с косой черты, тогда как абсолютный путь должен начинаться с косой черты. В качестве второго примера предположим, что домашний каталог является текущим рабочим каталогом. Относительным путем подкаталога school каталога bill будет bill/school; относительный путь подкаталога с таким же именем в каталоге patrick будет patrick/school.
Linux предоставляет два специальных имени каталога. Использование одной точки (.) в качестве имени каталога эквивалентно указанию рабочего каталога. Использование двух точек (..) в имени пути поднимает вас на один уровень вверх по текущему пути к родительскому каталогу. Например, если рабочий каталог /home/bill, .. относится к каталогу /home. Точно так же путь ../patrick/school указывает на каталог /home/patrick/school.
Теперь, когда вы понимаете основы организации данных в Linux, вы готовы изучить некоторые команды, работающие с каталогами. Вместо того, чтобы просто читать этот раздел, вы должны войти в свою систему Linux и попробовать команды самостоятельно. Только так вы начнете развивать навыки работы с командами оболочки.
Чтобы отобразить текущий рабочий каталог, введите команду pwd. Команда pwd не требует параметров или аргументов.
Команда pwd отображает абсолютный путь к рабочему каталогу.
Чтобы изменить рабочий каталог, введите команду cd, указав путь к новому рабочему каталогу в качестве аргумента. Вы можете использовать абсолютный или относительный путь. Например, чтобы изменить рабочий каталог на каталог /bin, введите:
Обратите внимание, как изменится подсказка, указывающая, что /bin теперь является рабочим каталогом.
Вы можете быстро вернуться в свой домашний каталог, выполнив команду cd без аргумента:
Снова обратите внимание, как подсказка меняется, чтобы указать новый рабочий каталог.
Если вы пытаетесь изменить рабочий каталог на несуществующий, Linux отображает сообщение об ошибке:
Чтобы отобразить содержимое каталога, используйте команду ls. Команда ls предоставляет множество полезных опций, которые позволяют настроить ее работу и вывод по своему вкусу.
Простейшая форма команды ls не имеет опций или аргументов. Он просто перечисляет содержимое рабочего каталога, включая файлы и подкаталоги (ваш собственный вывод будет отличаться, отражая файлы, присутствующие в вашем рабочем каталоге):
Здесь вывод представлен в лексическом (словарном) порядке. , как три столбца данных. Обратите внимание, что имена файлов, начинающиеся с прописных букв, появляются перед теми, которые начинаются со строчных букв.
Более сложная форма команды ls, включающая параметр -l, отображает описательную информацию вместе с именами файлов, как показано ниже. на рис. 4.4.
Пробел перемещает вас на одну страницу вперед
b перемещает вас на одну страницу назад
q закрывает программу и возвращает вас в командную строку
Вы можете создавать каталоги с помощью команды mkdir. Просто введите имя нового каталога в качестве аргумента команды. Linux создает каталог как подкаталог рабочего каталога. Например, эта команда создает подкаталог с именем office:
Если вы не хотите создавать новый каталог в качестве подкаталога рабочего каталога, введите абсолютный или относительный путь в качестве аргумента . Например, чтобы создать каталог с именем /root/documents, введите:
Это работает независимо от текущего рабочего каталога.
Имя каталога или файла должно соблюдать определенные правила. Например, он не должен содержать символ косой черты (/). Имена каталогов и файлов обычно включают буквы (прописные или строчные), цифры, точки и символы подчеркивания (_). Можно использовать и другие символы, например пробелы, но такие имена создают проблемы, поскольку оболочка придает им особое значение. Если вам просто необходимо использовать имя, содержащее специальные символы, заключите его в одинарные кавычки ( ' ). Кавычки не становятся частью имени, которое хранится на диске. Этот метод полезен при доступе к файлам в файловой системе Microsoft Windows; в противном случае у вас возникнут проблемы с работой с файлами в таких каталогах, как «Мои документы», имена которых содержат пробелы.
Большинство имен файлов в MS-DOS содержат точку, но в большинстве имен файлов в Linux ее нет. В MS-DOS точка отделяет основную часть имени файла от части, известной как расширение, обозначающее тип файла. Например, файл MS-DOS memo.txt будет содержать текст. Большинство программ для Linux автоматически определяют тип файла, поэтому имена файлов в Linux не требуют расширения.
Чтобы удалить каталог, используйте команду rmdir. Например, чтобы удалить ненужный подкаталог рабочего каталога, введите:
Если каталог, который вы хотите удалить, не является подкаталогом рабочего каталога, удалите его, введя абсолютный или относительный путь.
Вы не можете удалить каталог, содержащий файлы или подкаталоги, с помощью rmdir ; вы должны сначала удалить файлы в каталоге, а затем удалить сам каталог. Однако команда rm -r рекурсивно удалит файлы в каталоге, а затем удалит каталог.
Каталоги содержат файлы и другие папки. Вы используете файлы для хранения данных. В этом разделе вы познакомитесь с несколькими полезными командами для работы с файлами.
Файлы Linux, как и файлы Microsoft Windows, могут содержать текстовую или двоичную информацию. Содержимое двоичного файла имеет смысл только для опытных программистов, но вы легко можете просмотреть содержимое текстового файла. Просто введите команду cat, указав имя текстового файла в качестве аргумента. Например:
отображает содержимое файла /etc/passwd, в котором перечислены допустимые входы в систему.
Если файл слишком велик для отображения на один экран, первая часть файла пронесется мимо вас, и вы увидите только несколько последних строк файла. Чтобы избежать этого, вы можете использовать команду more:
Эта команда отображает содержимое файла так же, как команда man отображает страницу руководства.Вы можете использовать пробел и клавишу b для перехода вперед и назад по файлу и клавишу q для выхода из команды.
Чтобы удалить файл, введите команду rm, указав имя файла в качестве аргумента. Например:
удаляет файл с именем badfile, содержащийся в рабочем каталоге. Если файл находится в другом месте, вы можете удалить его, указав абсолютный или относительный путь.
ВНИМАНИЕ: После удаления файла Linux его содержимое будет потеряно навсегда. Будьте осторожны, чтобы не удалить файл, содержащий необходимую информацию.
Опция -i приводит к тому, что команда rm предложит вам подтвердить свое решение об удалении файла. Если вы не доверяете своим навыкам набора текста, эта опция может оказаться полезной. Linux автоматически предоставляет параметр -i, даже если вы его не вводите.
Чтобы скопировать файл, используйте команду cp, указав имя (или путь) файла, который вы хотите скопировать, и имя (или путь), в который вы хотите его скопировать. Например:
копирует файл /etc/passwd в файл с именем sample в рабочем каталоге.
Если целевой файл уже существует, Linux перезаписывает его. Поэтому вы должны быть осторожны, чтобы не перезаписать файл, содержащий необходимые данные. Перед копированием файла используйте команду ls, чтобы убедиться, что ни один файл не будет перезаписан; в качестве альтернативы используйте параметр -i команды cp, которая предложит вам проверить перезапись существующего файла. Linux автоматически предоставляет параметр -i, даже если вы его не вводите.
Чтобы переименовать файл, используйте команду mv, указав имя (или путь) файла и новое имя (или путь). Например:
переименовывает файл с именем old в новый. Если файл назначения уже существует, Linux перезаписывает его, поэтому будьте осторожны. Перед перемещением файла используйте команду ls, чтобы убедиться, что ни один файл не будет перезаписан; или используйте опцию -i команды mv, которая предложит вам проверить перезапись существующего файла. Linux автоматически предоставляет параметр -i, даже если вы его не вводите.
Команда mv может переименовывать каталог, но не может перемещать каталог с одного устройства на другое. Чтобы переместить каталог на новое устройство, сначала скопируйте каталог и его содержимое, а затем удалите оригинал.
Если вы знаете имя файла, но не знаете, в каком каталоге он находится, вы можете использовать команду find, чтобы найти файл. Например:
пытается найти файл с именем «отсутствует», расположенный в (или ниже) текущем рабочем каталоге (.). Если команда находит файл, она отображает его абсолютный путь.
Если вы знаете только часть имени файла, вы можете окружить известную часть звездочками (*):
Эта команда найдет любой файл, имя которого содержит символы iss, выполняя поиск во всех подкаталогах корневого каталога (то есть во всей системе).
Если в вашей системе есть принтер, вы можете распечатать файл с помощью команды lpr. Например:
отправляет файл /etc/passwd на принтер.
Если файл длинный, для его печати может потребоваться некоторое время. Вы можете отправлять другие файлы на принтер во время печати файла. Команда lpq позволяет увидеть, какие файлы стоят в очереди на печать:
Каждому ожидающему или активному файлу присвоен номер задания на печать. Вы можете использовать lprm для отмены печати файла, указав номер задания на печать. Например:
отменяет печать задания номер 155. Однако только пользователь, запросивший печать файла (или пользователь root), может отменить печать файла.
Чтобы сэкономить место на диске и ускорить загрузку, вы можете сжать файл данных. По соглашению имена сжатых файлов заканчиваются на .gz; однако Linux не требует и не применяет это соглашение.
Чтобы расширить сжатый файл, используйте команду gunzip. Например, предположим, что файл bigfile.gz был сжат. Введите команду:
извлекает файл bigfile и удаляет файл bigfile.gz.
Чтобы сжать файл, используйте команду gzip. Например, чтобы сжать файл bigfile, введите команду:
Команда создает файл bigfile.gz и удаляет файл bigfile.
Иногда удобно хранить несколько файлов (или содержимое нескольких подкаталогов) в одном файле. Это полезно, например, при создании резервной или архивной копии файлов. Команда Linux tar создает один файл, содержащий данные из нескольких файлов. В отличие от команды gzip, команда tar не меняет исходные файлы. Чтобы создать tar-файл, так как файл, созданный командой tar, вызывается, введите следующую команду:
Замените tarfile на имя tar-файла, который вы хотите создать, а files-or-directories на список файлов и каталогов, разделяя элементы списка одним или несколькими пробелами или табуляциями. Вы можете использовать абсолютные или относительные пути для указания файлов или каталогов. По соглашению имя файла tar заканчивается на .tar, но Linux не требует и не применяет это соглашение.
Например, чтобы создать tar-файл с именем backup.tar, содержащий все файлы во всех подкаталогах каталога /home/bill, введите:
Команда создает файл backup.tar в текущем рабочем каталоге.
Вы можете получить список содержимого tar-файла с помощью команды, которая следует следующему шаблону:
| more приводит к тому, что выходные данные отправляются команде more, так что вы можете пролистать несколько страниц. Если файл tar содержит только несколько файлов, вы можете опустить | больше .
Чтобы извлечь содержимое tar-файла, используйте следующую команду:
Эта команда расширяет файлы и каталоги, содержащиеся в файле tar, как файлы и подкаталоги рабочего каталога. Если файл или подкаталог уже существует, он автоматически перезаписывается.
Команда tar предоставляет множество полезных опций; подробности см. на странице руководства.
Обычно tar-файл сжимают. Этого легко добиться, указав опции -czvf вместо -cvf. Сжатые tar-файлы обычно имеют имена, оканчивающиеся на .tgz. Чтобы расширить сжатый tar-файл, укажите параметры -xzvf вместо -xvf.
Команда tar не использует обычный метод сжатия ZIP, распространенный в мире Microsoft Windows. Однако Linux может легко работать с ZIP-файлами или даже создавать их. Чтобы создать ZIP-файл, содержащий сжатые файлы или каталоги, введите команду, подобную этой:
где zipfile называет ZIP-файл, который будет создан, а files_to_zip указывает файлы и каталоги, которые должны быть включены в ZIP-файл.
Чтобы развернуть существующий ZIP-файл, введите команду, подобную этой:
Microsoft Windows 9x поддерживает ярлыки, позволяющие обращаться к файлу или каталогу (папке) по нескольким именам. Ярлыки также позволяют включать файл в несколько каталогов или подкаталог в несколько родительских каталогов. В Linux вы добиваетесь этих результатов с помощью команды ln, которая связывает несколько имен с одним файлом или каталогом. Эти имена называются символическими ссылками, программными ссылками или просто ссылками.
Чтобы связать новое имя с существующим файлом или каталогом, введите команду по следующему шаблону:
Например, предположим, что текущий рабочий каталог содержит файл william. Чтобы иметь возможность ссылаться на этот же файл по альтернативному имени bill, введите команду:
Команда ls показывает результат:
Новый файл ( bill ) имеет тип l , что указывает на то, что это ссылка, а не файл или каталог. Кроме того, команда ls показывает имя файла, на который указывает ссылка ( William).
Если вы опустите параметр -s, Linux создаст так называемую жесткую ссылку. Жесткая ссылка должна храниться в той же файловой системе, что и файл, на который она ссылается, ограничение, которое не распространяется на символические ссылки. Количество ссылок, отображаемое командой ls, отражает только жесткие ссылки; символические ссылки игнорируются.
В отличие от Windows 98, но подобно другим разновидностям Unix и Windows NT, Linux является многопользовательской операционной системой. Поэтому он включает механизмы, защищающие данные от несанкционированного доступа. Основной механизм защиты ограничивает доступ к каталогам и файлам на основе личности пользователя, запрашивающего доступ, и режимов доступа, назначенных каждому каталогу и файлу, которые часто называют разрешениями.
С каждым каталогом и файлом связан пользователь, называемый владельцем, который создал каталог или файл. Каждый пользователь принадлежит к одному или нескольким наборам пользователей, называемым группами. С каждым каталогом и файлом связана группа, которая назначается при создании каталога или файла.
Группы можно использовать, чтобы пользователи, не являющиеся root, могли выполнять задачи системного администрирования или другие задачи с ограниченным доступом. Например, Debian GNU/Linux определяет групповой дозвон; только члены этой группы — и, конечно же, root — могут получить доступ к системному модему и инициировать коммутируемое соединение. Разрешая доступ к программному файлу только членам определенной группы, вы можете установить гибкую, но эффективную политику безопасности.
Чтобы ограничить доступ к файлу или каталогу, вы устанавливаете его разрешения. В Табл. 4.4 перечислены возможные разрешения и поясняется значение каждого из них. Обратите внимание, что разрешения работают иначе для каталогов, чем для файлов. Например, разрешение r означает возможность просмотра содержимого каталога или чтения содержимого файла. Каталог или файл может иметь более одного разрешения. Предоставляются только перечисленные разрешения; любые другие операции запрещены. Например, пользователь с правами доступа к файлу rw мог читать или записывать файл, но не мог его выполнять.
Эта статья предназначена для обсуждения концепций файловой системы Linux на очень высоком уровне. Он не предназначен для низкоуровневого описания того, как работает конкретный тип файловой системы, такой как EXT4, и не предназначен для обучения командам файловой системы.
Дополнительные ресурсы по Linux
Каждый компьютер общего назначения должен хранить данные различных типов на жестком диске (HDD) или его эквиваленте, например на USB-накопителе. На это есть несколько причин. Во-первых, оперативная память теряет свое содержимое при выключении компьютера. Существуют энергонезависимые типы ОЗУ, которые могут поддерживать данные, хранящиеся там, после отключения питания (например, флэш-ОЗУ, используемое в USB-накопителях и твердотельных накопителях), но флэш-ОЗУ намного дороже, чем стандартная энергозависимая ОЗУ, такая как DDR3 и другие подобные типы.
Вторая причина, по которой данные необходимо хранить на жестких дисках, заключается в том, что даже стандартная оперативная память по-прежнему дороже дискового пространства. Стоимость ОЗУ и диска быстро снижается, но ОЗУ по-прежнему лидирует по стоимости байта. Быстрый расчет стоимости байта, основанный на стоимости 16 ГБ оперативной памяти по сравнению с жестким диском емкостью 2 ТБ, показывает, что единица оперативной памяти примерно в 71 раз дороже, чем жесткий диск. Типичная стоимость оперативной памяти сегодня составляет около 0,0000000043743750 долларов США за байт.
В качестве краткой исторической справки, чтобы представить нынешние затраты на ОЗУ в перспективе, на самых ранних этапах развития вычислений один тип памяти основывался на точках на экране ЭЛТ. Это было очень дорого — около 1 доллара США за бит!
Определения
Вы можете слышать, как люди говорят о файловых системах по-разному и сбивая с толку. Само слово может иметь несколько значений, и вам, возможно, придется определить правильное значение из контекста обсуждения или документа.
Я попытаюсь определить различные значения слова "файловая система" на основе того, как я наблюдал его использование в различных обстоятельствах. Обратите внимание, что, пытаясь соответствовать стандартным «официальным» значениям, я намерен определить термин на основе его различных вариантов использования. Эти значения будут рассмотрены более подробно в следующих разделах этой статьи.
- Вся структура каталогов Linux, начиная с верхнего (/) корневого каталога.
- Особый тип формата хранения данных, например EXT3, EXT4, BTRFS, XFS и т. д. Linux поддерживает почти 100 типов файловых систем, включая как очень старые, так и новейшие. Каждый из этих типов файловых систем использует свои собственные структуры метаданных для определения того, как данные хранятся и доступны.
- Раздел или логический том, отформатированный с использованием файловой системы определенного типа, который можно смонтировать в указанной точке монтирования в файловой системе Linux.
Основные функции файловой системы
Дисковое хранилище — это необходимость, которая приносит с собой некоторые интересные и неизбежные детали. Очевидно, что файловая система предназначена для предоставления места для энергонезависимого хранения данных; это его конечная функция. Однако из этого требования вытекает множество других важных функций.
Все файловые системы должны предоставлять пространство имен, то есть методологию именования и организации. Это определяет, как можно назвать файл, в частности длину имени файла и подмножество символов, которые могут использоваться для имен файлов из общего набора доступных символов. Он также определяет логическую структуру данных на диске, например использование каталогов для организации файлов вместо того, чтобы просто сваливать их все вместе в один огромный конгломерат файлов.
После того как пространство имен определено, необходима структура метаданных, чтобы обеспечить логическую основу для этого пространства имен. Сюда входят структуры данных, необходимые для поддержки иерархической структуры каталогов; структуры для определения того, какие блоки пространства на диске используются, а какие доступны; структуры, позволяющие сохранять имена файлов и каталогов; информация о файлах, такая как их размер и время их создания, изменения или последнего доступа; и местоположение или местоположения данных, принадлежащих файлу на диске. Другие метаданные используются для хранения высокоуровневой информации о подразделениях диска, таких как логические тома и разделы. Эти метаданные более высокого уровня и структуры, которые они представляют, содержат информацию, описывающую файловую систему, хранящуюся на диске или разделе, но они отделены от метаданных файловой системы и не зависят от них.
Для файловых систем также требуется интерфейс прикладного программирования (API), обеспечивающий доступ к вызовам системных функций, управляющих объектами файловой системы, такими как файлы и каталоги. API обеспечивают такие задачи, как создание, перемещение и удаление файлов. Он также предоставляет алгоритмы, которые определяют такие вещи, как расположение файла в файловой системе. Такие алгоритмы могут учитывать такие цели, как скорость или минимизация фрагментации диска.
Современные файловые системы также предоставляют модель безопасности, которая представляет собой схему определения прав доступа к файлам и каталогам. Модель безопасности файловой системы Linux помогает гарантировать, что пользователи имеют доступ только к своим собственным файлам, а не к чужим или к самой операционной системе.
Последний строительный блок — это программное обеспечение, необходимое для реализации всех этих функций. В Linux используется программная реализация, состоящая из двух частей, чтобы повысить эффективность как системы, так и программиста.
Рисунок 1. Программная реализация файловой системы Linux, состоящая из двух частей.
Первая часть этой реализации, состоящей из двух частей, — виртуальная файловая система Linux. Эта виртуальная файловая система предоставляет ядру и разработчикам единый набор команд для доступа ко всем типам файловых систем. Программное обеспечение виртуальной файловой системы вызывает специальный драйвер устройства, необходимый для взаимодействия с различными типами файловых систем. Драйверы устройств, специфичные для файловой системы, являются второй частью реализации. Драйвер устройства интерпретирует стандартный набор команд файловой системы как специфичный для типа файловой системы раздела или логического тома.
Структура каталогов
Как обычно очень организованная Дева, я предпочитаю хранить вещи в небольших, организованных группах, а не в одном большом ведре. Использование каталогов помогает мне хранить и затем находить нужные файлы, когда я их ищу. Каталоги также называются папками, потому что их можно рассматривать как папки, в которых хранятся файлы по аналогии с физическим рабочим столом.
В Linux и многих других операционных системах каталоги могут быть структурированы в виде древовидной иерархии. Структура каталогов Linux четко определена и задокументирована в стандарте иерархии файловой системы Linux (FHS). Ссылка на эти каталоги при доступе к ним осуществляется с использованием последовательно расположенных более глубоких имен каталогов, соединенных косой чертой (/), таких как /var/log и /var/spool/mail. Они называются путями.
В следующей таблице представлен очень краткий список стандартных, хорошо известных и определенных каталогов Linux верхнего уровня и их назначения.
Таблица 1. Верхний уровень иерархии файловой системы Linux.
Каталоги и их подкаталоги, показанные в Таблице 1, вместе с их подкаталогами, имеющими бирюзовый фон, считаются неотъемлемой частью корневой файловой системы. То есть их нельзя создать как отдельную файловую систему и смонтировать во время запуска. Это связано с тем, что они (в частности, их содержимое) должны присутствовать во время загрузки, чтобы система загружалась правильно.
Каталоги /media и /mnt являются частью корневой файловой системы, но они никогда не должны содержать никаких данных. Скорее, это просто временные точки подключения.
Остальные каталоги, которые не имеют фонового цвета в Таблице 1, не обязательно должны присутствовать во время последовательности загрузки, но будут смонтированы позже, во время последовательности запуска, которая подготавливает хост к выполнению полезной работы.
Обязательно обратитесь к официальной веб-странице стандарта иерархии файловой системы Linux (FHS) для получения подробной информации о каждом из этих каталогов и их многочисленных подкаталогах. В Википедии также есть хорошее описание FHS. Этот стандарт должен соблюдаться как можно точнее, чтобы обеспечить операционную и функциональную согласованность. Независимо от типов файловых систем, используемых на хосте, эта иерархическая структура каталогов одинакова.
Единая структура каталогов Linux
В некоторых операционных системах ПК, отличных от Linux, при наличии нескольких физических жестких дисков или нескольких разделов каждому диску или разделу назначается буква диска. Необходимо знать, на каком жестком диске находится файл или программа, например C: или D:. Затем вы вводите букву диска в виде команды, D:, например, чтобы перейти на диск D:, а затем вы используете команду cd, чтобы перейти в правильный каталог, чтобы найти нужный файл. У каждого жесткого диска есть свое отдельное полное дерево каталогов.
Файловая система Linux объединяет все физические жесткие диски и разделы в единую структуру каталогов. Все начинается сверху — с корневого (/) каталога. Все остальные каталоги и их подкаталоги расположены в одном корневом каталоге Linux. Это означает, что существует только одно дерево каталогов, в котором можно искать файлы и программы.
Это может работать только потому, что файловая система, такая как /home, /tmp, /var, /opt или /usr, может быть создана на отдельных физических жестких дисках, в другом разделе или в другом логическом томе из / ( root) файловая система, а затем монтируется в точку монтирования (каталог) как часть дерева корневой файловой системы. Даже съемные диски, такие как флэш-накопитель USB или внешний жесткий диск USB или ESATA, будут подключены к корневой файловой системе и станут неотъемлемой частью этого дерева каталогов.
Одна из веских причин для этого очевидна при обновлении одной версии дистрибутива Linux до другой или переходе с одного дистрибутива на другой. В целом, помимо любых утилит обновления, таких как dnf-upgrade в Fedora, целесообразно время от времени переформатировать жесткий диск (диски), содержащие операционную систему, во время обновления, чтобы полностью удалить весь мусор, который накопился с течением времени. Если /home является частью корневой файловой системы, она также будет переформатирована, и тогда ее придется восстанавливать из резервной копии. Имея /home в качестве отдельной файловой системы, она будет известна программе установки как отдельная файловая система, и ее форматирование можно пропустить. Это также может относиться к /var, где хранятся база данных, почтовые ящики, веб-сайт и другие переменные пользовательские и системные данные.
Есть и другие причины для сохранения определенных частей дерева каталогов Linux в виде отдельных файловых систем. Например, давным-давно, когда я еще не знал о потенциальных проблемах, связанных с тем, что все необходимые каталоги Linux являются частью / (корневой) файловой системы, мне удалось заполнить свой домашний каталог большим количеством очень большие файлы. Поскольку ни каталог /home, ни каталог /tmp не были отдельными файловыми системами, а были просто подкаталогами корневой файловой системы, вся корневая файловая система заполнялась. У операционной системы не оставалось места для создания временных файлов или расширения существующих файлов данных. Сначала прикладные программы начали жаловаться, что нет места для сохранения файлов, а потом очень странно начала себя вести и сама ОС. Загрузка в однопользовательском режиме и удаление проблемных файлов в моем домашнем каталоге позволили мне снова начать работу. Затем я переустановил Linux, используя довольно стандартную настройку нескольких файловых систем, и смог предотвратить повторение полного сбоя системы.
Однажды у меня была ситуация, когда хост Linux продолжал работать, но не позволял пользователю войти в систему с помощью рабочего стола с графическим интерфейсом. Я смог войти в систему с помощью интерфейса командной строки (CLI) локально, используя одну из виртуальных консолей, и удаленно, используя SSH. Проблема заключалась в том, что файловая система /tmp была заполнена, и некоторые временные файлы, необходимые для рабочего стола с графическим интерфейсом, не могли быть созданы во время входа в систему. Поскольку вход в CLI не требовал создания файлов в /tmp, нехватка места не помешала мне войти в систему с помощью CLI. В этом случае каталог /tmp был отдельной файловой системой, и в группе томов, частью которой был логический том /tmp, было достаточно места. Я просто расширил логический том /tmp до размера, который соответствовал моему свежему пониманию объема временного файлового пространства, необходимого на этом хосте, и проблема была решена. Обратите внимание, что это решение не требовало перезагрузки, и как только файловая система /tmp была увеличена, пользователь смог войти на рабочий стол.
Еще одна ситуация произошла, когда я работал администратором лаборатории в одной крупной технологической компании. Один из наших разработчиков установил приложение в неправильном месте (/var). Приложение аварийно завершало работу из-за того, что файловая система /var была заполнена, а файлы журналов, хранящиеся в /var/log в этой файловой системе, не могли быть дополнены новыми сообщениями из-за нехватки места. Однако система продолжала работать, потому что критические файловые системы / (root) и /tmp не заполнялись. Эта проблема была решена путем удаления вызывающего ошибку приложения и его переустановки в файловой системе /opt.
Типы файловых систем
Linux поддерживает чтение около 100 типов разделов; он может создавать и записывать только некоторые из них. Но возможно — и очень часто — монтировать файловые системы разных типов в одной и той же корневой файловой системе. В этом контексте мы говорим о файловых системах с точки зрения структур и метаданных, необходимых для хранения и управления пользовательскими данными на разделе жесткого диска или логическом томе. Полный список типов разделов файловой системы, распознаваемых командой Linux fdisk, приведен здесь, чтобы вы могли почувствовать высокую степень совместимости Linux с очень многими типами систем.
Основная цель поддержки возможности чтения столь многих типов разделов – обеспечение совместимости и, по крайней мере, некоторого взаимодействия с файловыми системами других компьютерных систем. Варианты, доступные при создании новой файловой системы в Fedora, показаны в следующем списке.
Другие дистрибутивы поддерживают создание различных типов файловых систем. Например, CentOS 6 поддерживает создание только тех файловых систем, которые выделены жирным шрифтом в приведенном выше списке.
Монтаж
Термин «смонтировать» файловую систему в Linux относится к ранним временам вычислительной техники, когда ленту или съемный диск необходимо было физически смонтировать на соответствующем дисковом устройстве. После физического размещения на диске файловая система на диске будет логически монтироваться операционной системой, чтобы сделать содержимое доступным для ОС, прикладных программ и пользователей.
Точка монтирования — это просто каталог, как и любой другой, созданный как часть корневой файловой системы. Так, например, домашняя файловая система смонтирована в каталоге /home. Файловые системы можно монтировать в точках монтирования других файловых систем, отличных от root, но это менее распространено.
Корневая файловая система Linux монтируется в корневой каталог (/) в самом начале последовательности загрузки. Другие файловые системы монтируются позже, с помощью программ запуска Linux, либо с помощью rc в SystemV, либо с помощью systemd в более новых версиях Linux. Монтирование файловых систем в процессе запуска управляется конфигурационным файлом /etc/fstab. Простой способ запомнить это: fstab означает «таблица файловой системы» и представляет собой список файловых систем, которые должны быть смонтированы, их назначенные точки монтирования и любые параметры, которые могут потребоваться для определенных файловых систем.
Файловые системы монтируются в существующий каталог/точку монтирования с помощью команды mount. В общем, любой каталог, который используется в качестве точки монтирования, должен быть пустым и не содержать никаких других файлов. Linux не запрещает пользователям монтировать одну файловую систему поверх уже существующей или в каталог, содержащий файлы. Если вы монтируете файловую систему в существующий каталог или файловую систему, исходное содержимое будет скрыто, и будет видно только содержимое вновь смонтированной файловой системы.
Заключение
Я надеюсь, что эта статья развеяла часть возможной путаницы, связанной с термином файловая система. Мне потребовалось много времени и очень полезный наставник, чтобы по-настоящему понять и оценить сложность, элегантность и функциональность файловой системы Linux во всех ее значениях.
Если у вас есть вопросы, задайте их в комментариях ниже, и я постараюсь на них ответить.
В следующем месяце
Еще одна важная концепция заключается в том, что для Linux все представляет собой файл. У этой концепции есть несколько интересных и важных практических применений для пользователей и системных администраторов. Причина, по которой я упоминаю об этом, заключается в том, что вы, возможно, захотите прочитать мою статью «Все есть файл» перед статьей, которую я планирую опубликовать в следующем месяце в каталоге /dev.
Крис Хоффман
Крис Хоффман
Главный редактор
Крис Хоффман – главный редактор How-To Geek. Он писал о технологиях более десяти лет и два года был обозревателем PCWorld. Крис писал для The New York Times, давал интервью в качестве эксперта по технологиям на телевизионных станциях, таких как NBC 6 в Майами, и освещал свою работу в таких новостных агентствах, как BBC. С 2011 года Крис написал более 2000 статей, которые были прочитаны почти миллиард раз — и это только здесь, в How-To Geek. Подробнее.
Если вы работаете с Windows, структура файловой системы Linux может показаться особенно чуждой. Диск C:\ и буквы дисков исчезли, их заменили / и загадочно звучащие каталоги, большинство из которых имеют трехбуквенные имена.
Стандарт иерархии файловых систем (FHS) определяет структуру файловых систем в Linux и других UNIX-подобных операционных системах. Однако файловые системы Linux также содержат некоторые каталоги, которые еще не определены стандартом.
/ — корневой каталог
Все в вашей системе Linux находится в каталоге /, известном как корневой каталог. Вы можете думать о каталоге / как о каталоге C:\ в Windows, но это не совсем так, поскольку в Linux нет букв дисков. В то время как другой раздел будет расположен в D:\ в Windows, этот другой раздел появится в другой папке в / в Linux.
/bin — основные двоичные файлы пользователя
Каталог /bin содержит основные пользовательские двоичные файлы (программы), которые должны присутствовать при монтировании системы в однопользовательском режиме. Такие приложения, как Firefox, хранятся в /usr/bin, а важные системные программы и утилиты, такие как оболочка bash, находятся в /bin. Каталог /usr может храниться в другом разделе — размещение этих файлов в каталоге /bin гарантирует наличие в системе этих важных утилит, даже если никакие другие файловые системы не смонтированы. Каталог /sbin аналогичен — он содержит необходимые двоичные файлы системного администрирования.
/boot — статические загрузочные файлы
Каталог /boot содержит файлы, необходимые для загрузки системы — например, здесь хранятся файлы загрузчика GRUB и ваши ядра Linux. Однако файлы конфигурации загрузчика находятся не здесь — они находятся в /etc с другими файлами конфигурации.
/cdrom — Историческая точка монтирования компакт-дисков
Каталог /cdrom не является частью стандарта FHS, но вы все равно найдете его в Ubuntu и других операционных системах. Это временное место для компакт-дисков, вставленных в систему. Однако стандартное расположение временного носителя — внутри каталога /media.
/dev — файлы устройств
Linux предоставляет устройства в виде файлов, а каталог /dev содержит ряд специальных файлов, представляющих устройства. Это не настоящие файлы, какими мы их знаем, но они выглядят как файлы — например, /dev/sda представляет первый диск SATA в системе. Если вы хотите разбить его на разделы, вы можете запустить редактор разделов и сказать ему отредактировать /dev/sda.
Этот каталог также содержит псевдоустройства, то есть виртуальные устройства, которые на самом деле не соответствуют оборудованию. Например, /dev/random создает случайные числа. /dev/null – это специальное устройство, которое не производит никаких выводов и автоматически отбрасывает все вводимые данные. Когда вы передаете вывод команды в /dev/null, вы отбрасываете его.
/etc — файлы конфигурации
Каталог /etc содержит файлы конфигурации, которые обычно можно редактировать вручную в текстовом редакторе. Обратите внимание, что каталог /etc/ содержит общесистемные файлы конфигурации — файлы конфигурации для конкретных пользователей находятся в домашнем каталоге каждого пользователя.
/home — Домашние папки
Каталог /home содержит домашнюю папку для каждого пользователя. Например, если ваше имя пользователя bob, у вас есть домашняя папка, расположенная в /home/bob. Эта домашняя папка содержит файлы данных пользователя и пользовательские файлы конфигурации. Каждый пользователь имеет доступ только для записи в свою домашнюю папку и должен получить повышенные разрешения (стать привилегированным пользователем) для изменения других файлов в системе.
/lib — Основные общие библиотеки
Каталог /lib содержит библиотеки, необходимые для основных двоичных файлов в папках /bin и /sbin. Библиотеки, необходимые для двоичных файлов в папке /usr/bin, находятся в /usr/lib.
/lost+found — Восстановленные файлы
В каждой файловой системе Linux есть каталог потерянных и найденных файлов. В случае сбоя файловой системы при следующей загрузке будет выполнена проверка файловой системы. Все найденные поврежденные файлы будут помещены в каталог Lost+Found, чтобы вы могли попытаться восстановить как можно больше данных.
/media — Съемный носитель
Каталог /media содержит подкаталоги, в которых монтируются съемные носители, вставленные в компьютер. Например, когда вы вставляете компакт-диск в свою систему Linux, внутри каталога /media будет автоматически создан каталог. Вы можете получить доступ к содержимому компакт-диска внутри этого каталога.
/mnt — временные точки монтирования
Исторически сложилось так, что каталог /mnt — это место, куда системные администраторы монтировали временные файловые системы во время их использования. Например, если вы монтируете раздел Windows для выполнения некоторых операций по восстановлению файлов, вы можете смонтировать его в /mnt/windows. Однако вы можете монтировать другие файловые системы в любом месте системы.
/opt — Дополнительные пакеты
Каталог /opt содержит подкаталоги для дополнительных пакетов программного обеспечения. Он обычно используется проприетарным программным обеспечением, которое не подчиняется стандартной иерархии файловой системы. Например, проприетарная программа может создавать дамп своих файлов в /opt/application при ее установке.
/proc — файлы ядра и процесса
Каталог /proc аналогичен каталогу /dev, поскольку не содержит стандартных файлов. Он содержит специальные файлы, содержащие информацию о системе и процессах.
/root — корневой домашний каталог
Каталог /root — это домашний каталог пользователя root. Вместо того, чтобы находиться в /home/root, он находится в /root. Это отличается от /, который является корневым каталогом системы.
/run — Файлы состояния приложения
Каталог /run появился относительно недавно и предоставляет приложениям стандартное место для хранения временных файлов, которые им нужны, например сокетов и идентификаторов процессов. Эти файлы нельзя хранить в /tmp, так как файлы в /tmp могут быть удалены.
/sbin — двоичные файлы системного администрирования
Каталог /sbin аналогичен каталогу /bin. Он содержит важные двоичные файлы, которые обычно предназначены для запуска пользователем root для системного администрирования.
/selinux — виртуальная файловая система SELinux
Если ваш дистрибутив Linux использует SELinux для обеспечения безопасности (например, Fedora и Red Hat), каталог /selinux содержит специальные файлы, используемые SELinux. Это похоже на /proc. Ubuntu не использует SELinux, поэтому наличие этой папки в Ubuntu кажется ошибкой.
/srv — служебные данные
/tmp — временные файлы
Приложения хранят временные файлы в каталоге /tmp. Эти файлы обычно удаляются при каждом перезапуске системы и могут быть удалены в любой момент такими утилитами, как tmpwatch.
/usr — Пользовательские двоичные файлы и данные только для чтения
Каталог /usr содержит приложения и файлы, используемые пользователями, в отличие от приложений и файлов, используемых системой. Например, второстепенные приложения находятся в каталоге /usr/bin, а не в каталоге /bin, а второстепенные двоичные файлы системного администрирования — в каталоге /usr/sbin, а не в каталоге /sbin. Библиотеки для каждого находятся внутри каталога /usr/lib. Каталог /usr также содержит другие каталоги — например, независимые от архитектуры файлы, такие как графика, находятся в /usr/share.
Каталог /usr/local — это место, куда по умолчанию устанавливаются локально скомпилированные приложения — это не позволяет им испортить остальную часть системы.
/var — файлы переменных данных
Каталог /var является доступным для записи аналогом каталога /usr, который при нормальной работе должен быть доступен только для чтения. Файлы журналов и все остальное, что обычно записывается в /usr во время нормальной работы, записывается в каталог /var. Например, вы найдете файлы журналов в /var/log.
Для получения более подробной технической информации об иерархии файловой системы Linux см. документацию по стандарту иерархии файловой системы.
Команды Linux | |
Файлы | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm |
Процессы | alias · screen · top · nice · renice · прогресс · strace · systemd · tmux · chsh · история · at · пакетное · бесплатное · которое · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · стена · yes · kill · спать · sudo · su · время · groupadd · usermod · группы · lshw · выключение · перезагрузка · halt · poweroff · passwd · lscpu · crontab · date · bg · fg |
Сеть | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · копать · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
- › Как использовать getopts для анализа параметров сценария оболочки Linux
- › Что такое компьютерные файлы и папки?
- › Как получить доступ к файлам Ubuntu Bash в Windows (и системному диску Windows в Bash)
- › Является ли файловая система просто набором папок? (объяснение файловых систем)
- › Как предоставить доступ к файлам вашего компьютера виртуальной машине
- › 6 отличий файловой системы Linux от файловой системы Windows
- › Как использовать рабочий стол SteamOS
- › Как восстановить метки панели задач в Windows 11
Этот краткий обзор предлагает пользователям DOS/Windows безопасное введение в структуру файловой системы Linux, которая не так уж и отличается.
Опубликовано: 5 сентября 2019 г. | Кен Хесс (Red Hat)
Если вы решили поближе познакомиться с Linux, но вас отталкивают косые черты, точки, корни, монтирование и странности терминала, это введение в структуру файловой системы Linux объяснит все это с точки зрения DOS/Windows. Единственное предположение, которое я сделал, это то, что вы немного знакомы с макетом файловой системы Windows, а также с некоторой навигацией по окнам DOS или Command ( CMD ). Вы обнаружите, что Linux во многих отношениях не так уж сильно отличается от Windows. Мы даже не будем касаться того, кто у кого что украл, потому что очевидно, что вдохновение приходит из многих источников.
Дополнительные ресурсы по Linux
Для ясности: я знаю, что Windows больше не основана на DOS.Но и в Linux, и в Windows есть интерфейс командной строки (CLI), и вместо того, чтобы называть его CMD, Command Window или как-то еще, проще использовать устаревший термин DOS для CLI Windows. Я также взаимозаменяемо использую термины файловая система и структура файловой системы. Я имею в виду расположение файлов, каталогов, конфигураций, разбиение по страницам и т. д., а не форматирование файловой системы на уровне битов, такое как, например, NTFS или XFS.
Сравните два макета ниже. Red Hat Enterprise Linux 8 находится слева, а Microsoft Windows Server 2012 R2 — справа. Обратите внимание на сходства и различия между ними:
[Хотите попробовать Red Hat Enterprise Linux? Загрузите его сейчас бесплатно.]
В Linux есть несколько каталогов под корнем ( / ), а в Windows их относительно немного. Это связано с тем, что Windows хранит все, кроме приложений, в каталоге C:\Windows. Приложения находятся либо в каталогах Program Files, либо в каталогах Program Files (x86). Linux хранит свои приложения в каталоге /usr. Каталог Linux /home соответствует каталогу Windows C:\Users.
В следующей таблице показаны важные каталоги Linux и их функции (→ — это символическая ссылка или ярлык в терминологии Windows):
Каталог | Назначение |
---|---|
bin -> /usr/bin | Каталог, содержащий двоичные файлы пользователя . |
boot | Каталог, содержащий файлы загрузчика. | tr>
dev | Каталог, содержащий файлы устройств. |
etc | Каталог, содержащий файлы конфигурации. |
home | Каталог, содержащий домашние каталоги пользователей. |
lib -> / usr/lib | Каталог, содержащий системные библиотеки. |
lib64 -> /usr /lib64 | Каталог, содержащий 64-битные системные библиотеки. |
носитель | Где автоматически монтируются DVD и съемные устройства. |
mnt | Каталог, используемый для временного монтирования удаленных файловых систем и других носителей. |
opt | Каталог, в котором установлено стороннее программное обеспечение. |
proc | Каталог, содержащий информацию о системном процессе. |
root< /td> | Домашний каталог пользователя root. |
запустить | Рабочий каталог времени выполнения (в ОЗУ). |
sbin -> /usr/sbin | Каталог, содержащий двоичные файлы системы. |
srv | Каталог, содержащий служебные данные. | sys | Каталог, содержащий информацию об устройствах, модулях ядра, файловых системах и другой информации о компонентах ядра. | tr>
tmp | Каталог, содержащий временные файлы. |
usr | Каталог, содержащий пользовательские программы. |
var | Каталог, содержащий переменные файлы, такие как журналы и временные файлы. |
Обратите внимание, что когда вы пишете имена каталогов в Linux, вы всегда включаете корневой каталог ( / ) и аналогичным образом вы включаете ( C:\ ) в Windows. Важно включить ссылки на корневой каталог в обеих операционных системах. Например, в Linux есть такие каталоги, как /usr/bin, /usr/sbin и /tmp. У Windows может быть несколько корней, поэтому в одной системе могут быть C:\Temp , D:\Temp и E:\Temp . Вы можете видеть, что простое упоминание tmp в Linux или Temp в Windows сбивает с толку и недостаточно конкретно, чтобы четко указать на конкретный каталог.
Из моего письма вы также заметите, что косая черта для Linux — это обратная косая черта, а для Windows — прямая косая черта или «удар». Вы когда-нибудь задумывались, почему обратная косая черта — это одно слово, а прямая косая черта — два? В Linux обратная косая черта — это оператор, который означает игнорирование следующего символа, который действительно испортит ваш путь к файлу.Таким образом, есть некоторые различия в том, как вы взаимодействуете с двумя операционными системами, в том, как вы перемещаетесь, где находятся объекты и в обозначениях PATH, но вы также видите некоторые сходства.
Хотя Windows хранит файлы конфигурации в разных местах, большинство из них находится где-то в каталоге C:\Windows и десятках его подкаталогов. Linux почти исключительно использует каталог /etc для конфигураций. Приложения в Linux часто хранят свои файлы конфигурации в собственном подкаталоге etc (вы произносите etc как et-see). В обсуждениях, если вы ссылаетесь на каталог /etc, /tmp, /home или любой другой каталог первого уровня, вам не нужно говорить «косая черта». Просто произнесите «etc», «home» или «tmp». Если вы имеете в виду подкаталог, вы можете сказать «usr bin» (/usr/bin) или «usr local bin» (/usr/local/bin). А usr произносится как «пользователь». Это похоже на то, как вы обращаетесь к каталогу C:\Windows, говоря «каталог Windows» ( C:\Windows ), или к C:\Windows\System32, говоря «каталог Windows System32».
Кстати, в Windows тоже есть каталог etc, но он хорошо спрятан в C:\Windows\System32\drivers\etc. В этом каталоге etc вы найдете файлы, общие для обеих операционных систем, такие как hosts , lmhosts , протокол , сети и службы .
В командной строке вы можете перемещаться по обеим системам с помощью команды cd. Единственное, что вы должны помнить, это то, в какую сторону идут косые черты. При переходе на Linux вы обнаружите, что навигация становится естественной, а клавиша / расположена гораздо удобнее, чем клавиша \. Хотя направление косой черты не будет самой большой проблемой. Просто подождите, пока вы не наберете ls в приглашении C:\>, и поймете, что вы сделали, когда увидите, что «ls» не распознается как внутренняя или внешняя команда, исполняемая программа или ошибка пакетного файла. Ввод dir в командной строке Linux гораздо менее травматичен. Подсказка: dir — это псевдоним для ls в Linux.
Я думаю, вы найдете файловую систему Linux организованной, простой в навигации и приятной в управлении. В будущих статьях мы расскажем о разрешениях Linux и покажем вам, насколько по-настоящему мощным и безопасным является Linux. А пока сосредоточьтесь на ознакомлении со структурой и расположением важных файлов и каталогов.
Читайте также: