Linux что такое специальный файл

Linux.yaroslavl.ru

Специальные Файлы: Символьный режим и Блочный режим
Пред. Глава 9. Файловая Система Linux След.

“Специальные” Файлы: Символьный режим и Блочный режим

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

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

А теперь, таким же образом попробуем отпечатать большой файл (это должно работать):

Команда будет выполняться медленно, независимо от того запустили вы ее один раз, два раза или пятьдесят раз. Это происходит потому, что /dev/lp0 это файл символьного режима, и его содержимое не буферизируется.

Тот факт, что файлы блочного режима буферизированы, имеет хороший побочный эффект: кроме того, что буферизируется чтение, также буферизируется и запись. Это приводит к тому, что запись на диск происходит асинхронно: в момент когда вы записываете файл, немедленной записи на диск не происходит. Реально запись на диск произойдет только тогда, когда GNU/Linux примет решение о необходимости этого.

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

Здесь главный и вторичный номер для файла /dev/hda будут 3 и 0 соответственно, а для файла /dev/lp0, это будут числа 6 и 0. Обратите внимание, что эти номера уникальны в категории файла, что означает, что может существовать файл символьного режима с главным номером 3, и младшим 0 (этот файл фактически существует: /dev/ttyp0), и точно так же может быть файл блочного режима с главный номером 6 и младшим 0. Эти номера существуют для того чтобы GNU/Linux могла правильно связывать операции с этими файлам (то есть это указатели на периферийные устройства): вы обычно не работаете с дисководом таким же образом, как и (например) с жесткими дисками SCSI

Источник

Linux что такое специальный файл

В предыдущих разделах мы рассмотрели два типа файлов: обычные файлы и каталоги. Но в Linux существует еще несколько типов файлов. С ними мы познакомимся в этом разделе.

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

  • файлы физических устройств;
  • именованные каналы (named pipes);
  • гнезда (sockets);
  • символические ссылки (symlinks).

4.4.1. Файлы физических устройств

Как уже говорилось, с точки зрения ОС Linux, все подключаемые к компьютеру устройства (жесткие и съемные диски, терминал, принтер, модем и т. д.), представляются файлами. Если, например, надо вывести на экран какую-то информацию, то система как бы производит запись в файл /dev/tty01.

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

Читайте также:  Как при запуске windows вызвать командную строку

Взаимодействием с физическими устройствами в Linux управляют драйверы устройств, которые либо встроены в ядро, либо подключаются к нему как отдельные модули. Для взаимодействия с остальными частями операционной системы каждый драйвер образует коммуникационный интерфейс, который выглядит как файл. Большинство таких файлов для различных устройств как бы «заготовлены заранее» и располагаются в каталоге /dev.

Если вы заглянете в каталог /dev, то увидите там огромное количество файлов физических устройств. («Заглянуть в каталог» означает выполнить последовательно две команды cd и ls .) В табл. 4.2 приведена небольшая справка по именам наиболее часто используемых специальных файлов.

Таблица 4.2. Основные специальные файлы.

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

Жесткие диски с IDE-интерфейсом. Устройство /dev/hda1 соответствует первому разделу на первом жестком диске (/dev/hda), т. е. на диске, подключенном как Primary Master

Жесткие диски с SCSI-интерфейсом

Файлы дисководов для гибких дисков. Первому дисководу соответствует /dev/fd0, второму /dev/fd1

Файлы поддержки пользовательских консолей. Название сохранилось с тех пор, когда к системе UNIX подключались телетайпы в качестве терминалов. В Linux эти файлы устройств обеспечивают работу виртуальных консолей (переключаться между которыми можно с помощью Alt >+ F1 > — Alt >+ F6 > )

Файлы поддержки псевдо-терминалов. Применяются для удаленных рабочих сессий с использованием telnet

Файлы, обеспечивающие работу с последовательными портами. /dev/ttyS0 соответствует COM1 в MS-DOS, /dev/ttyS1 — COM2. Если ваша мышь подключается через последовательный порт, то /dev/mouse является символической ссылкой на соответствующий /dev/ttySN

Специальные устройства для работы с модемами

Это устройство — просто черная дыра. Все, что записывается в /dev/null, навсегда потеряно. На это устройство можно перенаправить вывод ненужных сообщений. Если /dev/null используется как устройство ввода, то оно ведет себя как файл нулевой длины

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

Для файлов устройств команда ls -l вместо размера файла выдает старший и младший номера данного устройства.

4.4.2. Именованные каналы (pipes)

