Европейский Университет в Санкт-Петербурге
Опубликован: 10.10.2005 | Доступ: свободный | Студентов: 1716 / 298 | Оценка: 4.30 / 3.85 | Длительность: 16:22:00
ISBN: 978-5-94774-820-8
Лекция 6:

Файловая система: разделы, файлы и каталоги

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >

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

Типы файлов

Если дать команду ls -l, то тип файла будет указан первым символом первого столбца вывода:

ls -l /etc
lrwxrwxrwx 1 root root   14 Янв 22 14:59 aliases ->
 ./mail/aliases
drwxr-xr-x 2 root bin   512 Янв 22 15:53 apache
...
-rw-r--r-- 1 root root   12 Янв 23 08:35 defaultrouter
-r--r--r-- 1 root root 1825 Янв 22 15:42 device.tab
-rw-r--r-- 1 root sys  2467 Янв 22 15:02 devlink.tab
drwxr-xr-x 2 root sys   512 Янв 22 14:54 dfs
prw------- 1 root root    0 Мар 16 15:50 initpipe
-rw-r--r-- 1 root sys  1087 Янв 23 08:33 inittab

Вывод команды ls для каталога /etc в этом примере сильно обрезан, на самом деле там несравнимо больше файлов. Нас интересуют различные типы файлов, которые мы здесь встретим.

В системах UNIX файлы могут быть обычными (этому типу соответствует обозначение -), а также представлять собой каталог (d), файл символьного (c) или блочного (b) устройства, символьную ссылку на другой файл (l), программный канал (p). В Solaris есть еще специальный тип door (дверь), ассоциированный с набором потоков в системе и требуемый для программирования взаимодействия потоков.

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

Каталог представляет собой файл специального формата, содержащий имена файлов, которые лежат в этом каталоге, и номера их индексных дескрипторов. Подробнее об индексных дескрипторах рассказано в разделе "Индексные дескрипторы".

Файлы символьных или блочных устройств - это файлы, которые располагаются в каталоге /dev или связанном с ним (см. лекцию 5). Обмен данными с символьным устройством (например, с терминалом) идет посимвольно, с блочным (например, с диском) - поблочно.

О символических2Иногда символические ссылки по недосмотру называют "символьными", и автор просит прощения, если подобный недосмотр вы обнаружите в этом тексте. По-английски они называются symbolic links, что корректно переводить как "символические ссылки " ссылках будет рассказано ниже в разделе "Ссылки"; это - файлы специального типа, аналог ярлыка в Windows.

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

В каталоге /etc мы видим обычные файлы, символические ссылки, каталоги и даже один программный канал. Файлы этих типов (за исключением файлов каналов) и составляют большинство в системе.

Таким образом, в Solaris используются следующие типы файлов:

d каталог (directory);

D дверь (door);

l символическая ссылка (symbolic link);

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

с файл символического устройства, устройства прямого доступа (character);

p специальный файл программного канала (FIFO, named pipe);

s сокет;

- обычный файл.

Имена файлов и каталогов

На имена файлов и каталогов распространяются одинаковые ограничения. Так, длина имени файла не должна превышать 255 символов, полное имя файла (т.е. путь от корня файловой системы до файла ) не должен быть длиннее 1023 символов.

Имена файлов и каталогов в UNIX состоят из латинских букв верхнего и нижнего регистра, цифр и знаков препинания. Регистр букв имеет значение! Буквы верхнего и нижнего регистра в UNIX считаются разными символами, имена Alliance и alliance - это разные имена, хотя и отличаются всего лишь регистром одной буквы.

Из знаков препинания рекомендуется использовать только точку " .", тире " - " и подчеркивание " _ ". Использование других знаков (запятых, скобок, звездочки, решетки, вопросительного и восклицательного знаков и других) теоретически возможно, но неудобно. Дело в том, что командные процессоры и стандартные системные функции в UNIX интерпретируют такие знаки специальным образом (а именно, как шаблоны имен файлов или модификаторы команд в командном процессоре). Обращаться к файлу с именем ,/?*&^q-+|! придется тоже специальным образом, а это быстро надоест.

В UNIX не используется понятие "расширение имени файла ", так как точка считается равноправным символом в имени. Следовательно, имя several.news.from.New.York смотрится в UNIX не более экзотично, чем index.html. UNIX не делает предположений о содержимом или назначении файла в зависимости от его имени и того, какие символы стоят справа от самой правой точки в имени.

Для того чтобы узнать, что содержится в файле, не открывая его, можно использовать программу file:

file bad.words
English text

Программа file использует специальный файл образцов - /etc/magic. Он содержит сведения о том, как должен выглядеть файл, чтобы его можно было отнести к какому-либо известному типу: текст (text), текст программы на языке С (C program), исполняемый код (executable file), данные (data) и т.д.

Имя может быть полным (абсолютным) или относительным. Полное имя файла - это имя с указанием пути к файлу от корневого каталога, например, /usr/local/squid/etc/squid.conf. Полное имя легко идентифицировать: оно всегда начинается с символа " / ".

Относительное имя файла может быть очень коротким, например, просто f. Если в имени файла вообще нет знака " / " (слэш), то имя относится к файлу текущего каталога. Если слэш есть (но не в начале имени - например, squid/etc/squid.conf), то все, что находится слева от первого в имени слэша, расценивается как подкаталог текущего каталога.

Полное имя любого файла не должно быть длиннее 1023 символов. Однако, для обращения к файлу, расположенному очень глубоко в структуре каталогов, следует перейти в промежуточный каталог командой cd и оттуда обратиться к файлу по относительному имени. Скажем, вместо

