Файлы и каталоги Linux Mint

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

/home/grinder/temp — файлом, каталогом или ссылкой, — нельзя. Чтобы избежать двузначности, иногда каталог отмечают еще одной косой чертой /home/grinder/temp/. Но несколько подробнее об этом мы поговорим чуть дальше.

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

ВНИМАНИЕ

В отличие от Windows в Linux регистр в имени файла имеет значение, поэтому file и File — это два разных файла.

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

ВНИМАНИЕ!

В имени файла можно использовать символы любого языка, в том числе и русского. Но от использования некоторых символов, применяемых командной оболочкой, лучше удержаться: *, \, &, <, >, ; , (, ), |, знаков пробела и табуляции.

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

ПРИМЕЧАНИЕ

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

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

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

ВНИМАНИЕ!

Если в дальнейшем при описании команд, вводимых с консоли, будет использоваться знак доллара ($), значит, для выполнения этой команды достаточно прав обычного пользователя, а если решетка (#) — нужны права root.

Наличие расширения  позволяет пользователю и  программе быстро  определить, какого типа данные находятся внутри файла. Но, как и в Windows, наличие расширения — это только соглашение об имени файла, но совсем необязательно, что внутри находится именно этот тип  данных.  Многие приложения, например  файловые менеджеры Nautilus или Konqueror, при анализе файлов в открытом каталоге определяют тип содержимого файла на основании самих данных. Это легко проверить.

ВНИМАНИЕ!

В дистрибутиве Linux Mint, чтобы пользователь мог использовать sudo, он должен входить в группу admin. Первый созданный при установке пользователь автоматически в нее заносится.

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

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

$   fil e    /

/: directory

$ file /bin/bash

/bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), for GNU/Linux 2.2.0, stripped

Кроме команды file узнать тип файла можно при  помощи  команды  ls -l или

stat (рис. 4.2). Вывод ls покажет такую информацию.

$ ls -l /dev/

crw-rw     1 root audio 14, 4 2008-05-01 10:55 audio

drwxr-xr-x 3 root root 60 2008-05-01 13:54 bus

118    Глава 4. Linux Mint под капотом

lrwxrwxrwx 1 root root 3 2008-05-01 13:55 cdrom -> hdc brw-rw—1 root disk 3, 0 2008-05-01 13:54 had

Рис. 4.1. Вывод файлов по типу содержимого в Nautilus

Рис. 4.2. Вывод утилиты  stat

Первая буква как раз и показывает  тип файла. Это может быть:

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

•                                                                                                                               d — каталог (англ. directory);

•          l — символическая ссылка (англ. link);

•          b — файл блочного устройства (англ. block);

•          с — файл символьного устройства (англ. character);

•          f — файл FIFO или именованный канал;

•          s — сокет (англ. socket).

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

В операционной системе Microsoft Windows существует понятие ярлыка, когда на любой файл можно сделать связанную ссылку. В Linux тоже есть такая возможность. Выглядит она следующим образом. Некоторые метаданные и имя  файла хранятся в каталоге, то есть получается, что файл существует  вне зависимости от того, как его называют, это позволяет одному файлу иметь несколько имен. Файловые  системы Linux (как и  в Windows, начиная с Windows 2000) поддерживают  два типа ссылок.  Символическая ссылка является неким аналогом ярлыка (по назначению, но не структуре). Внутри такого файла содержится ссылка на другой файл. При удалении основного файла ссылка перестает работать, так как показывает на несуществующий объект. Символические ссылки используются для более удобной организации файлов. Например, в некоторых дистрибутивах разработчики не полностью придерживаются FHS, но при помощи символических ссылок имитируют нужную структуру. Другой вариант — имитация более ранних версий библиотек.

ПРИМЕЧАНИЕ

      Можно создавать символическую ссылку не только на файл, но и на каталог.

Некоторые программы жестко требуют определенную версию библиотек, в новых  все функции поддерживаются для обратной совместимости, поэтому вместо установки  двух вариантов  используют один, но с  разным именем. Символические ссылки в команде  ls  -l  обозначаются буквой l. Кроме того, при помощи стрелки указывается оригинальный файл, на который делается эта ссылка (см. выше вывод команды по тексту). В отличие от жестких ссылок символические можно создавать на файл, который не существует. Расположение файлов значения не имеет. Создаются символические  ссылки  при  помощи  команды  ln  с ключом  s.  Например,

создадим символическую ссылку с именем symlinks на файл file:

$ ln -s file /home/grinder/symlink

Проверяем:

$ ls -l /home/grinder/symlink

lrwxrwxrwx 1 grinder grinder 7 2010-05-01 20:58 /home/grinder/ symlink -> file

Поскольку символическая ссылка — это не файл, а путь к файлу, размер файла символической ссылки обычно небольшой, в нашем примере всего 7 байт. Права доступа созданной ссылки  не содержат ограничений (о правах доступа далее в  главе), что видно из строки rwxrwxrwx. Возможность работы с файлом, на который указывает ссылка, будет определяться правами доступа самого файла. Поэтому нельзя создать символическую ссылку на защищенный файл и получить доступ к нему.

ПРИМЕЧАНИЕ

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

Жесткие ссылки, в отличие   от символических, полностью равноправны, так как фактически  это два имени  одного и  того же файла. Информация  о  количестве ссылок содержится непосредственно в метаданных файла. При удалении одной из ссылок остальные полностью работоспособны. Пока  имеется хоть одна ссылка, файл будет существовать.  Однако жесткая ссылка имеет единственное  ограничение — ее создание возможно только в пределах одного логического раздела диска. Создаются ссылки при помощи команды ln, без аргументов:

