Файлы физических устройств
Все подключенные к компьютеру устройства понимаются операционной системой как файлы: вывод информации на терминал, печать на принтере, отправка почты — все это, с точки зрения ОС, есть запись в файл. Технически файл устройства — это коммуникационный интерфейс драйвера, ведающего взаимодействием с этим устройством. Большинство таких файлов располагается в каталоге /dev.
Загляните в этот каталог, введя команду Is -1 /dev. Вывод этой команды займет несколько экранов, что создает повод для знакомства с командой-фильтром more, выводящей поступающие к ней на вход данные по одному экрану за раз:
$ Is -I /dev I more
Чтобы увидеть следующий экран, нажмите пробел; чтобы прервать работу команды — Ctrl+С. О символе вертикальной черты, разделяющей командыIs иmore, подробнее сказано в п. 3.3.1.
Об именах устройств, соответствующих разделам жесткого диска, сказано в главе 1. В следующей таблице приведена краткая справка по именам
других часто используемых устройств. Символ N означает номер устройства в группе однотипных с ним устройств. Наиболее часто используемые стандартные имена устройств
Таблица 2.2
Файл | Устройство |
null | Пустое устройство. Все данные, выводимые в него, просто исчезают. Удобно использовать его для вывода ненужных сообщений |
console | Системная консоль, т.е. физически подключенные клавиатура и монитор |
ttyN | Пользовательская (виртуальная) консоль. Linux поддерживает до 6 таких консолей, для переключения между которыми служит комбинация клавиш Alt+Fn, где п — число от 1 до 6 |
pts/N | Виртуальный терминал. Программа графического режима, в окне которой можно работать как в консоли |
mouseN | Мышь |
audioN | Звуковая карта |
ttySN | Последовательный порт. Файл /dev/ttySO соответствует порту СОМ1 в MS-DOS, /dev/ttySI — порту COM2 |
lpN | Параллельный порт |
cuaN | Специальное устройство для работы с модемом |
ethN | Сетевая плата |
fcIN | Дисковод для гибких дисков. Первому, то есть А:, соответствует /dev/fdO, для В: используется имя /dev/fdl |
hdxN | Жесткий диск с интерфейсом IDE, где х — буква, обозначающая номер такого диска (начиная с а), N— номер раздела на диске |
sdxN | Жесткий диск с интерфейсом SCSI |
Вместо размера файла команда Is выдает два числа. Это так называемые старший и младший номера устройства. Старший номер несет информацию о драйвере, к которому относится данный файл, а младший номер указывает, к какому именно из однотипных устройств следует обращаться.
Жесткие и символические ссылки
Жесткая ссылка является просто другим именем для исходного файла. После создания такой ссылки ее невозможно отличить от исходного имени файла. «Настоящего» имени у файла нет, точнее, все такие имена будут настоящими. Команда Is показывает количество именно таких жестких ссылок. Удаление файла по любому из его имен уменьшает на единицу количество ссылок, и окончательно файл будет удален только тогда, когда это количество станет равным нулю. Поэтому удобно использовать жесткие ссылки для того, чтобы предотвратить случайное удаление важного файла.
Создадим жесткую ссылку на файл README и посмотрим, что изменилось в его свойствах:
$ln /home/den/README /home/den/readme_too $ls -I /home/den/README -rwxr-xr-- 2 den users 0 Feb 14 19:08 /home/den/README
Жесткую ссылку можно создавать в любом каталоге, но обязательно на том же физическом носителе (то есть в той же файловой системе), что и исходный файл. О причине этого будет сказано в п. 2.2.1.
Другой тип ссылок представляют собой символические ссылки. По назначению они аналогичны ярлыкам в ОС Windows: указывают на файл, расположенный где угодно (например, на съемном носителе), и после удаления такого файла или размонтирования съемного носителя становятся бесполезны.
Символическая ссылка создается той же командой In с ключом -s:
$ln -s /home/den/README /home/den/do, not. readme $ls -I /home/den/do.not. readme
lrwxrwxrwx I den users 16 Feb 14 19:17 /home/den/do.not. readme -> /home/den/README
В поле имени файла после стрелки указано его настоящее имя. Права доступа у всех символических ссылок одинаковы и не значат ничего: возможность доступа к файлу определяется правами исходного файла. Заметьте, что в отличие от файла-оригинала файл-ссылка имеет ненулевую длину: в нем хранится абсолютное имя исходного файла. Попытайтесь вывести файл-ссылку на экран с помощью команды cat, и вы увидите содержание исходного, пустого, файла:
$ cat /home/den/do, not. readme $
Значение самой ссылки, то есть имя файла, на который она ссылается, можно узнать с помощью командыreadlink.
Символические ссылки на каталог создаются и выглядят точно так же, как символические ссылки на обычный файл. Можно создать и цепочку ссылок на ссылки: ядро ОС проследует по всей цепочке и в итоге подставит вместо ссылки имя исходного файла.
Можно даже закольцевать такую цепочку:
$ touch а1
$ In-s а1 а2; rm а1 $ In-s а2 а1
$ls-1 а? # это шаблон имени. Ему соответствуют все имена из двух букв, первая «а»
al-> a2 a2-> al $ cat al cat: al: Too many levels of symbolic links
Практический смысл этого упражнения — убедить вас в том, что Linux корректно справляется с разрешением ссылок даже в намеренно некорректной ситуации.
Символическая ссылка на каталог может участвовать в образовании полного имени файла, но есть одна тонкость: по ссылке нельзя проследовать обратно в направлении корня дерева каталогов. Вместо псевдоподкаталога «..» подставляется родительский каталог каталога-оригинала. Так, если в домашнем каталоге пользователя ivan есть ссылка на домашний каталог пользователя den, то путь /home/ivan/link_to_den_home/.. эквивалентен не /home/ivan, a /home/den/.., то есть /home.