Файл — один из базовых элементов любой операционной системы, и Linux здесь не исключение. Но в этой ОС файлу придается особое значение, ведь им описывается любой объект — от текстового документа до устройства. А технологии разграничения прав доступа к файлам являются основой концепции безопасности Linux. Стало быть, объект заслуживает отдельного разговора.
Операции с файлами
Для создания файлов проще всего обратиться к команде cat, используя перенаправление вывода: cat > [имя файла]. В этом случае в объект будет помещено всё, что вводится с клавиатуры (окончание операции — одновременное нажатие клавиш Ctrl и D). Разумеется, на практике данный метод используется редко — разве что при необходимости создать небольшой текстовый файл, состоящий из одной-двух строк.
Просмотреть только что созданный файл можно с помощью той же самой команды. Только при этом никакого перенаправления не будет, поскольку задействуется стандартный вывод: cat [имя файла]. Обратите внимание, как элегантно и экономно здесь работают консольные команды.
Впрочем, на практике чаще применяются другие программы: more и less. Синтаксис их довольно прост, в чем вы убедитесь, набрав в консоли команду man [название программы].
Для копирования, переименования или перемещения файлов вы можете использовать любой файловый менеджер. Однако тем, кто успел оценить достоинства командной строки, предлагаются другие решения.
Для копирования файлов в Linux существует команда cp. Набирать ее следует так:
cp [параметры] [источник] [приемник]. В роли приемника выступает либо имя файла, либо название каталога, в котором объект будет продублирован с тем же наименованием.
Для сокращения набора как в этой, так и в других командах можно использовать специальные символы. Например, точка обозначает ссылку на текущий каталог, тильда указывает на домашнюю директорию.
За перемещение или переименование файлов отвечает команда mv. Скажем, если надо перенести несколько объектов из одного каталога в другой, то следует набрать в консоли mv ~/*.[расширение] /[каталог назначения].
С этой командой надо обращаться особенно внимательно. Если в каталоге назначения имеется файл с точно таким же именем, то он будет изменен без предупреждения. С непривычки это кажется не совсем удобным, однако это всего-навсего иная концепция интерфейса: здесь программа является не столько партнером, сколько безмолвным слугой. Таким образом, от пользователя требуется более высокий уровень ответственности.
Удаление объектов системы осуществляется командой rm. Если набрать ее без параметров, то никакого предупреждения выдаваться не будет. Учитывая, что использование этой команды (особенно от имени суперпользователя) потенциально опасно, лучше ввести в консоли следующее: rm -i [файл ли группа файлов]. В этом случае у вас будет шанс передумать, поскольку система потребует подтверждения.
Для поиска файла предназначена команду locate. При этом вместо полного имени можно указывать его часть. Весьма полезная возможность для рассеянных людей, которые не могут удержать всего в памяти.
Если речь идет о команде (программе), то в командной строке нужно набрать which [имя]. Этот подход удобен не только для нахождения файла. В частности, таким методом можно быстро узнать, установлено или нет какое-либо приложение. Впрочем, той же цели можно достичь более коротким путем.
Поскольку система Linux поддерживает функцию автозаполнения командной строки, то пользователю достаточно ввести несколько первых символов и нажать на клавишу Tab. Вам будет предложено несколько вариантов названия — вспомнить слово, напечатанное на дисплее, всегда проще, чем извлечь его из памяти (естественно, не из оперативной, а из своей собственной).
Ссылки
Ссылки — это специальные файлы, позволяющие хранить в системе один и тот же объект под разными именами. Зачем это нужно? Представьте себе, что у вас есть большой неструктурированный архив документации. Работать с ним неудобно, а упорядочить его по каким-либо причинам нельзя.
В этом случае разумно создать несколько рабочих каталогов, куда будут помещаться объекты, выбранные из архива. Но банальное копирование не только приведет к неэффективному расходованию дискового пространства, но и добавит головной боли, связанной с созданием системы синхронизации. Более удобный метод — создание файлов-ссылок. Они бывают символическими (иногда их называют мягкими) и жесткими. Чтобы разобраться в различиях между ними, придется углубиться в тонкости организации файловой системы.
Каждый файл в системе Linux имеет индексный дескриптор — некий уникальный номер, под которым он и известен системе (сложное и значимое с человеческой точки зрения имя — всего лишь трюк, позволяющий пользователю лучше ориентироваться в файловой системе). Каталог в Linux — не более чем список индексных дескрипторов, то есть фактически точно такой же файл, как и все остальные. Некоторая специфика, конечно, есть, но она не настолько принципиальна.
Таким образом, индексного дескриптора вполне достаточно для идентификации той самой именованной области диска, которая и называется файлом. А привычное нам наименование файла только указывает на конкретный индексный дескриптор. Разумеется, таких имен может быть несколько (одно или более).
Для создания жесткой ссылки следует набрать в командной строке ln [имя файла] [имя ссылки]. Если и к исходному файлу, и к файлу-ссылке применить команду ls —i, предписывающую показать индексный дескриптор, то результат, как нетрудно догадаться, будет совершенно одинаковым.
С формальной точки зрения жесткая ссылка — это просто еще одно имя файла. Если внести изменения в один объект, то автоматически изменится и другой, ведь по сути дела операция проводится над одной и той же областью.
Удаление жесткой ссылки не приводит к удалению файла только в том случае, когда у него есть еще хотя бы одна ссылка. При этом безразлично, какое имя появилось первым, а какое — вторым или третьим.
Символическая ссылка очень похожа на жесткую. Разница лишь в том, что она подразумевает не индексный дескриптор, а обычное имя файла. В ней просто содержится указание, что системе следует обратиться к другому объекту.
Кстати, отсюда и следствие: операции с символическими ссылками выполняются несколько медленнее. Ведь система обращается не напрямую к индексному дескриптору, а совершает одно “лишнее” действие, вызывая родительский файл.
Создается символическая ссылка командой ln -s [имя исходного файла] [имя символической ссылки]. При ее удалении исходный файл сохраняется. А вот если убрать из системы основной объект, то ссылка становится ненужной, хотя и останется в системе.
Права доступа
Права доступа — одно из основных понятий концепции безопасности Linux. Они определяют операции, которые каждый пользователь может проводить над объектом (файлом или каталогом). Основных действий может быть три — чтение, запись, выполнение.
Важно понимать, что права не имеют иерархии — они равноценны и независимы друг от друга. Например, возможна конфигурация, когда пользователь, у которого нет права чтения файлов какого-либо каталога, может вносить в него запись. Причем именно этот вариант часто применяется на практике при организации FTP-сервера: в нем должна быть директория, куда пользователи могли бы выкладывать любые объекты. Но скачать их будет нельзя до тех пор, пока администратор не перенесет материалы в специально предназначенный для этого раздел, предварительно проверив содержимое.
Просмотреть права, определенные для какого-либо объекта, можно командой ls -l [имя файла или каталога]. Она вернет набор символов примерно такого вида:-rwxr-xr-x (разумеется, в каждом конкретном случае порядок символов может отличаться от других). Применим ее к уже известному нам файлу cat. Получится такая последовательность: -rwxr-xr-x. Что же означают эти символы?
Первая группа состоит всего из одного символа и определяет тип файла. Этот символ в соответствии с возможными типами файлов, рассмотренными в предыдущем разделе, может принимать следующие значения:
- — обычный файл;
d — каталог;
b — файл блочного устройства;
c — файл символьного устройства;
s — файл типа socket;
p — именованный канал;
l — символическая ссылка.
Далее идут три набора, в каждом из которых по три символа. Первый описывает права создателя файла, второй — группу пользователей, в которую входит создатель, третий — всех остальных. Знаки, применяемые для обозначения прав доступа, должны входить в множество {-, r, w, x}.
Символ “r” означает, что пользователь имеет право читать файл, “w” говорит о том, что допускается его запись, и “x” указывает на то, что файл является исполняемым и пользователь может его запускать. Черточка, разумеется, означает, что право, соответствующее месту расположения символа, отсутствует.
Таким образом, из нашего примера видно, что cat — это программа (обычный исполняемый файл), создатель которой (root) может всё, а остальные имеют права только на чтение и исполнение. Как говорится, коротко и ясно. Отсюда к тому же видно, что, работая от имени простого пользователя, стереть или видоизменить объект никак нельзя. Кстати, именно так и достигается высокая защита системных приложений.
Для изменения прав доступа к какому-либо файлу используется команда chmod [символ, указывающий на пользователя][символ, указывающий на действие][символ, обозначающий вид права] [имя файла].
Символом, указывающим на пользователя, может быть:
u — владелец файла;
g — группа, к которой принадлежит владелец;
o — пользователи, не входящие в группу, к которой принадлежит владелец;
a — все пользователи системы.
Символом, указывающим на действие, может быть:
+ — предоставление права;
- — лишение права;
= — установление нового права вместо уже имеющегося.
Помимо такой формы записи на практике часто используется так называемое цифровое предоставление прав. При этом символ “r” кодируется цифрой 4, символ “w” — цифрой 2, а символ “x” — цифрой 1. Сложив любые комбинации этих значений, можно получить число от нуля до семи, при этом каждое из них будет однозначно описывать требуемую конфигурацию.
Вернемся к нашему примеру. Набор “rwx” соответствует семи, “r-x” — пяти и “r-x” — тоже пяти. Если вы хотите назначить файлу аналогичные права, то команда будет выглядеть так: chmod 755 [имя файла]. Коротко и изящно, ведь такая запись — это всего лишь восьмеричная запись той самой информации размером в 9 бит, которая задает права доступа к файлу.
Если работа в командной строке кажется сложной, то можно воспользоваться помощью программы Midnignt Commander. На основной панели надо выбрать пункт “Файл” и в ниспадающем меню — “Права доступа”. Активируйте нужные вам опции и щелкните на кнопке “Сохранить”.
Удобные инструменты для назначения и смены прав доступа предоставляют пользователю и графические среды KDE и GNOME. Действия в обеих оболочках аналогичны. Кликом правой клавишей мыши на пиктограмме объекта следует вызвать контекстное меню, а в открывшемся окне перейти на вкладку “Доступ”.
Продолжение цикла “Linux для начинающих” (начало см. в PC Week/RE, № 36—43 за 2007 г., а также на сайте.