Еще один тип специальных файлов — именованные каналы, или буферы FIFO (First In — First Out). Файлы этого типа служат в основном для того, чтобы организовать обмен данными между разными приложениями (pipe переводится с английского как труба).

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

4.4.3. Доменные гнезда (sockets)

Гнезда — это соединения между процессами, которые позволяют им взаимодействовать, не подвергаясь влиянию других процессов. Вообще гнезда (и взаимодействие программ при помощи гнезд) играют очень важную роль во всех Unix-системах, включая и Linux: они являются ключевым понятием TCP/IP и соответственно на них целиком строится Интернет. Однако с точки зрения файловой системы гнезда практически неотличимы от именованных каналов: это просто метки, позволяющие связать несколько программ. После того как связь установлена, общение программ происходит без участия файла гнезда: данные передаются ядром ОС непосредственно от одной программы к другой.

Несмотря на то, что другие процессы могут видеть файлы гнезд как элементы каталога, процессы, не участвующие в данном конкретном соединении, не могут осуществлять над файлами гнезд операции чтения/записи. Среди стандартных средств, использующих гнезда — система X Window, система печати и система syslog.

Читайте также:  Команда для перезагрузки линукса

4.4.4. Символические ссылки (еще раз об именах файлов)

В разделе об именах файлов уже говорилось о том, что файл в Linux может иметь несколько имен или «жестких ссылок».

Жесткая ссылка является просто еще одним именем для исходного файла. Она прописывается в индексном дескрипторе исходного файла. После создания жесткой ссылки невозможно различить, где исходное имя файла, а где ссылка. Если вы удаляете один из этих файлов (точнее одно из этих имен), то файл еще сохраняется на диске (пока у него есть хоть одно имя-ссылка).

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

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

Но в Linux имеется другой тип ссылок, так называемые символические ссылки. Эти ссылки тоже могут рассматриваться как дополнительные имена файлов, но в то же время они представляются отдельными файлами — файлами типа символических ссылок. В отличие от жестких ссылок символические ссылки могут указывать на файлы, расположенные в другой файловой системе, например, на монтируемом носителе, или даже на другом компьютере. Если исходный файл удален, символическая ссылка не удаляется, но становится бесполезной. Используйте символические ссылки в тех случаях, когда хотите избежать путаницы, связанной с применением жестких ссылок.

Создание любой ссылки внешне подобно копированию файла, но фактически как исходное имя файла, так и ссылка указывают на один и тот же реальный файл на диске. Поэтому, например, если вы внесли изменения в файл, обратившись к нему под одним именем, вы обнаружите эти изменения и тогда, когда обратитесь к файлу по имени-ссылке. Для того, чтобы создать символическую ссылку, используется уже упоминавшаяся команда ln с дополнительной опцией -s :

ln -s имя_файла_или_каталога имя_ссылки

[user]$ ln -s /home/kos/ve/HOWTO/font-HOWTO-ru/

После выполнения такой команды в моем домашнем каталоге появился подкаталог FONTS. Если теперь мы просмотрим список файлов в каталоге /home/kos с помощью команды ls -l, то среди прочих увидим такую строку:

l rwxrwxrwx 1 kos kos 31 Dec 13 21:13 FONTS -> /home/kos/ve/HOWTO/font-HOWTO-ru/

Обратите внимание на самый первый символ в этой строке: он показывает, что данная запись соответствует символической ссылке. Впрочем, это видно и в поле имени, где после нового имени и стрелки указано исходное имя файла (в данном случае — каталога).

Если вы создали в каталоге kat1 символическую ссылку, которая указывает на какой-то другой каталог, то вы можете переместить каталог kat1 куда угодно, символическая ссылка при этом будет оставаться корректной. Точно так же можно перемещать сами символические ссылки. Но остерегайтесь использовать «..» (т. е. ссылку на родительский каталог) в полных именах файлов, включающих символические ссылки, поскольку по символической ссылке нельзя проследовать в обратном направлении, а «..» всегда означает истинный родительский каталог данного каталога.

Источник

Типы файлов в Linux

Обновл. 4 Сен 2021 |

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

Идентификация типов файлов в Linux

Для определения типа файла достаточно воспользоваться всего одной командой:

$ ls -ld /etc/services
-rw-r—r— 1 root root 19281 Feb 14 2012 /etc/services

Команда ls отобразит тип файла в виде первого символа из списка. В данном случае этим символом будет — , обозначающий «обычный файл». Важно отметить, что в Linux не следует путать типы файлов с расширениями файлов.

