Что такое символьный файл

Обновлено: 07.07.2024

Немного обо всем и все о немногом, или практический опыт системного администратора.

Октябрь 2009
Пн Вт Ср Чт Пт Сб Вс
« Сен Ноя »
1234
567891011
12131415161718
19202122232425
262728293031

Лекция №6 - каталоги /proc, /sys. Блочные и символьные файлы-устройства

Calendar

6 октября 2009, 10:35

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

Еще два интересных файла-устройства это zero и null . zero - постоянно выдает нули. Это может быть нужно например, если нужно очистить жесткий диск. Для этого можно использовать команду dd if=/dev/zero of=/dev/sdc . Только не нужно выполнять эту команду на своем рабочем диске. Что делает эта команда? В качестве входящих данных (if - input file), используется информация из /dev/zero (то есть нули), в качестве приемника данных (of - output file) используется жесткий диск. В результате выполнения весь диск заполниться нулями. Null - не содержит в себе ничего. И запись в это устройство - это запись в никуда. Это может быть полезно если мы хотим чтобы, информация выдаваемая командами не высвечивалась на консоли. Например, команда echo Hello! > /dev/null не отобразит на консоли слово Hello!, так как вывод перенаправлен в /dev/null.

Давайте выполним команду mount без параметров, чтобы посмотреть какие устройства у нас смонтированы и с какими файловыми системами. Нас интересует строка относящаяся к каталогу /proc. Выглядит она примерно так: proc on /proc type proc (rw). Как можете видеть файловая система здесь называется proc. Это виртуальная файловая система, в которой отображаются файлы-процессы. Эту виртуальную файловую систему Linux создает в виртуальной памяти, поэтому на жестком диске она не занимает место, да и многие файлы в памяти также не занимают место так как на самом деле не содержат в себе информации. Выполните команду df -ha и убедитесь, что действительно каталог /proc занимает 0 байт пространства. Хотя информацию можно получить по команде cat (less), но на самом деле информация эта генерируется ядром на лету - cat /proc/cpuinfo . То есть /proc/cpuinfo - это не текстовый файл. Другими словами через файлы содержащиеся в каталоге /proc мы получаем доступ к различным статистическим (и не только) данным ядра. Например, команда cat /proc/net/dev покажет статистическую информацию по сетевым устройствам - количество принятых/переданных байт и пакетов и другую. А команда cat /proc/sys/net/ipv4/ip_forward - покажет разрешена ли в нашей системе пересылка (форвардинг) пакетов. Большинство файлов в каталоге /proc доступны только для чтения, но есть и такие которые доступны для записи (для пользователя root). Файл ip_forward как раз относится к последним. Если у вас там 0, то форвардинг отключен. Но мы можем включить его следующим способом (в некоторых дистрибутивах такие операции не пройдут): echo 1 > /proc/sys/net/ipv4/ip_forward. По этой команде мы изменим содержимое с 0 на 1 и тем самым разрешим форвардинг (после перезагрузки системы снова будет 0). По команде ls /proc/ вы можете увидеть много директорий с числовым именем. Эти имена соответствуют идентификаторам процессов запущенных в системе. В каждой такой папке содержится разнообразная информация о процессе. Подробнее можно ознакомится набрав man 5 proc .

Каталог /sys имеет свою файловую систему sysfs. В чем-то содержимое каталога (по назначению) /sys схоже с каталогом /proc . Основное отличие в том, что файлы в /sys описывают реальную конфигурацию компьютера на текущий момент. /sys очень тесно связан с udev если вы подключаете (отключаете) устройства, содержимое каталога /sys динамически меняется. Можно посмотреть на примере. Выполните команду ls /sys/bus/usb/devices/ , чтобы посмотреть текущие usb-устройства в системе. Теперь подключите флеш-накопитель и выполните команду ls /sys/bus/usb/devices/ еще раз. Вы увидите, что теперь устройств стало больше.

Еще раз хочу обратить внимание на то, что содержимое директорий /proc и /sys формируется ядром на этапе загрузки. Загрузитесь с любого LiveCD диска зайдите в директории /proc и /sys на вашем диске и убедитесь, что они пустые.

