Информационные технологииStfw.Ru 🔍

Работа с файлами и каталогами

🕛 22.05.2009, 13:04
Типы файлов

Файлы и файловая система
Файлы в Linux играют ключевую роль, что не всегда справедливо для другихо перационных систем. Все данные пользователей хранятся в виде файлов. Помимо этого, файлы в Linux определяют привилегии пользователей, поскольку права пользователя в большинстве случаев контролируются с помощью прав доступа к файлам. Файлы обеспечивают доступ к периферийным устройствам компьютера, включая диски, CD-ROM, принтеры, терминалы, сетевые адаптеры и даже память. Дляприложений Linux доступ к дисковому файлу "неотличим" от доступа, скажем, к
принтеру. Наконец, все программы, которые выполняются в системе, включая прикладные задачи пользователей, системные процессы и даже ядро Linux, являются исполняемыми файлами. В Linux все доступное пользователям файловое пространство объединено в единое дерево каталогов, корнем которого является каталог "/". Т.о., полное имя любого файла начинается с "/" и не содержит идентификатора устройства (дискового накопителя, CD-ROM или удаленного компьютера в сети), на котором оно фактически хранится. Однако это не означает, что в системе присутствует только одна файловая система. В большинстве случаев единое дерево, такое каким его видит пользователь системы, составлено из нескольких отдельных файловых систем, которые могут иметь различную внутреннюю структуру, а файлы, принадлежащие этим файловым системам, могут быть расположены на различных устройствах. Каждый файл имеет связанные с ним метаданные (хранящиеся в индексных дескрипторах - inode), содержащие все характеристики файла и позволяющие операционной системе выполнять операции, заказанные прикладной задачей: открыть файл, прочитать или записать данные, создать или удалить файл. В частности метаданные содержат указатели на дисковые блоки хранения данных файла. Имя файла в файловой системе является указателем на его метаданные, в то время как
метаданные не содержат указателя на имя файла.
Типы файлов
В Linux существуют 6 типов файлов, различающихся по функциональному назначению и действиям операционной системы при выполнении тех или иных операций над файлами: Обычный файл (regular file), Каталог (directory), Специальный файл устройства (special device file), FIFO или именованный канал (named pipe), Связь (link), Сокет.
Обычный файл представляет собой наиболее общий тип файлов, содержащий данные в некотором формате. Для операционной системы такие файлы представляют собой просто последовательность байтов. Вся интерпретация содержимого файла производится прикладной программой, обрабатывающей файл. К этим файлам относятся текстовые файлы, бинарные данные, исполняемые программы и т.п. Каталог. Каталог - это файл, содержащий имена находящихся в нем файлов, а также указатели на дополнительную информацию - метаданные, позволяющие операционной системе производить операции над этими файлами. Каталоги определяют положение файла в дереве файловой системы, поскольку сам файл не содержит информации о своем местонахождении. Любая задача, имеющая право на чтение каталога, может прочесть его содержимое, но только ядро имеет право на
запись в каталог. По существу каталог представляет собой таблицу, каждая запись которой соответствует некоторому файлу. Первое поле каждой записи содержит указатель на метаданные (номер inode), а второе определяет имя файла. Специальный файл устройства обеспечивает доступ к физическому устройству. В Linux различают символьные (character) и блочные (block) файлы устройств. Доступ к устройствам осуществляется путем открытия, чтения и записи в специальный файл устройства. Символьные файлы устройств используются для небуферизированного обмена данными с устройством, в противоположность этому блочные файлы позволяют производить обмен данными в виде пакетов фиксированной длины - блоков. Доступ к некоторым устройствам может осуществляться как через
символьные, так и через блочные специальные файлы. FIFO или именованный канал - это файл, используемый для связи между процессами.
Связь. Каталог содержит имена файлов и указатели на их метаданные. В то же время сами метаданные не содержат ни имени файла, ни указателя на это имя. Такая архитектура позволяет одному файлу иметь несколько имен в файловой системе. Имена жестко связаны с метаданными и, соответственно, с данными файла, в то время как сам файл существует независимо от того, как его называют в файловой системе. Такая связь имени файла с его данными называется жесткой
связью (hard link). Жесткая связь (прямая ссылка) представляет собой просто еще одну запись в каталоге для того же самого файла. Жесткие связи абсолютно равноправны и неразличимы. С списках файлов каталогов, которые можно получить командой ls файлы будут отличаться только именем. Все остальные атрибуты файла будут абсолютно одинаковыми. С точки зрения пользователя - это два разных файла. Изменения, внесенные в любой из этих файлов, затронут и другой, поскольку оба они ссылаются на одни и те же данные файла. Можно переместить один из файлов в другой каталог - все равно эти имена будут связаны жесткой связью с данными файла. Удаление одного из файлов не приведет к удалению самого файла, т.е. его метаданных и данных. Файл будет удален только после удаления всех ссылок на него. По определению жесткие связи указывают на один и тот же индексный дескриптор inode. Поэтому проверить, имеют ли два имени файла жесткую связь, можно, вызвав команду ls с ключом -i. Информацию о наличии у файла нескольких имен, связанных с ним жесткими связями, можно получить, просмотрев подробный листинг файлов с помощью команды ls -l: во второй колонке листинга указано число жестких связей данного файла. Прямую ссылку для каталога создать нельзя. Прямые ссылки не могут указывать на файлы из других
файловых систем.
Жесткая связь является естественной формой связи имени файла с его метаданными и не принадлежит к особому типу файла. Особым типом файла является символическая связь (symbolic link, soft link, symlink), позволяющая косвенно адресовать файл. В отличие от жесткой связи, символическая связь адресует небольшой файл, который, в свою очередь, ссылается на целевой файл. Данные файла, являющегося символической связью, содержат только имя целевого файла.
Как видно из вывода команды ls -l, символическая связь существенно отличается от жесткой связи. Во-первых, фактическим содержанием файла, о чем говорит размер файла. Во-вторых, символическая ссылка не содержит никаких ограничений на доступ (символы 2-10 в первой колонке). Символическая связь является особым типом файла (об этом свидетельствует символ "l" в первой позиции вывода ls -l), и операционная система работает с таким файлом не так, как с обычным. Например, при выводе на экран содержимого символической связи появятся данные целевого файла. Символические связи безопаснее, чем прямые, потому что при удалении символической ссылки целевой файл не удаляется. Они также более удобны в использовании, поскольку могут указывать на файлы из других файловых систем (правда, если те поддерживают символические связи). Сокеты предназначены для взаимодействия между процессами. Интерфейс
сокетов часто используется для доступа к сети TCP/IP. С помощью сокетов
работают многие системные сервисы, например, система печати.

