Материал: os_7

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Cимвольную ссылку можно создать при помощи команды ln с ключом "-s" (сокращение от "symbolic").

Если выполнить команду cat имя_файла-ссылки, то на экран будет выведено содержимое файла, на который указывает ссылка.

Символьная ссылка вполне может содержать имя несуществующего файла. В этом случае ссылка будет существовать, но не будет "работать": например, если попробовать вывести содержимое такой "битой" ссылки при помощи команды cat, будет выдано сообщение об ошибке. Узнать, куда указывает символьная ссылка, можно при помощи утилиты realpath.

  1. Удаление файлов и каталогов. Как восстановить ошибочно удаленный файл?

В ОС Linux для удаления файлов предназначена утилита rm (сокращение от англ. "remove" - "удалять"):

Если удалить файл text в домашнем каталоге пользователя student, файл text-hardlink, который является жесткой ссылкой на удаленный файл text, сохранится, количество жестких ссылок на этот файл уменьшится с "2" до "1" - действительно, text-hardlink - теперь единственное имя этого файла. Однако если удалить и жесткую ссылку text-hardlink, у этого файла больше не останется ни одного имени, он станет недоступным пользователю и будет уничтожен.

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

Как уже говорилось, символьные ссылки - это отдельные файлы, поэтому после удаления файла text, text-symlink, который ссылался на этот файл, продолжает существовать, однако теперь это - "битая ссылка", поэтому его также можно удалить командой rm.

Для удаления каталогов предназначена другая утилита - rmdir (от англ. "remove directory"). Впрочем, rmdir согласится удалить каталог только в том случае, если он пуст - в нем нет никаких файлов и подкаталогов.

Удалить каталог вместе со всем его содержимым можно командой rm с ключом "-r" (recursive).

Команда rm -каталог - очень удобный способ потерять в одночасье все файлы: она рекурсивно обходит весь каталог, удаляя все, что попадется: файлы, подкаталоги, символьные ссылки... а ключ "-f" (force) делает ее работу еще неотвратимее, так как подавляет запросы вида "удалить защищенный от записи файл", так что rm работает безмолвно и безостановочно.

ПОМНИТЕ: если вы удалили файл, значит, он уже не нужен, и не подлежит восстановлению!

В Linux не предусмотрено процедуры восстановления удаленных файлов и каталогов. Поэтому стоит быть очень внимательным, отдавая команду rm и, тем более, rm -r: нет никакой гарантии, что случайно удаленные данные удастся восстановить.

  1. Назначение утилиты id.

В Linux, однако, используются не какие угодно свойства, а результат идентификации пользователя – его UID.

Утилита id выводит входное имя пользователя и соответствующий ему UID, а также группу по умолчанию и полный список групп, членом которых он является.

  1. Ярлыки объектов файловой системы.

При создании объектов файловой системы – файлов, каталогов и т. п. – каждому приписывается ярлык.

 Ярлык включает в себя UID – идентификатор пользователя-хозяина файла, GID – идентификатор группы, которой принадлежит файл, тип объекта и набор так называемых атрибутов (код доступа), а также некоторую дополнительную информацию. 

Ключ "-l" утилиты ls определяет длинный (long) формат выдачи (справа налево): имя файла, время последнего изменения файла, размер в байтах, группа, хозяин, количество жестких ссылок и строчка атрибутов. Первый символ в строчке атрибутов определяет тип файла. Тип "-" отвечает "обычному" файлу, а тип "d" – каталогу (directory).

Несмотря на то, что создание жестких ссылок на каталог невозможно, значение поля "количество жестких ссылок" (второй столбец) для всех каталогов примера равно двум, а не одному. На самом деле этого и следовало ожидать, потому что любой каталог файловой системы Linux всегда имеет не менее двух имен: собственное (например, tmp) и имя "." в самом этом каталоге (tmp/.). Если же в каталоге создать подкаталог, количество жестких ссылок на этот каталог увеличится на 1 за счет имени ".." в подкаталоге (например, tmp/subdir1/..)

  1. Права доступа к файлу.

Говоря о правах доступа пользователя к файлам, заметим, что в действительности манипулирует файлами не сам пользователь, а запущенный им процесс (например, утилита rm или cat). Поскольку и файл, и процесс создаются и управляются системой, ей нетрудно организовать какую угодно политику доступа одних к другим, основываясь на любых свойствах процессов как субъектов и файлов как объектов системы.

В Linux, однако, используются не какие угодно свойства, а результат идентификации пользователя – его UID.

Каждый процесс системы обязательно принадлежит какому-нибудь пользователю, и идентификатор пользователя (UID) – обязательное свойство любого процесса Linux.

Когда программа login запускает стартовый командный интерпретатор, она приписывает ему UID, полученный в результате диалога. Обычный запуск программы (exec()) или порождение нового процесса (fork()) не изменяют UID процесса, поэтому все процессы, запущенные пользователем во время терминальной сессии, будут иметь его идентификатор.

Поскольку UID однозначно определяется входным именем, оно нередко используется вместо идентификатора – для наглядности. Например, вместо выражения "идентификатор пользователя, соответствующий входному имени student", говорят "UID student" (в приведенном ниже примере этот идентификатор равен 500):

Пример 3. Как узнать идентификаторы пользователя и членство в группах

[student@localhost student]$ id

uid=500 (student) gid=500(student) группы=500 (student)

Утилита id выводит входное имя пользователя и соответствующий ему UID, а также группу по умолчанию и полный список групп, членом которых он является.

  1. Суперпользователь и его права.

Суперпользователь - единственный пользователь в Linux, на которого не распространяются ограничения прав доступа. Имеет нулевой идентификатор пользователя.

Суперпользователь в Linux – это выделенный пользователь системы, на которого не распространяются ограничения прав доступаUID суперпользовательских процессов равен 0: так система отличает их от процессов других пользователей. Именно суперпользователь имеет возможность произвольно изменять владельца и группу файла. Ему открыт доступ на чтение и запись к любому файлу системы и доступ на чтение, запись и использование к любому каталогу. Наконец, суперпользовательский процесс может на время сменить свой собственный UID с нулевого на любой другой. Именно так и поступает программа login, когда, проведя процедуру идентификации пользователя, запускает стартовый командный интерпретатор.

Среди учетных записей Linux всегда есть запись по имени root ("корень"), соответствующая нулевому идентификатору, поэтому вместо "суперпользователь" часто говорят "root". Множество системных файлов принадлежат root, множество файлов только ему доступны на чтение или запись. Пароль этой учетной записи – одна из самых больших драгоценностей системы. Именно с ее помощью системные администраторы выполняют самую ответственную работу.

Существует два различных способа получить права суперпользователя. Первый – это зарегистрироваться в системе под этим именем, ввести пароль и получить стартовую оболочку, имеющую нулевой UID. Это – самый неправильный способ, пользоваться которым стоит, только если нельзя применить другие. В ОС Ubuntu описанный способ не используется, вместо него используется второй способ.

Второй способ —воспользоваться специальной утилитой sudo, которая позволяет выполнить одну или несколько команд от лица другого пользователя. По умолчанию эта утилита выполняет команду от лица пользователя root, то есть запускает командный интерпретатор с нулевым UID. Отличие от предыдущего способа в том, что всегда известно, кто именно запускал sudo, а значит, ясно, с кого спрашивать за последствия.

  1. Назначение утилиты sudo.

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

  1. Утилиты поиска файлов locate и find, их достоинства и недостатки

Для поиска файла по имени или его части используется утилита locate. Параметр задает имя файла. Для поиска без учета регистра служит ключ –i.

Для ограничения объема выводимой информации используется ключ –n число. Построчный вывод получается, если результаты поиска направить по конвейеру в программу less, например

locate mp3 | less

Утилита locate ведет поиск в базе данных, которая должна периодически обновляться утилитой updatedb, выполняемой с правами администратора.

Другой способ найти файл предоставляет утилита find. Ее ключи приведены в таблице 1.

Достоинствами утилиты find являются независимость от базы данных и широкие функциональные возможности, недостаток – меньшая скорость поиска по сравнению с locate.