Типы файлов в Linux

Ниже представлено краткое описание 7 различных типов файлов в Linux:

Читайте также:  Как запустить установить windows с флешки

c — символьное устройство;

b — блочное устройство;

s — (локальный) сокет;

p — именованный канал;

l — символьная ссылка.

Обычный файл

Обычный файл — это наиболее распространенный тип файлов в Linux. Текстовые файлы, изображения, двоичные файлы, общие библиотеки и т.д. — все они относятся к обычному типу файлов. Вы можете создать обычный файл с помощью команды touch :

$ touch ravesli.txt
diego@debian:

$ ls -ld ravesli.txt
rw-r—r— 1 diego diego 0 фев 20 11:14 ravesli.txt

Первый символ вывода команды ls , в данном случае — , обозначает, что перед нами обычный файл. Для удаления обычного файла используется команда rm (сокр. от «remove»):

$ rm ravesli.txt
diego@debian:

$ ls -ld ravesli.txt
ls: невозможно получить доступ к ‘ravesli.txt’: Нет такого файла или каталога

Каталог

Обозначается как d

Каталог — это второй по распространенности тип файлов в Linux. Каталог можно создать с помощью команды mkdir (сокр. от «make directory»):

$ mkdir ravesli
diego@debian:

$ ls -ld ravesli
d rwxr-xr-x 2 diego diego 4096 фев 20 12:14 ravesli

Как объяснялось ранее, каталогу соответствует символ d (от «directory») выходных данных команды ls . Для удаления пустого каталога используется команда rmdir (сокр. от «remove directory»):

$ rmdir ravesli
diego@debian:

$ ls -ld ravesli
ls: невозможно получить доступ к ‘ravesli’: Нет такого файла или каталога

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

$ mkdir ravesli
diego@debian:

$ touch /home/diego/ravesli/ravesli.txt
diego@debian:

$ rmdir ravesli
rmdir: не удалось удалить ‘ravesli’: Каталог не пуст

В этом случае вам нужно использовать команду rm -r :

$ rm -r ravesli/
diego@debian:

$ ls -ld ravesli
ls: невозможно получить доступ к ‘ravesli’: Нет такого файла или каталога
diego@debian:

Символьное устройство

Обозначается как c

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

$ sudo ls -ld /dev/urandom
c rw-rw-rw- 1 root root 1, 9 фев 20 12:49 /dev/urandom

В этом примере символьным устройством является генератор псевдослучайных чисел.

Блочное устройство

Обозначается как b

Блочные устройства похожи на символьные. Чаще всего они управляют аппаратными устройствами, такими как: жесткие диски, память и т.д. Большинство из них располагаются в каталоге /dev :

$ ls -ld /dev/sda
b rw-rw—- 1 root disk 8, 0 фев 20 12:49 /dev/sda

Локальные сокеты

Обозначаются как s

Как правило, локальные сокеты используются для связи между такими службами, как: X Window, syslog и т.д.

$ ls -ld /dev/log
s rw-rw-rw- 1 root root 0 Jan 4 10:13 /dev/log

Именованные каналы

Обозначаются как p

Подобно локальным сокетам, именованные каналы позволяют осуществлять связь между двумя локальными процессами. Основное отличие от сокетов в том, что через каналы данные могут проходить одновременно только в одном направлении. Они могут быть созданы с помощью команды mknod и удалены с помощью команды rm .

Символьные ссылки

Обозначаются как l

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

Существует два типа символьных ссылок в Linux:

Мягкая ссылка является указателем на некоторый файл или каталог (сродни ярлыкам в Windows). Если вы переместите файл, связь с символьной ссылкой разорвётся (но сама ссылка все еще будет существовать, указывая на файл, которого нет). Если вы замените файл другим, сохранив имя, символьная ссылка будет указывать на новый файл. Символьные ссылки могут охватывать различные разделы файловой системы.

Жесткая ссылка привязывается только к файлам, охватывает только один раздел файловой системы и, по сути, является тем же файлом, на который ссылается.

Для создания символьной мягкой ссылки используется команда ln -s :

$ echo file1 > file1
diego@debian:

$ ln -s file1 file2
diego@debian:

$ cat file2
file1
diego@debian:

$ ls -ld file2
l rwxrwxrwx 1 diego diego 5 фев 20 14:11 file2 -> file1

Чтобы удалить символьную ссылку, мы можем использовать команду unlink или rm .

Заключение

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

Поделиться в социальных сетях:

Источник

Оцените статью