Европейский Университет в Санкт-Петербурге
Опубликован: 04.07.2008 | Доступ: свободный | Студентов: 1309 / 258 | Оценка: 4.34 / 3.65 | Длительность: 21:13:00
Лекция 6:

Файловая система

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

Типы файлов

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

#ls –l /etc

lrwxrwxrwx  1 root  root     4 Янв 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 или связанном с ним, как рассказано в "Файловая система" . Обмен данными с символьным устройством (например, с терминалом) идет посимвольно, с блочным (например, с диском) – поблочно.

О символьных ссылках будет рассказано ниже в разделе "символьные ссылки"; это – файлы специального типа, аналог ярлыка в Windows.

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

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

В таблице 6.5 сведены все типы файлов в Solaris.

Таблица 6.5. Типы файлов в Solaris
d каталог (directory)
D дверь (door)
l символическая ссылка (symbolic link)
b файл блочного устройства (block)
с файл символьного устройства, устройства прямого доступа (character)
p специальный файл программного канала (FIFO, named pipe)
s сокет
- обычный файл

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

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

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

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

В UNIX'e не используется понятие "расширение имени файла", так как точка считается равноправным символом в имени. Следовательно, имя 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) файл может содержать текст или двоичные данные.

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

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

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

touch filename

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

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

mkfile 500m testfile

создаст файл testfile размером 500 мегабайт. Команда mkfile специфична для Solaris (хотя в ряде дистрибутивов Linux и FreeBSD она тоже может существовать).

Файлы копируют командой 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, а также все файлы в нем и все его подкаталоги.

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

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

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

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

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

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

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

cd каталог

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

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

Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.

Александр Васильченко
Александр Васильченко
Россия
Денис Гайдуль
Денис Гайдуль
Россия, Подольск