$ ln file /home/grinder/hardlink

Количество жестких  ссылок на файл можно увидеть во  втором столбце  вывода команды   ls:

$ ls -l /home/grinder/hardlink

-rw-r–r-2 grinder grinder 52219904 2010-05-22 14:33 /home/ grinder/hardlink

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

В Linux жесткие ссылки  не редкость. Часто разработчики дают два имени своей программе — в  зависимости от того, под каким именем она запущена, она будет иметь различную функциональность.   Узнать такие программы-близнецы можно, только проанализировав номер inode при помощи ключа i команды  ls.  Например, команда gzi p предназначена для  сжатия и  распаковки  файлов  наподобие ZIP, только с использованием  кодирования  Лемпеля — Зива  (LZ77). В Linux есть отдельная утилита для распаковки, смотрим на номера inode:

$ ls -i /bin/gunzip /bin/gzip

25256 /bin/gunzip  25256 /bin/gzip.

Как видите, номер inode у этих двух файлов совпадает, то есть на самом деле это один файл. Вывод команды   ls   -l   показывает  наличие четырех жестких ссылок на файл /bin/gzip. Давайте найдем остальные,  использовав  в  качестве фильтра вывода команду gre p с номером нужного inode.

$ ls -i /bin/* | grep 25256 25256 /bin/gunzip

25256 /bin/gzip

25256 /bin/uncompress 25256 /bin/zcat

Как видите, четыре команды являются на самом деле одним файлом, но в зависимости от имени, с которым этот файл запущен, он выполняет разные задачи.

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

ВНИМАНИЕ

Права доступа файла устройства определяют возможность его  использования пользователем или группой. Этот момент очень важен. Например, если вы можете соединяться с Интернетом или записывать информацию с помощью CD/DVD-привода только под суперпользователем, это означает, что вы просто не имеете нужных прав.

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

$   ls   -l    /dev/sd a

brw-rw            1   roo t   dis k   8 ,    0   2010-05-2 2   16:2 0    /dev/sd a

Буква b в выводе   команды  ls  как раз и  показывает на блочное  устройство. Но некоторые устройства, например  клавиатура, передают данные байт за байтом. Такие устройства  называют символьными. К символьным кроме клавиатуры  принадлежат терминал и разделы жесткого диска без файловой системы. Файлу символьного устройства соответствует буква с (рис. 4.3).

Рис. 4.3. Блочное и символьное устройство в Linux

Чтение и запись  данных в блочных устройствах буферизируются.

Файлы FIFO (от. англ First Input First Output — «первый вошел, первый вышел»), или  именованные каналы, обозначаемые в  выводе  буквой f, используются для передачи данных от одной программы к другой. Особенность FIFO состоит  в том, что поток информации может идти только в одном направлении. Одна программа открывает файл FIFO только на запись, а другая — только на чтение. И в том случае, когда программам необходим двунаправленный канал  обмена информацией, придется открывать два FIFO. Хотя  альтернатива есть: использование сети  или специальных файлов — сокетов (от англ. socket — «розетка»). При настройке разного типа серверов  или  программ вы  можете столкнуться с обоими  вариантами, и  придется  выбирать, какой из  способов  использовать.  Например, демон clamd антивируса ClamAV или система управления базами данных MySQL могут использовать для обмена данными  как сеть, так и  сокет. Сеть обычно применяют для обмена данными тогда, когда общающиеся программы находятся на разных компьютерах, хотя и не всегда. Сокет в чем-то похож на FIFO, только данные передаются в обоих  направлениях.

$ ls -al /dev/* | grep ^s

srw-rw-rw 1 root  root  0 2008-06-25 13:21 /dev/log

В этом примере вывод команды   ls   -al   был перенаправлен на вход утилиты grep, которая предназначена для поиска строк с  заданными  параметрами. В качестве задания grep получила вывести  все строки, начинающиеся  на s (знак ^ означает привязку к началу строки).

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

устройства будут уникальными.  При  этом major показывает на тип  устройства, a minor — на конкретное устройство. Например, в выводе команды

$    ls    -l    /dev/sd a

brw-rw –1   roo t   dis k   8 ,    0   2010-06-2 5   16:2 0    /dev/sd a

цифра 8 соответствует major, a 0 — minor. Если посмотреть номера для файла /dev/ sda1, который является первым разделом на этом диске, то обнаружим, что цифра

major осталась прежней, а номер minor изменился и стал равен 1.

Самое интересное, что, если нужные файлы устройств система не создала автоматически, администратор это может сделать вручную. Для этого применяется специальная команда mknod (от англ. make node — «создать узел») или скрипт MAKEDEV.

ПРИМЕЧАНИЕ

Полностью формат команды и дополнительные ключи можно просмотреть в справочном руководстве, вызываемом командой man mknod.

Чтобы использовать mknod, нужно знать major и minor числа устройства. Формат команды такой:

mknod      /dev/имя_файла     {   с  |   b }   MAJOR  MINOR

Буквы с и b позволяют указать, какое устройство нужно создать: символьное или блочное. Цифру major можно узнать, просмотрев список уже имеющихся устройств или проанализировав вывод команды lsdev .  Но основным источником информации по номерам major и minor является файл devices.txt, который находится в каталоге Documentation исходных текстов ядра.

Источник: Яремчук С. А.  Linux Mint на 100 %. — СПб.: Питер, 2011. — 240 е.: ил. — (Серия «На 100 %»).

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий