20 марта 2023 Время чтения: 4 минуты

Лев Матюшкин,

разработчик ПО

Структура файловой системы Linux

ispmanager

Если вы всегда работали на Windows, то файловая структура на сервере с Linux покажется непривычной. На самом деле она даже проще и предсказуймее. Хотя существуют файловые менеджеры с графическим интерфейсом, иногда бывает полезно заглянуть «под капот» и проверить, как всё работает. Разработчики особенно ценят Linux за предоставляемое удобство работы с файлами из терминала.

Дерево файловой структуры

Файловая структура — это дерево. В Windows таких деревьев несколько — по числу логических дисков (С, D и так далее). В Linux дерево всегда одно, его корню соответствует символ косой черты /. Всё, что есть в системе, все логические и физические устройства являются частью этого дерева и имеют свои уникальные адреса.

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

Имена файлов и директорий

Имена файлов это строковые значения, использование расширения в Linux не является обязательным. То есть файл blinding_lights.mp3 — это и в Linux всё тот же файл с музыкой и тем же названием, что в Windows. Но файл с именем some_text_file система тоже распознает, как родной. При этом регистр букв имеет значение: some_TEXT_file — это уже другое имя.

Видимость файлов в отличие от Windows определяется не каким-то свойством файла, а просто его названием. Скрытыми становятся файлы и директории, чьи имена начинаются с символа точки. В таких файлах и директориях обычно хранятся различные настройки. Например, система контроля версий Git создает в директории проекта поддиректорию .git, а файлы настроек программы bash можно найти в файле .bashrc в домашней директории. Кстати, о домашней директории — давайте поговорим об адресации.

Адресация: путь к файлу

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

К примеру, пользователь с именем ispmanager создал в домашней директории каталог cool с изображением snow.gif. Адрес соответствующего файла будет /home/ispmanager/cool/snow.gif.

Для перемещения между директориями и обращения к отдельным файлами не обязательно помнить их абсолютные пути:

  • одна точка (.) обозначает текущую директорию (в нашем примере это /home/ispmanager/cool , где хранится файл snow.gif),
  • две точки (..) обозначают родительскую директорию для текущей (в примере родительской директорией для cool является директория ispmanager) ,
  • тильда (~) указывает на домашнюю директорию пользователя (в нашем примере соответствует /home/ispmanager)
  • минус (-) указывает на предыдущую директорию по отношению к текущей — так, чтобы нам было проще переключаться между последними просмотренными директориями.

С помощью такой нотации легко управлять файлами и директориями, не используя курсора, а печатая нужные команды в терминале. Для самого перемещения используется команда cd (сокращение от англ. change directory). Но о командах мы поговорим далее. Давайте пока разберемся, откуда в указанном пути взялась директория /home.

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

Если вы работали с Windows, то наверняка знаете, что какие-то пути имеют стандартный вид. Например, файлы программ обычно хранятся по адресу C:\Program Files. Файловая система Linux следует определенным правилам, которые называются FHS (англ. Filesystem Hierarchy Standard, «стандарт иерархии файловой системы»).

Вот некоторые из наиболее часто упоминаемых директорий:

  • / — корневой каталог, содержащий всю файловую иерархию,
  • /bin — основные утилиты,
  • /boot — загрузочные файлы,
  • /dev — основные файлы устройств,
  • /etc — общие системные конфигурационные файлы
  • /home — домашние каталоги пользователей
  • /lib — библиотеки, необходимые для работы программ из /bin,
  • /media — точки сменных носителей,
  • /opt — дополнительное программное обеспечение,
  • /sys — информация об устройствах, драйверах и системе в целом,
  • /tmp — временные файлы,
  • /usr — директория, в которой создается вторичная иерархия для данных пользователя, то существуют /usr/bin, /usr/local и другие директории, которые необходимы для использования в многопользовательском режиме,
  • /var — изменяемые файлы: кэш приложений, информация о состоянии программ, задачи, ожидающие обработки.

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

Базовые команды

Операционная система предоставляет множество команд для работы с файловой структурой. Большинство соответствующих программ хранится в каталоге /bin. Перечислим наиболее популярные:

  • pwd выводит полный путь текущей рабочей директории (print working directory);
  • cd изменяет текущую директорию (change directory). После команды можно указать абсолютный путь к директории либо воспользоваться обозначенными выше cd .., cd -, а команда без аргументов cd идентична переход в домашнюю директорию cd ~;
  • ls выводит список (list) файлов и директорий. У этой команды много дополнительных аргументов: ls -a покажет все файлы, включая скрытые, ls -R выведет список всех файлов в подкаталогах и так далее;
  • mkdir создает каталог (make directory). После команды указывает имя каталога в текущей директории. Либо можно указать путь, по которому нужно создать каталог с заданным именем.
  • touch создает новый пустой файл по заданному адресу;
  • rm удаляет (remove) файлов или директорий. С этой командой нужно быть осторожным, так как она удаляет файлы безвозвратно;
  • mv переносит (mve) файлы из одной директории в другую;
  • locate выполняет поиск файлов и директорий с заданным именем по всему дереву;
  • find выполняет поиск в текущей директории;
  • df выводит отчет об использовании дискового пространства в системе;
  • du проверяет сколько места занимает файл или каталог.

Напишите в комментариях, если вы хотели бы больше узнать об аргументах этих команд и других командах Linux — и мы подготовим материал.

Права пользователей

В Linux у каждого файла есть набор прав доступа, который определяет, какие пользователи имеют право читать файл, записывать в него данные или исполнять его (важно для программ). Полный доступ к системе имеет единственный пользователь — root. Он может всё: удалить любой файл, запустить или завершить любой процесс, добавить или удалить новых пользователей.

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

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

Менеджер файлов

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

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