Символические ссылки
Символические ссылки более всего похожи на обычные ярлыки. Они содержат адрес нужного файла в вашей файловой системе. Когда вы пытаетесь открыть такую ссылку, то открывается целевой файл или папка. Главное ее отличие от жестких ссылок в том, что при удалении целевого файла ссылка останется, но она будет указывать в никуда, поскольку файла на самом деле больше нет.
Вот основные особенности символических ссылок:
- Могут ссылаться на файлы и каталоги;
- После удаления, перемещения или переименования файла становятся недействительными;
- Права доступа и номер inode отличаются от исходного файла;
- При изменении прав доступа для исходного файла, права на ссылку останутся неизменными;
- Можно ссылаться на другие разделы диска;
- Содержат только имя файла, а не его содержимое.
Теперь давайте рассмотрим жесткие ссылки.
Общие понятия
Назначение файловой системы — обеспечение интерфейса к данным на накопителях. Цель — организация хранения и доступа.
Состав файловой системы
- Совокупность файлов.
- Набор структур данных управления (каталоги, дескрипторы, таблицы).
- Функции управления (создание объекта ФС, уничтожение, чтение, запись).
Каждый файл характеризуется своим уникальным именем. Чтобы упростить имена используются разрешения.
Для FAT16 правило 8.3: имя файла может состоять из 12 символов (8 — основная часть, и 3 символа расширения).
При копировании в файловой системе файлов производится преобразование имен.
Путь в файловой системе — для однозначной идентификации объекта.
Типы файлов
- Текстовые.
- Двоичные.
- Специальные (связанные с аппаратными устройствами).
- Файлы, через которые описываются каталоги (директор).
Атрибуты файлов
- Системные.
- Архивные.
- Только для чтения.
- Скрытые.
- Время создания
- Временные
Типы иерархической структуры
- Дерево: узлы — объекты файловой системы, показана их вложенность; корень — точка, в которой начинается файловая система.
- Сеть: в отличие от дерева один объект может присутствовать в разных директориях.
С понятием файловые системы связаны следующие технологии:
Использование ссылок в Linux
Теоретические отличия вы знаете, но осталось закрепить все это на практике, поэтому давайте приведем несколько примеров работы со ссылками в Linux. Для создания символических ссылок существует утилита ln. Ее синтаксис очень прост:
$ ln опции файл_источник файл_ссылки
Рассмотрим опции утилиты:
- -d – разрешить создавать жесткие ссылки для директорий суперпользователю;
- -f – удалять существующие ссылки;
- -i – спрашивать нужно ли удалять существующие ссылки;
- -P – создать жесткую ссылку;
- -r – создать символическую ссылку с относительным путем к файлу;
- -s – создать символическую ссылку.
Создание символических ссылок
Сначала создайте папку test и перейдите в нее:
mkdir test && cd test
Затем создайте файл с именем source с каким-либо текстом:
echo «текст текст текст текст» > source $ cat source
Файл готов, дальше создадим символическую ссылку Linux, для этого используется команда ln с опцией -s:
ln -s source softlink
Как видите, нет никакой разницы между ней и исходным файлом. Но утилита ls покажет что это действительно ссылка:
Несмотря на то, что содержимое одинаковое, здесь мы видим, что адрес иноды и права доступа к файлам отличаются, кроме того, явно показано что это символическая ссылка Linux.
Теперь удалите исходный файл и посмотрите что будет:
Вы получите ошибку, что такого файла не существует, потому что мы действительно удалили исходный файл. Если вы удалите ссылку, то исходный файл останется на месте.
Создание жестких ссылок
Снова создайте файл source с произвольным текстом:
echo «текст текст текст текст» > source $ cat source
Теперь создадим жесткую ссылку Linux. Для этого достаточно вызвать утилиту без параметров:
ln source hardlink
Посмотрите содержимое файла:
Данные те же самые, а если мы посмотрим вывод утилиты ls, то увидим что inode и права доступа тоже совпадают:
Если для одного из файлов поменять разрешения, то они изменяться и у другого. Теперь удалите исходный файл:
Затем посмотрите содержимое:
Как видите, ничего не произошло и ссылка по-прежнему указывает на нужный участок диска, это главное отличие жесткой ссылки от символической. Мы можем сделать вывод, что жесткая ссылка linux это обычный файл. Каждый файл имеет как минимум одну ссылку, но для некоторых мы можем создать несколько ссылок.
chmod
Команда chmod устанавливает права доступа к файлу или каталогу.
chmod позволяет:
- Разделить привилегии между пользователями.
- Ограничить доступ к нежелательным файлам и папкам.
- Контролировать доступные сервисам действия и прочее.
Синтаксис команды chmod:
Если вывести список папок и файлов командой ls с параметром –l, то можно увидеть нечто подобное:
Первый символ означает:
- «-» — является файлом;
- «d» — является каталогом.
Остальная часть строки в 9 символов разбивается на три группы по 3 символа в каждой:
- Первые 3 символа – права доступа к файлам владельца (-rwx——).
- Вторые 3 символа – права доступа к файлам группы (—-rwx—).
- Последние 3 символа – разрешения для других (——-rwx).
Обозначения символов:
- r – Чтение.
- w – Запись.
- x – Выполнение.
Если какой-то из символов отсутствует и вместо него указан «-», тогда нет доступа к данному действию.
Также задать права доступа можно с помощью цифр:
- 0 – нет прав (-);
- 1 – только выполнение (—x);
- 2 – только запись (-w-);
- 3 – запись и выполнение (w-x);
- 4 – только чтение (r—);
- 5 – чтение и выполнение (r-x);
- 6 – чтение и запись (rw-);
- 7 – чтение, запись и выполнение (rwx).
Например, у файла «ex.txt» указаны все права:
Нужно изменить их на:
- Пользователь – все права (7 или rwx).
- Группа – чтение и запись (6 или rw-).
- Другим – чтение и выполнение (5 или r-x).
Тогда вводим следующую команду:
Общая модель файловой системы
Функционирование любой файловой системы можно представить многоуровневой моделью, в которой каждый уровень предоставляет некоторый интерфейс (набор функций) вышележащему уровню, а сам, в свою очередь, для выполнения своей работы использует интерфейс (обращается с набором запросов) нижележащего уровня.
Задачей символьного уровня является определение по символьному имени файла его уникального имени. В файловых системах, в которых каждый файл может иметь только одно символьное имя (например, MS-DOS), этот уровень отсутствует, так как символьное имя, присвоенное файлу пользователем, является одновременно уникальным и может быть использовано операционной системой. В других файловых системах, в которых один и тот же файл может иметь несколько символьных имен, на данном уровне просматривается цепочка каталогов для определения уникального имени файла. В файловой системе UNIX, например, уникальным именем является номер индексного дескриптора файла (i-node).
На следующем, базовом уровне по уникальному имени файла определяются его характеристики: права доступа, адрес, размер и другие.
Следующим этапом реализации запроса к файлу является проверка прав доступа к нему. Для этого сравниваются полномочия пользователя или процесса, выдавших запрос, со списком разрешенных видов доступа к данному файлу. Если запрашиваемый вид доступа разрешен, то выполнение запроса продолжается, если нет, то выдается сообщение о нарушении прав доступа.
На логическом уровне определяются координаты запрашиваемой логической записи в файле, то есть требуется определить, на каком расстоянии (в байтах) от начала файла находится требуемая логическая запись. При этом абстрагируются от физического расположения файла, он представляется в виде непрерывной последовательности байт.
На физическом уровне файловая система определяет номер физического блока, который содержит требуемую логическую запись, и смещение логической записи в физическом блоке.
После определения номера физического блока, файловая система обращается к системе ввода-вывода для выполнения операции обмена с внешним устройством. В ответ на этот запрос в буфер файловой системы будет передан нужный блок, в котором на основании полученного при работе физического уровня смещения выбирается требуемая логическая запись.
Жесткие ссылки
Этот тип ссылок реализован на более низком уровне файловой системы. Файл размещен только в определенном месте жесткого диска. Но на это место могут ссылаться несколько ссылок из файловой системы. Каждая из ссылок — это отдельный файл, но ведут они к одному участку жесткого диска
Файл можно перемещать между каталогами, и все ссылки останутся рабочими, поскольку для них неважно имя. Рассмотрим особенности:
- Работают только в пределах одной файловой системы;
- Нельзя ссылаться на каталоги;
- Имеют ту же информацию inode и набор разрешений что и у исходного файла;
- Разрешения на ссылку изменяться при изменении разрешений файла;
- Можно перемещать и переименовывать и даже удалять файл без вреда ссылке.
Что именно является символической ссылкой?
Обычно называемые symlink(символической ссылкой) или soft link(мягкой ссылкой), символические ссылки представляют собой очень маленькие файлы. На самом деле символическая ссылка содержит только имя любого файла, на который она указывает, обычно вместе с путем к файловой системе (относительно текущего местоположения или абсолютного значения).
Если файл с именем file1 указывает на файл с именем /apps/files/file-2020, длина file1 будет составлять 21 символ, даже если размер файла file-2020 составляет 2 терабайта. Если он указывает на ./file-2020, длина его будет всего 11 символов. Если указывает на file-2020, то только девять.
Если вы выполните команду, подобную «vi file1» (где file1 — имя символической ссылки), вы в конечном итоге отредактируете любой файл, на который указывает file1, а не содержимое самой символической ссылки. Системы Linux знают, как работать с символическими ссылками, и просто делают правильные вещи. Точно так же, если вы используете такие команды, как cat, more, head или tail, вы будете просматривать содержимое указанного файла.
Если вы удалите символическую ссылку, с другой стороны, вы удалите ссылку, а не ссылочный файл. Опять же, Linux делает то, что имеет смысл. Симлинки предназначены для упрощения использования и обмена файлами — не более того.
Обзор
Символьная ссылка содержит текстовую строку, которая автоматически интерпретируется операционной системой как путь к другому файлу или каталогу. Этот другой файл или каталог называется «целью». Символьная ссылка — это второй файл, который существует независимо от своей цели. Если символическая ссылка удаляется, ее цель остается неизменной. Если символическая ссылка указывает на цель, и когда-то позже эта цель перемещается, переименовывается или удаляется, символическая ссылка не обновляется или удаляется автоматически, но продолжает существовать и по-прежнему указывает на старую цель, теперь несуществующее местоположение или файл. Символические ссылки, указывающие на перемещенные или несуществующие цели, иногда называют сломанными , потерянными , мертвыми или зависшими .
Символические ссылки отличаются от жестких ссылок. Жесткие ссылки не связывают пути в разных томах или файловых системах, тогда как символические ссылки могут указывать на любой файл или каталог независимо от томов, на которых находится ссылка и цель. Жесткие ссылки всегда относятся к существующему файлу, тогда как символические ссылки могут содержать произвольный путь, который ни на что не указывает.
Символьные ссылки работают прозрачно для многих операций: программы, которые читают или записывают файлы, названные символьной ссылкой, будут вести себя так, как если бы они работали непосредственно с целевым файлом. Однако они имеют эффект изменения иерархической файловой системы с дерева на ориентированный граф, что может иметь последствия для таких простых операций, как определение текущего каталога процесса. Даже стандарт Unix для перехода к родительскому каталогу каталога больше не работает надежно перед лицом символических ссылок. Некоторые оболочки эвристически пытаются поддержать иллюзию древовидной иерархии, но когда они это делают, это заставляет их выдавать разные результаты от других программ, которые манипулируют именами путей без такой эвристики, полагаясь вместо этого на операционную систему. Таким образом, программы, которым необходимо обрабатывать символические ссылки специально (например, оболочки и утилиты резервного копирования), должны идентифицировать их и управлять ими напрямую.
Некоторые дистрибутивы Unix, а также Linux широко используют символические ссылки, чтобы изменить порядок иерархии файловой системы . Это достигается с помощью нескольких механизмов, таких как вариантные контекстно-зависимые символические ссылки. Это дает возможность создать более интуитивно понятное или ориентированное на приложение дерево каталогов и реорганизовать систему без изменения основного набора системных функций и утилит.
Что такое ссылка на файл в Linux
Ссылка на файл в Linux — это указатель на файл. Если проводить аналогию с Windows, то ссылки чем-то похожи на ярлыки. То есть вы создаете ссылку, которая указывает на какой-либо файл или директорию, и можете разместить эту ссылку в другом каталоге. Обращаясь к такой ссылке, вы будете обращаться к настоящему файлу или каталогу.
Ссылки в Linux бывают двух типов: символические и жесткие. Не смотря на то, что оба типа называются ссылками, они имеют существенные отличия друг от друга
Поэтому очень важно понимать, как создавать и использовать тот или иной тип ссылок
Что такое символические ссылки
Символическая ссылка (symbolic link) — это специальный файл, который является ссылкой на другой файл или каталог (их еще называют целевым файлом, целевым каталогом).
Символические ссылки также называют символьными, мягкими ссылками (soft links) или сим-ссылками (sym-link).
Важно понимать, что символическая ссылка не содержит в себе внутри копии самого файла, на которую она указывает. Она является всего лишь указателем на файл
Не смотря на это, символическая ссылка обладает собственными правами доступа, так как сама является небольшим файлом, который содержит путь до целевого файла.
Возвращаясь к аналогии с ярлыками в Windows, символические ссылки это своего рода ярлыки на файлы. Можно создавать несколько символических ссылок на один файл и эти ссылки могут иметь разные имена.
Связь между символической ссылкой и файлом, на который она указывает, является «мягкой». Если удалить символическую ссылку, то файл, на который она указывает, не удаляется.
Если удалить файл, на который указывает ссылка, то сама ссылка не обновляется и остается на диске. При этом она указывает на уже несуществующий файл. Аналогично, если переименовать или переместить целевой файл, то ссылка не обновляется автоматически.
При создании символических ссылок можно указывать относительный путь до целевого файла. В таком случае ссылка считает, что относительный путь указан относительно каталога, в котором создана сама ссылка (но не относительно каталога, из которого она была создана).
Схематично отношение между файлом, символической ссылкой и данными, которые хранятся в файле, можно показать следующим образом:
Что такое жесткие ссылки
Жесткая ссылка (hard link) является своего рода синонимом для существующего файла. Когда вы создаете жесткую ссылку, создается дополнительный указатель на существующий файл, но не копия файла.
Жесткие ссылки выглядят в файловой структуре как еще один файл. Если вы создаете жесткую ссылку в том же каталоге, где находится целевой файл, то они должны иметь разные имена. Жесткая ссылка на файл должна находится в той же файловой системе, где и другие жесткие ссылки на этот файл.
В Linux каждый файл имеет уникальный идентификатор — индексный дескриптор (inode). Это число, которое однозначно идентифицирует файл в файловой системе. Жесткая ссылка и файл, для которой она создавалась имеют одинаковые inode. Поэтому жесткая ссылка имеет те же права доступа, владельца и время последней модификации, что и целевой файл. Различаются только имена файлов. Фактически жесткая ссылка это еще одно имя для файла.
Жесткие ссылки нельзя создавать для директорий.
Жесткая ссылка не может указывать на несуществующий файл.
Жесткие ссылки появились раньше, чем символические, но сейчас уже устаревают. В повседневной работе жесткие ссылки используются редко.
Схематично отношение между исходным файлом, жесткой ссылкой и данными можно показать следующей схемой:
Отличия символических ссылок от жестких
Кратко подведем итог, написанного выше.
Символическая ссылка:
- Указывает на целевой файл или каталог. Фактически является небольшим файлом, содержащим путь до целевого файла.
- Не содержит внутри себя содержимого самого файла. Содержит путь к целевому файлу.
- Имеет собственные права доступа, которые не распространяются на целевой файл.
- Удаление / переименование / перемещение целевого файла не обновляет автоматически ссылку. Ссылка начинает указывать на несуществующий файл, становится неработающей.
- Изменение прав доступа у целевого файла не обновляет права доступа у ссылки.
- Может быть создана для директории.
- Ссылка и целевой файл имеют разные файловые индексы (inode) в файловой системе.
- Может указывать на несуществующий файл.
- Символическая ссылка может использовать относительный путь до целевого файла.
Жесткая ссылка:
- Является своего рода еще одним именем на файл.
- Не может указывать на директорию.
- Нельзя создавать жесткие ссылки между файлами разных файловых систем.
- Не может указывать на несуществующий файл.
- Жесткая ссылка и файл, для которого она создавалась, имеют одинаковые индексы (inode) в файловой системе.
Жесткие ссылки
Этот тип ссылок реализован на более низком уровне файловой системы. Файл размещен только в определенном месте жесткого диска. Но на это место могут ссылаться несколько ссылок из файловой системы. Каждая из ссылок — это отдельный файл, но ведут они к одному участку жесткого диска
Файл можно перемещать между каталогами, и все ссылки останутся рабочими, поскольку для них неважно имя. Рассмотрим особенности:
- Работают только в пределах одной файловой системы;
- Нельзя ссылаться на каталоги;
- Имеют ту же информацию inode и набор разрешений что и у исходного файла;
- Разрешения на ссылку изменяться при изменении разрешений файла;
- Можно перемещать и переименовывать и даже удалять файл без вреда ссылке.
Альтернативные файловые системы
Существует несколько альтернативных файловых систем, поддерживаемых ядром Linux.
XFS
XFS — это 64-разрядная файловая система, которая впервые была представлена в 1994 году и встроена в ядро Linux с 2001 года. XFS поддерживает максимальный размер файла в 8 эксбибайт и ограничивает длину имени файла 255 байтами. Она поддерживает ведение логов и, как и ext4, сохраняет изменения в лог-файле до того, как они будут зафиксированы в основной файловой системе. Это снижает вероятность повреждения файлов.
Данные структурированы в виде B+-деревьев, что обеспечивает эффективное распределение пространства и, следовательно, повышение производительности.
Основным недостатком этой системы является сложный процесс изменения размера существующей файловой системы XFS.
OpenZFS
OpenZFS — это платформа, которая объединяет функционал традиционных файловых систем и диспетчера томов. Впервые была представлена в 2013 году. OpenZFS поддерживает максимальный размер файла в 16 эксбибайт и ограничивает максимальную длину имени файла 255 символами. В качестве особенностей данной системы можно выделить защиту от повреждения данных, шифрование данных, поддержку накопителей увеличенного объема, копирование при записи и RAID-Z.
Основным недостатком OpenZFS является юридическая несовместимость между лицензиями CDDL (OpenZFS) и GPL (ядро Linux). Эта проблема решается путем компиляции и загрузки кода ZFS в ядро Linux.
Btrfs
Btrfs (сокр. от англ. «B–tree file system») — это файловая система, которая была разработана компанией Oracle и выпущена вместе с ядром Linux 2.6.29 в 2009 году. Btrfs поддерживает максимальный размер файла в 16 эксбибайт и ограничивает максимальную длину имени файла 255 символами.
Некоторые особенности Btrfs включают в себя:
онлайн-дефрагментацию;
добавление и удаление блочных устройств в режиме онлайн;
поддержка RAID;
настраиваемое для каждого файла или тома сжатие;
клонирование файлов;
контрольные суммы и возможность создания файлов подкачки и разделов подкачки.
JFS
JFS (сокр. от англ. «Journaled File System») — это файловая система, которая была разработана компанией IBM для AIX Unix в 1990 году. Она является альтернативой файловой системе ext. Она также может быть использована вместо ext4 там, где требуется стабильность при небольшом количестве затрачиваемых ресурсов.
ReiserFS
ReiserFS — это альтернатива файловой системе ext3, которая обладает улучшенной производительностью и расширенным функционалом. Ранее, ReiserFS использовалась в качестве файловой системы по умолчанию в SUSE Linux. ReiserFS поддерживает динамическое изменение размеров файловой системы. К недостаткам можно отнести относительно низкую производительность.
Примечание: Такие файловые системы, как NTFS, FAT и HFS могут использоваться в Linux, но корневая файловая система Linux на них не устанавливается, поскольку они для этого не предназначены. Swap — это файл подкачки, служащий источником дополнительной памяти в тех случаях, когда для выполнения программы требуется больше оперативной памяти, чем имеется в компьютере, — он не является отдельной файловой системой.
Когда ломаются ссылки
Когда файл, на который указывает символическая ссылка, удаляется из системы или переименовывается, символическая ссылка больше не будет работать, как предполагалось. Символическая ссылка не будет обновляться или удаляться с изменениями в файле, на который она указывает. Она продолжит указывать на указанный файл, даже после того, как этот файл был давно удален.
Если вы попытаетесь использовать символическую ссылку, которая указывает на несуществующий файл, вы получите ошибку, подобную этой:
Если вы попытаетесь получить доступ к символической ссылке, которая указывает на себя (бывает и так), вы увидите что-то вроде этого:
Если первая буква в длинном списке не привлекла вашего внимания, это означает, что файл является символической ссылкой. Разрешения rwxrwxrwx являются стандартными и не отражают разрешения для файла, на который указывает символическая ссылка.
Как найти все жесткие ссылки на предоставленный файл
Жесткая ссылка — это не что иное, как конкретное местоположение физических данных. Вы даете разные имена, относящиеся к одному и тому же файлу. Файл относится к тому же inode, что и имя. Жесткие ссылки на файл foo можно создать следующим образом:
$ ln foo bar $ ln foo dir2/foobar
В приведенном выше примере bar и foobar являются другими именами файла foo. Lля поиска всех жестких ссылок для файла foo в текущем каталоге cинтаксис будет выглядеть следующим образом:
find /dir/to/search/ -samefile /path/to/file/name ## To find out all hard links to foo, use this command: find / -samefile foo find / -xdev -samefile foo
Примеры
Если есть файл с именем /etc/passwd и вам нужно получить все жесткие ссылки на него, которые существуют в каталоге /backups/ , запустите:
$ find /backups/ -samefile /etc/passwd
Примеры возможных выводов данных:
/backups/hourly.0/etc/passwd /backups/hourly.4/etc/passwd /backups/hourly.3/etc/passwd /backups/daily.0/etc/passwd /backups/hourly.1/etc/passwd /backups/hourly.2/etc/passwd
Если вы не хотите спускать каталоги на другие файловые системы, смонтированные однажды, попробуйте ввести:
$ find /backups/ -xdev -samefile /etc/passwd
Найдите и удаляйте все жесткие ссылки на файл с именем foo в /tmp/ директории
Введите следующую команду:
$ find /tmp/ -xdev -samefile foo -print0 | xargs -I {} -0 rm -v {}
Примеры возможных выводов данных:
removed '/tmp/dir2/foobar' removed '/tmp/foo' removed '/tmp/bar'
Справка, параметр -samefile не поддерживается моей командой find
Найдите номер файлов inode, для этого введите:
$ ls -li fileNameHere $ ls -li /tmp/demo.txt
Примеры возможных выводов данных:
4065089 -rw-r--r-- 3 vivek vivek 8 Feb 26 02:19 /tmp/demo.txt
Первый столбец вышеприведенного вывода отображает индекс inode # 4065089 . Теперь альтернативный синтаксис выглядит следующим образом для поиска всех жестких ссылок (hard link) для файла с именем /tmp/demo.txt , используя inode # 4065089 :
$ find /tmp/ -inum 4065089 $ find /tmp/ -xdev -inum 4065089
Примеры возможных выводов данных:
/tmp/demo.txt /tmp/dir2/file2.txt /tmp/file1.txt
Чтобы найти и удалить все жесткие ссылки (hard link) на файл с номером inode # 4065089 , запустите:
$ find /tmp/ -xdev -inum 4065089 | xargs rm -v $ find /tmp/ -xdev -inum 4065089 -print0 | xargs -I {} -0 rm -v {}
Вот пример моей сессии:
Рисунок 01: Как найти все жесткие ссылки (hard link) на заданное имя файла.
Это интересно:
- Установка и настройка Apache, PHP, MySQL, phpMyAdmin на Linux (LAMP)
- Установка и настройка сервера Apache, PHP, MySQL, phpMyAdmin на Windows 10
- Установка Adobe Photoshop CS6 на Linux (очень простой способ)
Типичная структура ФС системы Linux
Наличие тех или иных директорий может быт в зависимости от того, какой дистрибутив Вы используете. Ниже список наиболее важных и часто встречающихся:
/
/bin
/boot
/dev
/etc
/home
/lib
/lib64
/lost+found
/media
/mnt
/opt
/proc
/root
/run
/sbin
/selinux
/srv
/sys
/tmp
/usr
/var
Итак, рассмотрим все по-порядку.
/bin — главные бинарные файлы (исполняемые программы)
Содержит основные модули, утилиты и командные оболочки, которые могут обеспечить необходимый минимально уровень работоспособности ОС. Размещение этих файлов в директории /bin гарантирует, что в системе эти важные утилиты будут даже в случае, если другие файловые системы не смонтированы.
/dev — файлы устройств
В Linux все устройства предоставлены в виде специфических файлов, расположеных в этой директории. К примеру, файл /dev/sda представляет диск SATA. Также в этой директории хранятся файлы псевдо-устройств (виртуальных), для этих файлов нет соответствующего реального устройства. Например, файл /dev/random генерирует случайные числа, а файл /dev/null является специальным устройством для удаления всех входных данных.
/home — домашние директории пользователей
По идеологии UNIX для обеспечения безопасности ОС рекомендуется хранить пользовательские данные именно в этой директории. Например, если ваше имя пользователя user, то у вас есть домашняя дирекотория, которая находится в /home/user и содержит пользовательские конфигурационные файлы и личную информацию. Каждый пользователь имеет доступ на запись только в свою домашнюю директорию.
/lib — основные библиотеки
Эта директория предназначена для хранения системных библиотек и компонентов компилятора языка С, необходимых для работы программ из директорий /bin и /sbin и операционной системы в целом.
/lib64 — 64-битные основные библиотеки
Эта директория присуствует в основном на 64-битных системах, содержит набор библиотек и компонентов компилятора языка С для 64-битных программ.
/lost+found — восстановленные файлы
Присуствует во всех ОС Linux. При сбое в работе файловой системы и дальнейшей проверке файловой системы (при загрузке ОС), все найденные поврежденные файлы будут помещены в директорию lost+found, их можно попытаться восстановить.
/mnt — точка для ручного монтирования
Используется для временного ручного монтирования (с помощю команды mount) различных устройств, таких как CD-ROM, USB-накопителей и т.д.
/opt — вспомогательные пакеты программ
Находятся субдиректории для дополнительных пакетов программного обеспечения. Каталог широко используется проприетарным программным обеспечением, которое не подчиняется стандартной иерархии файловых систем.
/proc – файлы ядра и процессов
В эту директорию примонтирована виртуальная файловая система procfs. В ней находятся специальные файлы, в которых представлена информация о системе и о выполняющихся процессах. Например, в файле /proc/cpuinfo собержиться информация о процессоре.
/run – файлы состояния приложений
Является достаточно новой директорией, в которой приложениям предоставляется возможность стандартным образом хранить вспомогательные файлы, которые им требуются, например, сокеты и идентификаторы процессов. Эти файлы нельзя хранить в каталоге /tmp, поскольку эти файлы могут быть там удалены.
/sbin — бинарные файлы (программы) для администрирования системы
Директория /sbin похожа на /bin. В ней находятся важные двоичные файлы, которые, как правило, предназначены для их запуска пользователем при администрировании системы.
/selinux – виртуальная файловая система SELinux
В некоторых дистрибутивах (Red Hat, Fedora и т.п) для обеспечения безопасности используется пакет SELinux (Security-Enhanced Linux), при этом создается директория с файлами /selinux.
/srv – данные сервисных служб
Эта директория присуствует не во всех дистрибутивах, содержит «данные для сервисов, предоставляемых системой» (например сервер Apache может хранить файлы вашего сайта в этой директории). В большинстве случаев директория пуста.
/sys — виртуальная файловая система sysfs
Эта директория появилась с выходом ядра версии 2.6 и в нее примонтирована виртуальная файловая система sysfs с информацией об устройствах, драйверах, ядре ОС и т.п.
/tmp — временные файлы
Временные файлы, обычно удаляются при перезагрузке системы. Все пользователи имеют права чтения и записи в эту директорию.
Как Создать Символическую Ссылку в Linux
Итак, давайте разберёмся, как создать символические ссылки на файлы и папки в Linux.
Символическая Ссылка Linux на Файлы
Обычно для создания ссылок мы используем команду ln и опцию -s, чтобы указать символическую ссылку. Это самый простой и гибкий способ, который позволяет максимально экспериментировать с языком. В создании символических ссылок в Linux нет ничего сложного — нужно просто выполнить один простой шаг.
ln -s
Команда ln в Linux создает ссылки между исходными файлами и каталогами.
- -s — команда для символических ссылок.
- — имя существующего файла, для которого вы создаёте ссылку.
- — эта часть команды объясняет сама себя.
Проверить создалась ли ссылка можно с помощью команды вывода подробного списка содержимого каталога:
ls -l
Однако, если вы не укажете , команда автоматически создаст новую ссылку в существующем каталоге.
Символическая Ссылка Linux на Папки
Создать символическую ссылку на каталог тоже довольно просто. Синтаксис команды для создания символической ссылки на папку похож на команду для создания ссылки на файл:
ln -s [конкретный_файл/каталог]
Допустим, мы хотим связать каталог /user/local/downloads/logo с каталогом /devisers, вот как будет выглядеть команда:
ln -s /user/local/downloads/logo /devisers
Созданная и прикреплённая к папке /devisers, символическая ссылка будет вести к /user/local/downloads/logo. Когда пользователь меняет каталог — cd — на /devisers, система автоматически переключается на определённый файл и записывает его в каталог команды.
Опции символических ссылок называются переключателями командной строки. Вот наиболее распространённые из них и их описания:
Переключатель | Описание |
–backup | резервное копирование каждого существующего файла назначения |
-d, -F, –directory | суперпользователь может использовать жесткую ссылку |
-f, –force | удаляет существующий файл назначения |
-I, –interactive | спрашивает перед удалением файлов назначения |
-L, –logical | разыменовывает символические ссылки |
-n, –non-dereference | обрабатывает символическую ссылку как обычный файл, если это символическая ссылка на каталог |
-P, –physical | делает жесткие ссылки непосредственно на символические ссылки, а не разыменовывает их. |
-r, –relative | создаёт символические ссылки относительно расположения ссылок |
-s, –symbol | создаёт символические ссылки вместо жестких ссылок |
-S, –suffix=SUFFIX | переопределяет обычный суффикс резервных копий |
-v, –verbose | выводит имя каждого файла при создании ссылки |
Как Изменить или Удалить Символическую Ссылку в Linux?
Вы можете удалить существующие ссылки, прикреплённые к файлам или каталогам, с помощью команды unlink или rm. Вот как вы можете сделать это с помощью команды unlink:
unlink
Аналогичным образом удаляем символическую ссылку с помощью команды rm:
rm
Например:
rm simpleText
Помните, что если источник больше не находится в текущем местоположении, вам следует удалить символические файлы, чтобы избежать создания дубликатов, которые могут замедлить работу.
Cравнение жёстких и символических ссылок
Покажем, как работают жёсткие и символические ссылки и различия в их поведении на примере. Для этого запустим консоль (терминал) Mac OS X или другой *nix системы. Здесь будет использоваться терминал Mac OS X, однако, используемые команды должны работать в любой *nix системе (Linux, AIX и т.д.).
Для начала, создадим файл file.a а содержимым «aaa»:
Shell
echo «aaa» > file.a
1 | echo»aaa»>file.a |
Затем, создадим на него две ссылки: символическую и жёсткую:
Shell
ln -s file.a link1
ln file.a link2
1 |
ln-sfile.alink1 lnfile.alink2 |
Теперь попробуем прочитать содержимое файла по обеим ссылкам:
Shell
cat link1
aaa
cat link2
aaa
1 |
catlink1 aaa catlink2 aaa |
Обе ссылки работают нормально.
А сейчас, удалим оригинальный файл и попробуем прочитать по ссылкам его содержимое ещё раз.
Shell
rm file.a
cat link1
cat: link1: No such file or directory
cat link2
aaa
1 |
rmfile.a catlink1 catlink1No such fileordirectory catlink2 aaa |
Первая (символическая) ссылка оказывается битой, а по второй (жёсткой) ссылке по-прежнему находится файл с содержимым «aaa»:
Создадим новый файл с тем же именем file.a, но с другим содержимым:
Shell
echo «bbb» > file.a
1 | echo»bbb»>file.a |
А теперь снова попробуем прочитать его содержимое по ссылкам.
Shell
cat link1
bbb
cat link2
aaa
1 |
catlink1 bbb catlink2 aaa |
Первая (символическая) ссылка снова работает, и по ней находится новый файл, с содержимым «bbb». А вот вторая (жёсткая) ссылка всё ещё указывает на старый файл с содержимым «aaa».
В графическом интерфейсе Mac OS X папка, где мы проводили этот эксперимент, будет выглядеть следующим образом:
Система называет символьную ссылку «псевдонимом» файла. А вот жёсткую ссылку она воспринимает так же, как и обычный файл.