Немного обо всем и все о немногом, или практический опыт системного администратора.

Октябрь 2009
Пн Вт Ср Чт Пт Сб Вс
« Сен Ноя »
1234
567891011
12131415161718
19202122232425
262728293031

Лекция №6 - каталоги /proc, /sys. Блочные и символьные файлы-устройства

Calendar

6 октября 2009, 10:35

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

Еще два интересных файла-устройства это zero и null . zero - постоянно выдает нули. Это может быть нужно например, если нужно очистить жесткий диск. Для этого можно использовать команду dd if=/dev/zero of=/dev/sdc . Только не нужно выполнять эту команду на своем рабочем диске. Что делает эта команда? В качестве входящих данных (if - input file), используется информация из /dev/zero (то есть нули), в качестве приемника данных (of - output file) используется жесткий диск. В результате выполнения весь диск заполниться нулями. Null - не содержит в себе ничего. И запись в это устройство - это запись в никуда. Это может быть полезно если мы хотим чтобы, информация выдаваемая командами не высвечивалась на консоли. Например, команда echo Hello! > /dev/null не отобразит на консоли слово Hello!, так как вывод перенаправлен в /dev/null.

Давайте выполним команду mount без параметров, чтобы посмотреть какие устройства у нас смонтированы и с какими файловыми системами. Нас интересует строка относящаяся к каталогу /proc. Выглядит она примерно так: proc on /proc type proc (rw). Как можете видеть файловая система здесь называется proc. Это виртуальная файловая система, в которой отображаются файлы-процессы. Эту виртуальную файловую систему Linux создает в виртуальной памяти, поэтому на жестком диске она не занимает место, да и многие файлы в памяти также не занимают место так как на самом деле не содержат в себе информации. Выполните команду df -ha и убедитесь, что действительно каталог /proc занимает 0 байт пространства. Хотя информацию можно получить по команде cat (less), но на самом деле информация эта генерируется ядром на лету - cat /proc/cpuinfo . То есть /proc/cpuinfo - это не текстовый файл. Другими словами через файлы содержащиеся в каталоге /proc мы получаем доступ к различным статистическим (и не только) данным ядра. Например, команда cat /proc/net/dev покажет статистическую информацию по сетевым устройствам - количество принятых/переданных байт и пакетов и другую. А команда cat /proc/sys/net/ipv4/ip_forward - покажет разрешена ли в нашей системе пересылка (форвардинг) пакетов. Большинство файлов в каталоге /proc доступны только для чтения, но есть и такие которые доступны для записи (для пользователя root). Файл ip_forward как раз относится к последним. Если у вас там 0, то форвардинг отключен. Но мы можем включить его следующим способом (в некоторых дистрибутивах такие операции не пройдут): echo 1 > /proc/sys/net/ipv4/ip_forward. По этой команде мы изменим содержимое с 0 на 1 и тем самым разрешим форвардинг (после перезагрузки системы снова будет 0). По команде ls /proc/ вы можете увидеть много директорий с числовым именем. Эти имена соответствуют идентификаторам процессов запущенных в системе. В каждой такой папке содержится разнообразная информация о процессе. Подробнее можно ознакомится набрав man 5 proc .

Каталог /sys имеет свою файловую систему sysfs. В чем-то содержимое каталога (по назначению) /sys схоже с каталогом /proc . Основное отличие в том, что файлы в /sys описывают реальную конфигурацию компьютера на текущий момент. /sys очень тесно связан с udev если вы подключаете (отключаете) устройства, содержимое каталога /sys динамически меняется. Можно посмотреть на примере. Выполните команду ls /sys/bus/usb/devices/ , чтобы посмотреть текущие usb-устройства в системе. Теперь подключите флеш-накопитель и выполните команду ls /sys/bus/usb/devices/ еще раз. Вы увидите, что теперь устройств стало больше.

Еще раз хочу обратить внимание на то, что содержимое директорий /proc и /sys формируется ядром на этапе загрузки. Загрузитесь с любого LiveCD диска зайдите в директории /proc и /sys на вашем диске и убедитесь, что они пустые.

В UNIX существует шесть типов файлов, различающихся по строение и поведению при выполнении операций над ними:

Обычный файл (regular le)

Это наиболее общий тип файлов, содержащий данные в некотором формате. Для ОС это просто последовательность байт. Интерпретация содержимого производится прикладной задачей. Пример: текстовый файл, двоичные данные, исполняемый файл. Их можно просматривать командами cat имя и less имя.

Каталог (directory)

Это файл, содержащий имена находящихся в нем файлов, а также указатели на метаданные этих файлов, позволяющие ОС производить операции над ними. Каталоги определяют положение файла в дереве файловой системы, так как сам файл не содержит информации о своем местонахождении. Каталоги образуют дерево. Для работы с каталогами используются команды: ls с ключами -a и -l, cd, mkdir, rm, rmdir, mv.

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

Специальный файл устройства (special device le)

Обеспечивает доступ к физическому устройству. Различают символьные и блочные файлы устройств. Доступ к устройствам происходит путем открытия, чтения/записи в специальный файл устройства. Символьные файлы позволяют небуферизованный обмен данными (посимвольно), а блочные - обмен пакетами определенной длины - блоками. Для создания файлов устройств используется команда mknod.

FIFO или именованный канал (named pipe)

Используется для связи между процессами.

Связь (ссылка)

Жесткая ссылка

Связь имени файла с его данными называется жесткой ссылкой (hard link). Имена жестко связаны с метаданными и, соответственно, с данными файла, в то время, как файл существует независимо от того, как его называют в файловой системе. Такая система позволяет одному файлу иметь несколько имен в файловой системе. Жесткая связь не принадлежит к особому типу файлов, а является естественной формой связи имени файла с его метаданными. Жесткие ссылки можно создать командой ln (link).

Символическая ссылка

Особый тип связи - символическая связь, позволяющая косвенно адресовать файл, в отличие от жесткой, обращающейся напрямую. Символическая ссылка содержит в себе имя файла, на который ссылается, а не его данные. Физическое расположение файлов различно. Размер symfirst - длина имени файла, на который ссылается символическая связь. ОС работает с symfirst не так, как с обычным файлом: при обращении к нему появятся данные first.

Сокет (socket)

Используются для межпроцессного взаимодействия.

Структура файловой системы

Атрибуты файлов

Владельцы файлов

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

/etc/passwd - список всех пользователей и их первичных групп; /etc/group - список всех групп и их дополнительных пользователей. В UNIX любой файл имеет двух владельцев:

  1. владельца-пользователя
  2. владельца-группу.

Права доступа к файлам

У каждого файла существуют атрибуты, называемые правами доступа. В UNIX существует три базовых типа доступа:

  1. u (user) для владельца-пользователя
  2. g (group) для владельца-группы
  3. o (other) для всех остальных
  4. а (all - объединяет 3 предыдущих класса). Для всех классов пользователей

В каждом из этих классов установлены три основных права доступа:

  1. r (read) право на чтение
  2. w (write) право на запись
  3. x (execute) право на выполнение

В первой колонке вывода команды ls -l можно просмотреть установленные права.

r w - r - - r w x 1 stud1 students … example.program 0 1 2 3 4 5 6 7 8 9 0 - тип файла: - обычный; d каталог; l символическая ссылка; c,b символьный/блочный файл устройств. 1-3 - права доступа для владельца-пользователя. 4-6 - права доступа для владельца-группы. 7-9 - права доступа для остальных. Права может изменять владелец-пользователь и(или) администратор. Для изменения прав доступа используется команда chmod: chmod

добавить права к текущим − отнять права от текущих = обнулить права и присвоить новые

Возможно также задание прав через числовой формат в восьмеричной системе счисления. Пример: chmod 666 *.

Значение прав доступа

Для обычных фалов - очевидно: право на чтение надо, чтобы прочитать файл, право на запись, чтобы иметь возможность файл изменить, а право на выполнение, чтобы запустить программу или скрипт. Примечание. Для успешного запуска скрипта необходимо установить атрибут r, чтобы командный интерпретатор мог построчно считывать текст скрипта. Для каталогов и символических связей интерпретация прав доступа проводится по-другому. Права символических ссылок совпадают с файлом, на который она указывает. На самой ссылке стоит 777 (всем все) и это не имеет значения. Для каталогов r позволяет получить имена (и только имена) файлов, находящихся в данном каталоге. X позволяет “выполнить”каталог, то есть заглянуть в метаданные и получить полную информацию о каталоге.

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

После окончания работы программы и вывода результатов на дисплей данные будут утрачены безвозвратно, если они не будут записаны и сохранены в долговременной памяти. Для сохранения данных в долговременной памяти используются файлы. Файл (англ. file) — это именованная область памяти на носителе информации. В программировании различают два типа файлов: текстовые и двоичные (бинарные). Вне зависимости от организации данных в файлах, данные в них представлены в двоичном формате, так что это деление условное.
Ниже рассматривается работа только с текстовыми файлами. В текстовых файлах данные интерпретируются как последовательность символьных кодов. Это позволяет отвлечься от двоичного представления данных в файле и рассматривать файл, как поток символов, аналогичный стандартному (консольному) потоку. Иными словами запись в файл и чтение из файла можно рассматривать как файловый вывод и ввод, соответственно.
Специальные последовательности (управляющие символы) используются для указания признака конца строки и конца файла.

Файловый объект и режимы работы

Для организации файлового ввода/вывода в программе создается файловый объект. Для его создания используется функция open() :

Режимы работы с текстовым файлом
Режим Описание
w Открыть файл для записи. Если такой файл уже существует, то его содержимое удаляется (если это возможно)
r Открыть файл только для чтения
a Открыть файл для добавления, т.е. записи в конец файла. Предыдущее содержимое файла сохраняется
r+ Открыть файл для записи/чтения, содержимое файла сохраняется
w+ Открыть файл для записи/чтения, содержимое файла удаляется (см. w)

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

Нельзя открывать бинарные файлы (такие как jpeg, exe, doc) в текстовом режиме! Это может привести к тому, что файлы будут испорчены.

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

Методы readline(), write() и close()

Для чтения данных из файла (файловый ввод) используется метод

Обязательным аргументом является объект класса str . Объекты других типов должны быть преобразованы в строку с помощью функции преобразования str() . Метод write() возвращает количество записанных символов.
Работа с файловыми потоками должна быть завершена методом close() . Этот метод освобождает ресурсы и закрывает поток.
Чтобы работа с файлами в программе была структурирована, а освобождение ресурсов и закрытие потоков производилось в автоматическом режиме, используется специальный синтаксис менеджера контекста with-as .

Менеджер контекста with-as

Менеджер контекста определяет методы, которые могут быть вызваны внутри блока. Синтаксис менеджера контекста выглядит следующим образом:

Приведем пример программы в которой менеджер контекста используется для организации файлового потока ввода.
Задача 2. Текстовый файл состоит не более чем из 1'200'000 символов X , Y , и Z . Определите максимальное количество идущих подряд символов, среди которых нет подстроки XZZY . (Открытый вариант КЕГЭ-2021, зад. 24).
Файл к задаче.

Организация построчного чтения файла

В python файловые объекты являются итерируемыми. Это означает, что для построчного чтения файла можно использовать цикл for (стр. 10 в программе 9.6.3). Решим следующую задачу.
Задача 3. Записать в файл output 100 строк. Каждая строка должна содержать три случайных целых числа из интервала [1; 1000] , разделенных пробелами. Откройте этот файл в режиме чтения и определите максимальное значение среднего арифметического чисел в строках этого файла. Выведите это значение на экран.

Функция readlines()

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

В UNIX существует шесть типов файлов, различающихся по строение и поведению при выполнении операций над ними:

Обычный файл (regular le)

Это наиболее общий тип файлов, содержащий данные в некотором формате. Для ОС это просто последовательность байт. Интерпретация содержимого производится прикладной задачей. Пример: текстовый файл, двоичные данные, исполняемый файл. Их можно просматривать командами cat имя и less имя.

Каталог (directory)