Принадлежность, разрешения на доступ, атрибуты файлов

Принадлежность файла
Любой пользователь, желающий получить доступ к файлу, может бытьотнесен к одному из четырех классов пользователей. По умолчанию владельцем owner) файла считается пользователь, создавший его. Поскольку большинство польлзователей принадлежит к группам, файл также принадлежит группе, к которой относится создавший его пользователь. Члены этой группы принадлежат к группе владельцев файла (group owners). Прочие (others) пользователи - это те, кто не является владельцем файла и не принадлежит к его группе, и все (all) - это просто все пользователи, включая владельца, группу владельца и прочих пользователей. Для определения владельцев файла достаточно посмотреть подробный листинг команды ls -l. Третья и четвертая колонки содержат имена владельца-пользователя и владельца-группы, соответственно.

Разрешения Разрешения определяют режим доступа различных типов пользователей: пользователей-владельцев, группы и прочих. Три основных типа разрешений: чтение (read, r) - файл может быть прочитан, но не может быть изменен или удален; запись (write, w) - файл может быть изменен или удален; выполнение (execute, x) - файл может быть выполнен, если он является программой или сценарием (для выполнения сценария также понадобится право на чтение, поскольку при выполнении скрипта командный интерпретатор должен иметь возможность считывать команды из файла). Для владельцев, группы и прочих пользователей могут быть установлены различные разрешения. Например, владелец файла может иметь разрешение на чтение и запись, в то время как группе может быть разрешен доступ только на чтение, а остальным пользователям доступ можно вообще запретить - в зависимости от необходимости. При отображении содержимого каталога в подробном формате режим доступа отображается девятисимвольным выражением, таким как "rwxr-xr-". Группы символов при чтении слева направо обозначают соответственно, режим доступа владельца (чтение, запись и выполнение), группы (чтение и выполнение) и прочих пользователей (чтение).

Разрешения для каталогов Права доступа для каталогов не столь очевидны. Право чтения каталога позволяет получить имена (и только имена) файлов, находящихся в данном каталоге. Чтобы получить дополнительную информацию о файлах каталога(например, подробный листинг команды ls -l), системе придется "заглянуть" в метаданные файлов, что требует права на выполнение для каталога. Право на выполнение также потребуется для каталога, в который вы захотите перейти (т.е.сделать его текущим) с помощью команды cd. Это же право нужно иметь для доступа ко всем каталогам на пути к указанному. Права r и x действующие зависимо, право х для каталога не требует наличии права r, и наоборот. Особого внимания требует право на запись для каталога. Создание и удаление файлов в каталоге требуют изменения его содержимого, и, следовательно, права на запись в этот каталог. При этом не учитываются права доступа для самого файла. То есть для того, чтобы удалить некоторый файл из каталога, необязательно иметь какие-либо права доступа к этому файлу, важно лишь иметь право на запись для каталога, в котором находится этот файл.

Дополнительные атрибуты файлов Установка атрибута Sticky bit (действительное название - save text mode, обозначение - "t") позволяет хранить образ часто запускаемой программы в файле подкачки после ее завершения, что обеспечивает более быструю его загрузку для повторного выполнения. Для каталога установленный атрибут Sticky bit ("t") позволяет пользователю удалять только те файлы, которыми он владеет или имеет право на запись, даже если у него есть право на запись в каталог. Примером может служить каталог /tmp, который является открытым на запись для всех пользователей, но в котором не желательна возможность удаления пользователем чужих временных файлов. Атрибуты (или флаги) SUID и SGID (Set UID и Set GID, обозначение - "s") позволяют изменить права пользователя при запуске на выполнение файла, имеющего эти атрибуты. При этом привилегии будут изменены (обычно расширены) лишь на время выполнения и только в отношении этой программы. Но если программы в процессе выполнения запускает другие задачи, то они будут
наследовать ее права доступа. Поэтому устанавливать флаги SUID и SGID следует с большой осторожностью и только для программ, которые не имеют возможности запуска произвольных задач. В качестве примера использования этого свойства рассмотрим утилиту passwd, позволяющую пользователю изменить свой пароль. Очевидно, что изменение пароля должно привести к изменению содержимого определенных системных файлов (/etc/passwd и /etc/shadow). Понятно, что предоставление права на запись в эти файлы всем пользователям системы является не лучшим решением. Установка SUID для программы passwd (файл /usr/bin/passwd - исполняемый файл утилиты passwd) позволяет разрешить это противоречие. Поскольку владельцем файла /usr/bin/passwd является суперпользователь, то кто бы ни запустил утилиту passwd на выполнение, на время работы данной программы он временно получает права суперпользователя, т.е. может производить запись в системные файлы, защищенные от остальных пользователей. Понятно, что требования по безопасности для такой программы должны быть повышены. Утилита passwd должна производить изменение пароля только пользователя, запустившего ее, и не позволять никакие другие операции (например, вызов других программ).

Перечень команд

сat файл
Выводит содержимое файла на экран терминала.

chgrp группа файл
Делает указанный файл принадлежащим указанной группе. Для указания группы-владельца можно использовать имя или идентификатор группы. Необходим статус администратора.

chmod режим файл
Изменение режима доступа к файлу. Для указания режима используется символьный или числовой формат. Для смены режима доступа к файлам других пользователей требуется статус привилегированного пользователя. Символьный формат режима - u | g | o | a + | - | = r | w | x | s | t
Классы доступа: u - владелец-пользователь, g - владелец-группа, о - остальные пользователи, а - все классы пользователей.
Операция, которую необходимо произвести: + добавить, - удалить, = присвоить.
Права доступа: r - чтение, w - запись, x - выполнение, s - установка SUID или SGID, t - установка Sticky bit.
Примеры допустимых символьных режимов: a+w, go=r, g+x-w, u+w, og+r-w.
Числовой формат записи разрешения позволяет указать уровень доступа с помощью четырехзначного восьмеричного (0-7) числа. Число определяется следующим образом: нужно представить права доступа в двоичном виде (0 - отсутствие соответствующего права, 1 - его наличие) и каждую триаду, соответствующую классу доступа, в свою очередь, преобразовать в десятичное число.

SUID SGID StickyBit Владелец Группа Остальные s s t r w x r w x r w x 0 0 0 1 1 1 1 0 1 1 0 0 0 7 5 4 = 0754 = 754

chown пользователь [.группа] файл
Смена владельца указанного файла. Может быть указано имя нового владельца или его идентификатор. Для смены группы-владельца введите точку после имени пользователя, а затем имя группы или ее идентификатор без пробела. Для выполнения команды требуется статус привилегированного пользователя.

cmp файл1 файл2
Сравнение двух файлов. Если файлы одинаковы, никакого сообщения не выводится. В противном случае выводится номер строки и символа в ней, где найдено первое несоответствие.

cp [параметр] [файл1] [файл2]
Копирует один исходный файл (файл1) в другой файл (файл2) или несколько файлов в существующий каталог. При копировании нескольких файлов для их задания можно использовать маску.
Параметры: -b - создавать резервную копию при перезаписи существующих файлов -d - копировать символические ссылки в виде ссылок, а не файлов, на которые они указывают -i - запрашивать подтверждения перед перезаписью файлов -l - создавать прямые ссылки вместо копирования файлов -R - рекурсивное копирование указанного каталога вместе с подкаталогами -s - создание символических ссылок вместо копирования файлов -u - создавать копию исходного файла только в случае, если он новее перезаписываемого или если файл назначения отсутствует -v - выводить сообщения в процессе работы

diff файл1 файл2
Сравнивает два файла и выводит список изменений, которые необходимо внести в содержимое этих файлов для того, чтобы преобразовать первый файл во второй.

head [-n] файл
Выводит первые n строк файла.

less файл
Отображение содержимого файла на экране и удобное управление просмотром.

ln [параметры] файл [имя ссылки]
Создание прямой ссылки на указанный файл. При использовании с параметром -s создается символическая ссылка.

mkdir [параметры] каталог
Создание указанного каталога.
Параметры: -m режим - создание каталога с указанным режимом доступа -p - создание родительских каталогов при необходимости

more файл
Позволяет выводить файл на экран порциями, если размер файла велик и его содержимое не помещается в терминальном окне.
mv [файл1] [файл2]
Переименовывает или перемещает файл1 в файл2. Позволяет перемещать несколько исходных файлов в каталог.

rm [параметры] [имя файла]
Удаление указанного файла.
Параметры: -d - удаление непустого каталога, необходим статус привилегированного пользователя -i - запрашивать подтверждение перед удалением -r, -R - удаление содержимого текущего каталога и всех его подкаталогов

rmdir [параметры] каталог
Удаление указанного пустого каталога.
Параметры: -ignore-fail-on-non-empty - продолжать работу, даже если один или несколько каталогов содержат файлы -p - удалять родительские каталоги, если после выполнения команды они оказываются пустыми

stat файл
Отображение всей доступной информации об указанном файле, включая размер, число выделенных для файла блоков размером 512 Кбайт, тип файла, режим доступа (в символьном и числовом форматах), владельца файла, специальные разрешения, номер узла inode, число ссылок, время последнего доступа к файлу, последней модификации и последнего изменения.

symlinks каталог
Отображение информации о символических ссылках.

tail [-n] файл
Выводит последние n строк файла.

umask [параметры] [nnn]
Показывает или задает маску режима доступа для вновь создаваемых файлов - то есть те разрешения, которые для них устанавливаются. Маска указывается трехзначным числом, например 022. Это число вычитается из максимально возможного уровня 777. Маска 022 дает режим доступа 755, эквивалентный u=rwx, g=rx, o=rx в символьном формате.

wc файл
Выдает число строк, слов и символов в файле.

Linux   Теги:

Читать IT-новости в Telegram

Читайте также:

Безопасная работа в Ubuntu

Информационные технологии
Мы в соцсетях ✉