Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Redaktsia_4_UP_Linux_-_Osnovnaya_chast.doc
Скачиваний:
57
Добавлен:
06.11.2018
Размер:
2.02 Mб
Скачать

3. Работа с объектами файловой системы

В файловых системах ОС Linux основным логическим объектом является файл. Все объекты, включая устройства ввода/вывода информации и каналы межпроцессного взаимодействия, называются файлами. Определено семь функциональных типов файлов:

  • обычные файлы;

  • каталоги;

  • символические ссылки;

  • именованные каналы;

  • сокеты;

  • файлы символических устройств;

  • файлы блочных устройств.

Внутренняя структура обычного файла для операционной системы совершенно безразлична, и файл воспринимается ею как простая последовательность байтов. Для операционной системы Linux не имеют значения расширения имён файлов, по которым можно судить об их типе. Расширение имени файла в ОС UNIX, в том числе и Linux, не предусмотрено по причине того, что символ «.» входит в состав имени файла наравне с другими символами. Точнее, пользователи могут присваивать файлам имена, содержащие точки и символы, напоминающие характерные для ОС семейства Windows расширения, но только для своего удобства.

Таким образом, внутренняя структура файла в ОС Linux целиком зависит от пользовательской программы. Исключение составляют собственно исполняемые файлы формата ELF (Executable and Linking Format), так как они непосредственно исполняются центральным процессором и запускаются при наличии установленного признака исполняемости. Они имеют по нулевому смещению от начала стандартную четырехбайтную сигнатуру, которая называется «магическим числом» файла.

В остальных случаях файл с установленным признаком исполняемости считается текстовым, содержащим строки с командами оболочки. Если первой строкой такого текстового файла является строка вида #!/bin/sh (допускается наличие пробелов после «!»), то первые два символа являются «магической комбинацией», а /bin/sh есть программа, которая будет запущена с передачей ей всех последующих строк файла. Если в первой строке отсутствует вышеописанное, то строки файла последовательно обрабатывает оболочка, обслуживающая данный терминал. Установленный признак исполняемости является необходимым, но не достаточным условием. Любому файлу можно установить сигнатуру исполняемости, но результат его запуска на исполнение будет зависеть от его содержимого.

Одна из утилит ОС Linux, именуемая file, умеет различать довольно много разновидностей файлов по их «магическим числам» и некоторым иным признакам внутреннего формата.

3.1. Действия над обычными файлами

Ранее уже рассматривались способы создания обычных файлов. Для копирования файлов предназначается команда cp (copy). Это универсальная команда, с помощью которой можно выполнить несколько действий:

  • создание копии файла с другим именем в том же каталоге

cp -arg file1 file2;

  • копирование файла с прежним именем в другой каталог

cp -arg file1 <dir>;

  • копирование файлов каталога <dir1> в каталог <dir2>

cp -arg <dir1> <dir2>.

В качестве наиболее часто используемых аргументов задаются:

-i – при наличии в месте назначения файла с таким именем будет выдан запрос на его переписывание;

-f – при наличии в месте назначения файла с таким именем он переписывается без запроса;

-p – сохраняется режим доступа к скопированному файлу, его владелец, группа владельца и временные отметки (без этого параметра файл переходит в собственность копирующего, права доступа устанавливаются согласно маске доступа, а временные отметки обновляются);

R – выполняется рекурсивное копирование с учетом всех вложенных файлов и подкаталогов;

a – аналог комбинации -pR с дополнительным копированием символических ссылок, что позволяет создать точную копию каталога.

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

При необходимости копирования всех файлов из каталога задается маска с использованием символов-звёздочек. Команда

cp /home/* /mnt/abcd

производит копирование всех файлов из домашнего каталога в примонтированный каталог abcd.

Файлы создаются, изменяются и удаляются в файловой системе в соответствии с правилами этой системы, поэтому при копировании файла из одной файловой системы в другую неизменными остаются сами данные, а метаданные файла и всё, что с ними связано, будет зависеть от типа файловой системы, в которую копируется файл.

Логическое удаление файлов и каталогов обеспечивается утилитой

rm -arg <file_name> <dir>

В качестве аргументов можно указать:

f – для безусловного (без дополнительных запросов и подтверждений) удаления файла. При обычном удалении файла система выводит запрос на удаление, который необходимо подтвердить символом y (yes) и Enter,

-d – для удаления непустого каталога,

-r – для рекурсивного удаления внутренних каталогов.

Удаление пустого каталога поддерживается командой

rmdir <dir>

Для гарантированного удаления файла с многократным (до 25 раз) стиранием inode и блоков данных псевдослучайными комбинациями в большинстве версий Linux имеется утилита

shred –arg <file_name>

Используемые командой стирания аргументы:

-v – показывать ход стирания,

-n раз – число повторов (25 раз по умолчанию),

-s – очистить N байт,

-x – не округлять размеры файлов до следующего целого блока,

-u – обрезать и удалять файл после перезаписи.

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

Перемещение указанного файла в другой каталог производится командой

mv –arg <file_name> <dir>

В ОС Linux команда переименования файлов отсутствует как таковая, поскольку команда перемещения mv превосходно справляется с изменением имени файла

mv file1 file2

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]