Это файл, содержащий имена находящихся в нем файлов, а также указатели на метаданные этих файлов, позволяющие ОС производить операции над ними. Каталоги определяют положение файла в дереве файловой системы, так как сам файл не содержит информации о своем местонахождении. Каталоги образуют дерево. Для работы с каталогами используются команды: ls с ключами -a и -l, cd, mkdir, rm, rmdir, mv.

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

Специальный файл устройства (special device le)

Обеспечивает доступ к физическому устройству. Различают символьные и блочные файлы устройств. Доступ к устройствам происходит путем открытия, чтения/записи в специальный файл устройства. Символьные файлы позволяют небуферизованный обмен данными (посимвольно), а блочные - обмен пакетами определенной длины - блоками. Для создания файлов устройств используется команда mknod.

FIFO или именованный канал (named pipe)

Используется для связи между процессами.

Связь (ссылка)

Жесткая ссылка

Связь имени файла с его данными называется жесткой ссылкой (hard link). Имена жестко связаны с метаданными и, соответственно, с данными файла, в то время, как файл существует независимо от того, как его называют в файловой системе. Такая система позволяет одному файлу иметь несколько имен в файловой системе. Жесткая связь не принадлежит к особому типу файлов, а является естественной формой связи имени файла с его метаданными. Жесткие ссылки можно создать командой ln (link).

Символическая ссылка

Особый тип связи - символическая связь, позволяющая косвенно адресовать файл, в отличие от жесткой, обращающейся напрямую. Символическая ссылка содержит в себе имя файла, на который ссылается, а не его данные. Физическое расположение файлов различно. Размер symfirst - длина имени файла, на который ссылается символическая связь. ОС работает с symfirst не так, как с обычным файлом: при обращении к нему появятся данные first.

Сокет (socket)

Используются для межпроцессного взаимодействия.

Структура файловой системы

Атрибуты файлов

Владельцы файлов

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

/etc/passwd - список всех пользователей и их первичных групп; /etc/group - список всех групп и их дополнительных пользователей. В UNIX любой файл имеет двух владельцев:

  1. владельца-пользователя
  2. владельца-группу.

Права доступа к файлам

У каждого файла существуют атрибуты, называемые правами доступа. В UNIX существует три базовых типа доступа:

  1. u (user) для владельца-пользователя
  2. g (group) для владельца-группы
  3. o (other) для всех остальных
  4. а (all - объединяет 3 предыдущих класса). Для всех классов пользователей

В каждом из этих классов установлены три основных права доступа:

  1. r (read) право на чтение
  2. w (write) право на запись
  3. x (execute) право на выполнение

В первой колонке вывода команды ls -l можно просмотреть установленные права.

r w - r - - r w x 1 stud1 students … example.program 0 1 2 3 4 5 6 7 8 9 0 - тип файла: - обычный; d каталог; l символическая ссылка; c,b символьный/блочный файл устройств. 1-3 - права доступа для владельца-пользователя. 4-6 - права доступа для владельца-группы. 7-9 - права доступа для остальных. Права может изменять владелец-пользователь и(или) администратор. Для изменения прав доступа используется команда chmod: chmod

добавить права к текущим − отнять права от текущих = обнулить права и присвоить новые

Возможно также задание прав через числовой формат в восьмеричной системе счисления. Пример: chmod 666 *.

Значение прав доступа

Для обычных фалов - очевидно: право на чтение надо, чтобы прочитать файл, право на запись, чтобы иметь возможность файл изменить, а право на выполнение, чтобы запустить программу или скрипт. Примечание. Для успешного запуска скрипта необходимо установить атрибут r, чтобы командный интерпретатор мог построчно считывать текст скрипта. Для каталогов и символических связей интерпретация прав доступа проводится по-другому. Права символических ссылок совпадают с файлом, на который она указывает. На самой ссылке стоит 777 (всем все) и это не имеет значения. Для каталогов r позволяет получить имена (и только имена) файлов, находящихся в данном каталоге. X позволяет “выполнить”каталог, то есть заглянуть в метаданные и получить полную информацию о каталоге.

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

Читайте также: