Linux.yaroslavl.ru
Стартовое Руководство Пользователя описывает концепцию прав доступа к файлам, а также понятия владельца файла, но в действительности для файловых систем UNIX (это относится и к GNU/Linux’ ext2fs) требуется, чтобы мы ввели определение файла.
В данном случае, “всё” действительно означает всё. Жесткий диск, разделы на жестком диске, параллельные порты, подключение к web-сайтам, Ethernet карточка, все они являются файлами. Даже каталоги — это файлы. В GNU/Linux существует много типов файлов в дополнение к стандартным файлам и каталогам. Обратите внимание, здесь под типом файла, мы не подразумеваем содержимое файла: в GNU/Linux и любой другой UNIX системах, файл, будь это текст, или PNG картинка, или двоичный файл, или что-то подобное, является только потоком байтов. Разделение файлов согласно их содержанию оставлено приложениям.
Различные Типы Файлов
Если вы помните, при вводе команды ls -l, символ перед правами доступа идентифицирует тип файла. Мы уже видели два типа файлов: обычный файл (-) и каталог (d). Блуждая по диску, вы также можете встретить и другие типы файлов:
- Символьные файлы: это любые специальные системные файлы (типа /dev/null, который мы уже обсуждали), или периферийные устройства (последовательные или параллельные порты), которые разрешают совместное использование своего содержания без буферизации (их значение не сохраняется в памяти). Такие файлы идентифицированы символом c.
- Файлы блочного доступа: Эти файлы — являются периферийными устройствами, и, в отличие от символьных файлов, их содержание — буферизируется . В эту категорию входят такие файлы, как например: жесткие диски, разделы на жестком диске, дисководы для гибких дискет, CD-ROM, и так далее. Примерами файлов блочного доступа могут служить файлы /dev/hda, /dev/sda5. В результате выполнения команды ls -l, они идентифицированы символомb.
- Символические ссылки: эти файлы очень широко используется в Mandrake Linux , например в процедуре запуска системы (см. главу Глава 11. Файлы Загрузки: init sysv). Название этих файлов отражает цель. Символические ссылки связаны с файлом символическим способом, что означает, что такие файлы могут указывать на существующий файл. Подробнее об этом позже в этой главе. Символические ссылки очень часто (и неправильно, что будет показано позже) называют “мягкими (soft) ссылками”. Такие файлы идентифицируются символом 'l'.
- Именованные каналы (pipes): очень похожи на каналы, используемые в shell, фактически разница только в том, что такие каналы имеют название. Именованные каналы очень редки. Маловероятно, что вы встретите хотя-бы один во время исследования файлового дерева. На всякий случай сообщаем что символ, идентифицирующий их — 'p'. Чтобы узнать больше об этом, взгляните сюда : “ Анонимные Каналы и Именованные Каналы”.
- Сокеты (socket: розетка, разъем): Этот тип файла для всех сетевых подключений. Только некоторые из них имеют названия. Нужно заметить, что сокеты бывают нескольких типов, но эта тема выходит за рамки данной книги. Такие файлы идентифицированы символом 's'.
Вот примеры каждого типа файлов:
$ ls -l /dev/null /dev/sda /etc/rc.d/rc3.d/S20random /proc/554/maps \ /tmp/ssh-queen/ssh-510-agent crw-rw-rw- 1 root root 1, 3 May 5 1998 /dev/null brw-rw- - - - 1 root disk 8, 0 May 5 1998 /dev/sda lrwxrwxrwx 1 root root 16 Dec 9 19:12 /etc/rc.d/rc3.d/ S20random -> ../init.d/random* pr- -r- -r- - 1 queen queen 0 Dec 10 20:23 /proc/554/maps| srwx- - - - - - 1 queen queen 0 Dec 10 20:08 /tmp/ssh-queen/ ssh-510-agent= $
Inode
Inode является, вместе с принципом “Все есть файл”, фундаментальной частью файловой системы UNIX. Слово “inode” это сокращение от Information NODE (Информационный УЗЕЛ).
Inodes хранятся на диске в inode table (таблице информационных узлов). Они существуют для всех типов файлов, которые могут храниться в файловой системе, и это включает каталоги, именованные каналы, файлы символьного режима и так далее. Что приводит к другому известному выражению: “inode есть файл”. При помощи inode UNIX идентифицирует файл уникальным способом.
Иначе говоря UNIX не идентифицирует файл по его имени . Вместо этого используется номер [18] из таблицы inode. Причина для этого заключается в том, что файл может иметь несколько названий, или вообще не иметь никакого названия. Имя файла в UNIX, является только указателем на inode. Такой указатель называется link (линк или ссылка). Давайте рассмотрим ссылки более подробно.
[18] Важно: обратите внимание, что номер inode уникален в пределах файловой системы , что означает, что inode с тем же самым номером может существовать на другой файловой системе. Это приводит к различию между дисковым inode и inode в оперативной памяти. Два дисковых inode могут иметь один и тот же номер, если они находятся на двух различных файловых системах. В оперативной памяти inode имеет уникальный номер на всю систему.
linux samba mail postfix FreeBSD Unix doc linux howto ALTLinux PHP faq bind sendmail apache iptables firewall kernel rpm apt-get Slackware openssh Cisco debian vmware GNU oracle sun awk /etc/ passwd linux установка учебник книга скачать
Строение Linux — часть 2. Принцип «всё есть файл», виды файлов.⚓︎
В первой части статьи речь была об общем строении системы. Так сказать, галопом по европам. А в следующих частях строение Linux будет описано подробнее. Каждая статья описывает только одну тему.
Для начала стоит написать о концепции «всё есть файл». Концепция была перенята разработчиками Linux из Unix. Это было сделано для предоставления простого доступа ко всем возможностям ОС, не разрабатывая отдельных костылей. Т.е., преимущество такого принципа в том, что не надо реализовывать отдельный API для каждого устр-ва, в результате чего с ним (с файлом) могут работать все стандартные программы и API-интерфейсы. В Linux есть корневая ФС (корневая файловая система), куда монтируются раздел жёсткого диска, где установлена система, другие разделы, флешки, диски, псевдо-ФС и пр. Посмотрите на файл /etc/os-release :
Самое яркое представление этого принципа — устройства. Просмотрите содержимое каталога /dev:
В этот каталог подключаются все устройства: флеш-карты, мыши, клавиатуры, микрофоны, жёсткие диски и пр.
А теперь просмотрите информацию о каком-нибудь файле в /dev :
В этом файле находятся двоичные данные, поэтому открыть его в каком-то текстовом редакторе бесмыссленно.
Однако, самое главное достоинство Linux в том, что и в обычном файле можно создать файловую систему заместо содержимого файла. Например, тот же файл подкачки /swapfile . Это файл, но с ФС swap .
Все конфиги, находящиеся в директориях /etc , ~/.local , ~/.config — тоже файлы.
Типы файлов⚓︎
- Обыкновенные, которые используются для хранения информации;
- Специальные (для туннелей и устройств);
- Директории (их ещё называют папками или каталогами).
С обычными файлами пользователь работает чаще всего. Это документы, текстовые файлы, музыка, видео и пр.
Для того чтобы просмотреть эти файлы, выполните:
Значение команды⚓︎
- ls — просматривает каталог, а ключ -l добавляет отображение прав на файл. /etc замените на нужную директорию.
- grep «^-» — так как «обычные» файлы обозначаются чертой (в первой колонке вывода ls , где отображаются права на файл), то эта команда выведет только эти файлы по маске ^- .
По поводу специальных файлов. Они обеспечивают обмен информации с ядром, работу с устр-вами и пр. Собственно, делятся ещё на несколько видов:
- Символьные файлы — любые специальные системные, например /dev/null , или периферийные устр-ва (последовательные/параллельные порты). Такие файлы идентифицированы символом c .
- Блочные — периферийные устр-ва, но в отличие от предыдущего типа, содержание блочных файлов буферизируется. Эти файлы идентифицированы символом b .
- Символические ссылки (симлинки) — указывают на другие файлы по их имени, указывают и на другие файлы, в т.ч. каталоги. Обозначены символом l . В выводе команды ls -l /путь/до/директории |grep «^l» можно увидеть, на какой файл ссылаются симлинки — в последней колонке название имеет следующий вид: НАЗВАНИЕ ФАЙЛА -> НА ЧТО ССЫЛАЕТСЯ
- Туннели (каналы/именованные каналы) — очень похожи на туннели из Shell , но разница в том, что именованные каналы имеют название. Они очень редки. Обозначены символом p .
Информация о файлах⚓︎
LSOF⚓︎
Список всех открытых файлов можно просмотреть с помощью команды lsof — ListOpenFiles. Эта информация поможет узнать о многом происходящем в системе, об устройстве и работе Linux, а также решить проблемы, например, когда вы не можете размонтировать диск из-за того, что устройство используется, но вы не можете найти, какой именно программой.
Вывод lsof состоит из нескольких колонок с информацией:
- COMMAND — имя команды, которая открыла или использует файл;
- PID — PID процесса;
- TID — идентификационный номер задачи (потока). Пустой столбец означает, что это не задача, а процесс;
- TASKCMD — имя команды задачи. Обычно имеет то же самое название, что и процесс, названный в столбце COMMAND , но некоторые реализации задач (например, Linux) позволяют задаче изменить имя своей команды;
- USER — имя пользователя, которому соответствует процесс, либо тот пользователь, которому принадлежит директория /proc , откуда lsof берёт информацию о процессе;
- FD — показывает файловый дескриптор файла;
- TYPE — тип узла, связанного с файлом;
- DEVICE — содержит номера устройств, разделённые запятыми, для специальных символьных, специальных блочных, обычных файлов, каталогов или NFS. Также может отображаться базовый адрес или имя устройства с сокетом Linux AX.25;
- SIZE/OFF — размер файла/смещение файла в байтах;
- NODE — показывает номер узла локального файла или номер узла NFS-файла на хосте сервера или тип интернет-протокола. Может отображаться STR для потока, IRQ или номер инода устройства с сокетом Linux AX.25;
- NAME — имя точки монтирования и файловой системы, в которой находится файл;
Опции lsof⚓︎
- -u — список файлов, открытых конкретным пользователем. Например, список открытых фалов пользователем liveuser :
- -U — вывести все файлы сокетов домена Unix
- +d — выяснить, какие папки и файлы открыты в некоей директории (но не в её поддиректориях): lsof +d /usr/bin
- -d — задать список дескрипторов файлов, разделённых запятой, которые надо включить в вывод или исключить из него
Example
Список исключается из вывода, если все записи в наборе начинаются со знака ^ . Список будет включён в вывод, если ни одна запись не начинается с ^ . Смешивание записей разных видов не разрешается.
В списке может присутствовать диапазон номеров дескрипторов файлов при условии, что ни один из его членов не пуст, оба члена являются числами, и завершающий член больше начального — то есть: «0-7» или «3-10».
Диапазоны могут быть использованы для исключения записей из вывода, если перед ними стоит префикс ^ , то есть — ^0-7 исключает все дескрипторы с 0 по 7.
- -p — вывести все файлы, открытые процессом с указанным при вызове команды PID
- И другие ключи. Перечислять их всех я не вижу смысла. Зайдите сюда, чтобы узнать больше. И, конечно же, man lsof .