vi /usr/home/ivan/projects/united_states/texas/cowboys/horses/
red/seats/sellers_training

можно обратиться к тому же файлу так:

cd /usr/home/ivan/projects/united_states
vi texas/cowboys/horses/red/seats/sellers_training

Кстати, обратите внимание на ввод многострочных команд: при необходимости перехода на другую строку при вводе длинной команды следует использовать символ экранирования (обратный слэш) " \ ". Следующий за ним символ перевода строки в таком случае будет интерпретирован как пустой символ, а не как символ завершения команды.

Полное имя файла также называют "путем к файлу ", "путем файла " или "путевым именем файла ".

Символ " ~ " (тильда) в большинстве командных интерпретаторов обозначает домашний каталог пользователя. Например, команда

cd ~anna/

требует перейти в домашний каталог пользователя anna, а знак " ~ " без имени пользователя означает домашний каталог текущего пользователя. Впрочем, интерпретатор sh знак ~ так не воспринимает, пользуйтесь bash!

Действия с файлами и каталогами

Обычный (regular) файл может содержать текст или двоичные данные.

Создать текстовый файл можно в любом текстовом редакторе или перенаправив вывод какой-либо программы в файл. Часто для создания какого-нибудь тестового короткого файла так и делают. Например, после установки web-сервера можно проверить, корректно ли он откликается на внешний запрос, только если у нас уже есть файл index.html, который он должен выдать в ответ на запрос. Быстрее всего создать этот файл так:

#cat > index.html
<HTML>
<BODY>
Hello everybody!
</BODY>
</HTML>
^D
#

Пустой файл можно создать командой touch, которая изначально была придумана для изменения времени модификации файла на текущее системное время:

touch filename

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

Файлы копируют командой cp:

cp file1 file2

Переименование файла выполняет команда mv:

mv file1 file2

Командой mv файл можно переместить в другой каталог:

mv file /usr/progs/useless/

Если вы переносите или копируете файл или несколько файлов в каталог, то имя каталога правильнее указывать с завершающим слэшем в конце имени (например, /usr/progs/useless/). Это явным образом указывает на то, что имеется в виду именно каталог.

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

Файлы удаляют с помощью команды rm. В системах UNIX не предусмотрена возможность восстановления удаленных файлов (unerase), поэтому все, что стерто, пропадает навсегда. Системы UNIX в структуре файловой системы не имеют "мусорной корзины" (trash), в которую файлы попадают перед окончательным удалением. Правда, большинство графических сред обеспечивают такую "корзину", но только для тех файлов, которые были удалены программами, специально написанными с учетом этой возможности среды. Так, в Solaris в CDE есть своя корзина. В нее попадают те файлы и каталоги, которые были удалены программами, знающими об этой корзине. Как правило, о ее существовании подозревает только File Manager CDE. Возможность восстановления стертых файлов предоставляется не операционной системой, а графической оболочкой CDE, поэтому не стоит рассчитывать, что любой файл можно восстановить из корзины CDE. Например, если файл был удален командой rm из командной строки xterm (эмулятор тер минала для графической среды), то его уже не восстановить. Команда rm не знает о существовании корзины в CDE, даже если запускается в окне терминала в графическом режиме.

Вывести файл на экран можно командами cat, more, less, pg, page.

Программы cat и more есть в любой системе UNIX, другие перечисленные выше команды - это варианты команды more и присутствуют не всегда. Назначение more и ее "коллег" - поэкранный вывод длинных файлов. При выводе информации программа more останавливается, заполнив экран содержимым очередной страницы файла, и ждет команды. При нажатии "Enter" выводится следующая строка, при нажатии "пробела" - следующая страница. Можно искать подстроку в тексте, по команде

/подстрока

Клавишами <Ctrl-B>, <Ctrl-F> можно перемещаться назад и вперед на одну страницу, клавиша q служит для выхода из программы во время просмотра текста.

Каталоги

Слово " каталог " употребляется наряду со словом "директория" (directory). В терминологии большинства Windows-систем то же самое обозначает слово "папка" (folder). Среди системных администраторов UNIX принято употреблять термин " каталог ".

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

Каталог может содержать и файлы, и подкаталоги. Пустой каталог создается командой mkdir. Удалить пустой каталог можно командой rmdir, непустой каталог удаляется командой

rm -rf каталог

Например, по команде

rm -rf /usr/local/squid/

будут удалены каталог /usr/local/squid, а также все файлы в нем и все его подкаталоги.

Перенести или переименовать каталог можно командой mv, для копирования каталогов вместе с подкаталогами используется команда cp -Rp.

Список файлов и подкаталогов в каталоге выдает команда ls. Если запустить ls без параметров, она выдаст только список имен фaйлов. Эта команда имеет множество ключей, из которых наиболее полезны перечисленные в табл. 6.2.

Таблица 6.2. Некоторые ключи программы ls
l (long) вывести полную информацию о файле
a (all) вывести все файлы, в том числе те, чьи имена начинаются с точки
i (i-nodes) вывести номера индексных дескрипторов
t (time) отсортировать файлы по времени последней модификации

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

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

Файлам, которые содержат важную конфигурационную или служебную информацию, традиционно дают имена, начинающиеся с символа "точка". Таковы, например, файлы. profile, .xsession, .bashrc, .history и другие.

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

cd каталог

Команда cd без аргументов вызывает переход в домашний каталог текущего пользователя и эквивалентна cd ~.

Вывод на экран полного имени текущего каталога выполняется командой pwd.

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >