- СИНТАКСИС
- ОПИСАНИЕ
- ОПЦИИ
- AFS
- БЕЗОПАСНОСТЬ
- ВЫВОД
- БЛОКИРОВКИ
- ВЫВОД ДЛЯ ДРУГИХ ПРОГРАММ
- БЛОКИРОВКИ И ВРЕМЕННЫЕ ОГРАНИЧЕНИЯ
- ИЗБЕЖАНИЕ БЛОКИРОВОК ЯДРА
- АЛЬТЕРНАТИВНЫЕ НОМЕРА УСТРОЙСТВ
- КЭШ ИМЕН КЕРНЕЛЯ
- ФАЙЛ КЭША УСТРОЙСТВ
- ПРАВА ДОСТУПА LSOF, КОТОРЫЕ ВЛИЯЮТ НА ДОСТУП К ФАЙЛАМ КЭША УСТРОЙСТВ
- ПУТЬ К ФАЙЛУ КЭША УСТРОЙСТВ, УКАЗАННЫЙ В ОПЦИИ -D
- ПУТЬ К КЭШУ УСТРОЙСТВ ИЗ ПЕРЕМЕННОЙ ОКРУЖЕНИЯ
- СИСТЕМНЫЙ ПУТЬ К КЭШУ УСТРОЙСТВ
- ЛИЧНЫЙ ПУТЬ К КЭШУ УСТРОЙСТВ (ПО УМОЛЧАНИЮ)
- ИЗМЕНЕННЫЙ ПУТЬ К ЛИЧНОМУ КЭШУ УСТРОЙСТВ
- ДИАГНОСТИКА
- ПРИМЕРЫ
- ОШИБКИ
- ОКРУЖАЮЩАЯ СРЕДА
- ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
- ФАЙЛЫ
- АВТОРЫ
- РАСПРОСТРАНЕНИЕ
- СМ. ТАКЖЕ
lsof - список открытых файлов
СИНТАКСИС
lsof [ -?abChHlnNOPQRtUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [ +|-D D ] [ +|-e s ] [ +|-E ]
[ +|-f [cfgGn] ] [ -F [f] ] [ -g [s] ] [ -i [i] ] [ -k k ] [ -K k ] [ +|-L [l] ] [ +|-m m ] [
+|-M ] [ -o [o] ] [ -p s ] [ +|-r [t[m<fmt>]] ] [ -s [p:s] ] [ -S [t] ] [ -T [t] ] [ -u s ] [
+|-w ] [ -x [fl] ] [ -z [z] ] [ -Z [Z] ] [ -- ] [имена]
ОПИСАНИЕ
Lsof, версия 4.99.4, выводит в стандартный поток информации о файлах, открытых процессами, для следующих UNIX-диалектов:
Apple Darwin 9, Mac OS X 10, macOS 11 и выше
FreeBSD 8.2 и выше
Linux 2.1.72 и выше
NetBSD 1.2 и выше
OpenBSD 7.2 и выше
Solaris 9, 10 и 11 и выше
OpenIndiana 5.11 и выше
(См. раздел DISTRIBUTION в этой странице руководства для получения информации о том, как получить последнюю версию lsof.)
Открытый файл может быть обычным файлом, каталогом, блочным специальным файлом, символьным специальным файлом, исполняемым текстовым файлом, библиотекой, потоком или сетевым файлом (интернет-сокет, NFS-файл или UNIX-доменный сокет). Определенный файл или все файлы в файловой системе могут быть выбраны по пути.
Вместо форматированного отображения lsof выдает вывод, который может быть обработан другими программами. См. описание опции -F и раздел OUTPUT FOR OTHER PROGRAMS для получения дополнительной информации.
В дополнение к созданию единого списка вывода, lsof будет работать в режиме повтора. В режиме повтора он будет выдавать вывод, задерживаться, а затем повторять операцию вывода, пока не будет остановлен с помощью сигнала прерывания или выхода. См. описание опции +|-r [t[m<fmt>]] для получения дополнительной информации.
ОПЦИИ
При отсутствии каких-либо опций lsof перечисляет все открытые файлы, принадлежащие всем активным процессам.
Если указана какая-либо опция запроса списка, другие запросы списка должны быть указаны явно, например, если указана опция -U для перечисления UNIX-доменных сокетов, NFS-файлы не будут перечислены, если только не указана также опция -N; или, если список пользователей указан с помощью опции -u, UNIX-доменные сокеты, принадлежащие пользователям, не входящим в список, не будут перечислены, если только не указана также опция -U.
Обычно опции списка, которые указаны явно, объединяются оператором ИЛИ, то есть указание опции -i без адреса и опции -ufoo приводит к списку всех сетевых файлов ИЛИ файлов, принадлежащих процессам, принадлежащим пользователю «foo». Исключения составляют:
1 имя пользователя или идентификатор пользователя (UID), указанные с помощью опции -u, с префиксом `^` (отрицание);
2 идентификатор процесса (PID), указанный с помощью опции -p, с префиксом `^` (отрицание);
3 идентификатор группы процессов (PGID), указанный с помощью опции -g, с префиксом `^` (отрицание).
4 команда `^` (отрицание), указывается с помощью опции -c;
5 имена состояний протоколов TCP или UDP с отрицанием (`^`), указываются с помощью опции -s [p:s].
Поскольку они представляют исключения, они применяются без использования логических операций ИЛИ или И и действуют до применения каких-либо других критериев отбора.
Опция -a может использоваться для применения логической операции И к отборам. Например, указание -a, -U и -ufoo создаст список только UNIX-сокетов, принадлежащих процессам, принадлежащим пользователю `foo`.
Внимание: опция -a приводит к тому, что все опции выбора списка объединяются с помощью логической операции И; ее нельзя использовать для применения логической операции И к выбранным парам опций выбора, помещая ее между ними, даже если такое размещение допустимо. В любом месте, где размещена -a, применяется логическая операция И ко всем опциям выбора.
Элементы одного и того же набора отбора — имена команд, дескрипторы файлов, сетевые адреса, идентификаторы процессов, идентификаторы пользователей, имена зон, контексты безопасности — объединяются в один набор, к которому применяется логическая операция ИЛИ, и применяются до того, как результат участвует в логической операции И. Таким образом, например, указание -_, -_, -a и -ufff,ggg выберет список файлов, которые принадлежат либо пользователю fff, ИЛИ ggg, И имеют сетевые подключения либо к хосту aaa.bbb, ИЛИ ccc.ddd.
Опции могут быть сгруппированы вместе после одного префикса, например, набор опций '-a -b -C' может быть представлен как -abC. Однако, поскольку значения являются необязательными после +|-f, -F, -g, -i, +|-L, -o, +|-r, -s, -S, -T, -x и -z, если у вас нет значений для них, будьте осторожны, чтобы следующий символ не был неоднозначным. Например, -Fn может представлять опции -F и -n, или это может представлять символ идентификатора поля n, следующий за опцией -F. Когда возможна неоднозначность, начните новую опцию с символа '-' — например, '-F -n'. Если следующая опция является именем файла, добавьте после неоднозначной опции '-' — например, '-F -- name'.
К группе опций можно применить префикс '+' или '-'. Опции, которые не имеют разных значений для каждого префикса, например, -i, могут быть сгруппированы под любым из префиксов. Таким образом, например, '+M -i' можно представить как '+Mi', и группа имеет то же значение, что и отдельные опции. Будьте осторожны при группировке префиксов, когда одна или несколько опций в группе имеют разные значения при использовании разных префиксов, например, +|-M; '-iM' не является тем же запросом, что и '-i +M'. Если есть сомнения, используйте отдельные опции с соответствующими префиксами.
-? -h Эти две эквивалентные опции выбирают список справки. Lsof отображает сокращенную форму этого вывода, когда обнаруживает ошибку в опциях, предоставленных пользователем, после отображения сообщений, объясняющих каждую ошибку. (Экранируйте символ `?` в соответствии с требованиями вашей оболочки.)
-a приводит к тому, что опции выбора списка объединяются с помощью логической операции И, как описано выше.
-A A доступна в системах, настроенных для AFS, у которых код ядра AFS реализован с помощью динамических модулей. Она позволяет пользователю lsof указать A в качестве альтернативного файла списка имен, в котором можно найти адреса ядра динамических модулей. См. раздел часто задаваемых вопросов lsof (в разделе часто задаваемых вопросов указано его местоположение) для получения дополнительной информации о динамических модулях, их символах и о том, как они влияют на lsof.
-b заставляет lsof избегать функций ядра, которые могут приводить к блокировке: `lstat(2)`, [readlink]({filename}../../readlink)(2) и [stat]({filename}../../stat)(2).
Смотрите разделы «БЛОКИРОВКИ И ТАЙМ-АУТЫ» и «ИЗБЕГАНИЕ БЛОКИРОВОК ЯДРА» для получения информации об использовании этой опции.
-c c выбирает для отображения файлы, используемые процессами, выполняющими команду, начинающуюся с символов c. Можно указать несколько команд, используя несколько опций -c. Они объединяются в одно логическое ИЛИ перед участием в логическом И.
Если c начинается с символа `^`, то следующие символы указывают имя команды, процессы которой следует игнорировать (исключать).
Если c начинается и заканчивается символом `/`, символы между слешами интерпретируются как регулярное выражение. Метасимволы оболочки в регулярном выражении необходимо заключать в кавычки, чтобы предотвратить их интерпретацию оболочкой. Закрывающему слешу могут следовать следующие модификаторы:
b регулярное выражение является базовым.
i игнорировать регистр букв.
x регулярное выражение является расширенным (по умолчанию).
См. раздел часто задаваемых вопросов (FAQ) lsof (в разделе FAQ указано его расположение) для получения дополнительной информации о базовых и расширенных регулярных выражениях.
Сначала проверяется простое определение команды. Если эта проверка не удается, применяется регулярное выражение команды. Если простая проверка команды выполнена успешно, проверка регулярного выражения команды не выполняется. Это может привести к появлению сообщений типа «не найдена команда для регулярного выражения:», когда указана опция lsof -V.
+c w определяет максимальное количество начальных символов имени команды, предоставляемого UNIX-диалектом, которое будет выводиться в столбце «COMMAND». (По умолчанию в lsof используется значение 9).
Обратите внимание, что многие UNIX-диалекты не предоставляют lsof все символы имени команды в файлах и структурах, из которых lsof получает имя команды. Часто диалекты ограничивают количество символов, предоставляемых в этих источниках. Например, Linux 2.4.27 и Solaris 9 ограничивают длину имени команды до 16 символов.
Если w равно нулю ('0'), будут выведены все символы команды, предоставляемые UNIX-диалектом.
Если w меньше длины заголовка столбца «COMMAND», оно будет увеличено до этой длины.
-C отключает вывод любых компонентов пути из кэша имен ядра. См. раздел «КЭШ ИМЕН ЯДРА» для получения дополнительной информации.
+d s заставляет lsof искать все открытые экземпляры каталога s и файлы и каталоги, которые он содержит на верхнем уровне. Опция +d не выполняет обход дерева каталогов, начиная с s.
Опция +D D может быть использована для запроса полного обхода дерева каталогов, начиная с каталога D.
Обработка опции +d не следует за символическими ссылками внутри s, если также не указаны опции -x или -x l. Кроме того, она не выполняет поиск открытых файлов в точках монтирования файловой системы в подкаталогах s, если также не указаны опции -x или -x f.
Примечание: полномочия пользователя, использующего эту опцию, ограничивают поиск файлами, которые пользователь имеет право просматривать с помощью системной функции stat(2).
-d s указывает список дескрипторов файлов (FD), которые следует исключить или включить в список вывода. Дескрипторы файлов указываются в виде разделенного запятыми набора s, например, cwd,1,3, ^6,^2. (В наборе не должно быть пробелов).
Список является списком исключений, если все элементы набора начинаются с символа `^`. Он является списком включений, если ни один элемент не начинается с `^`. Смешанные списки не допускаются.
Диапазон номеров дескрипторов файлов может быть указан в наборе, если ни один из элементов не пуст, оба элемента являются числами, и конечный элемент больше начального, например, 0-7 или 3-10. Диапазоны могут быть указаны для исключения, если они имеют префикс `^`, например, ^0-7 исключает все дескрипторы файлов от 0 до 7.
Несколько номеров дескрипторов файлов объединяются в один набор, связанный оператором OR, прежде чем участвовать в выборе опции AND.
Когда в наборе присутствуют элементы исключения и включения, lsof сообщает об этом как об ошибке и завершает работу с ненулевым кодом возврата.
См. описание значений дескрипторов файлов (FD) в разделе «ВЫВОД» для получения дополнительной информации об именах дескрипторов файлов.
fd — это псевдоним дескриптора файла, используемый для указания всего диапазона возможных номеров дескрипторов файлов. fd не отображается в столбце FD в выводе.
+D D заставляет lsof искать все открытые экземпляры каталога D и все файлы и каталоги, которые он содержит, до полной глубины.
Обработка опции +D не следует за символическими ссылками внутри D, если также не указаны опции -x или -x l. Кроме того, она не выполняет поиск открытых файлов в точках монтирования файловой системы в подкаталогах D, если также не указаны опции -x или -x f.
Примечание: полномочия пользователя, использующего эту опцию, ограничивают поиск файлами, которые пользователь имеет право просматривать с помощью системной функции stat(2).
Дополнительное примечание: lsof может обрабатывать эту опцию медленно и требовать большого количества динамической памяти. Это связано с тем, что она должна пройти по всему дереву каталогов, начиная с D, вызывая stat(2) для каждого файла и каталога, создавая список всех найденных файлов и выполняя поиск совпадений с каждым открытым файлом в этом списке. Когда каталог D большой, эти шаги могут занять много времени, поэтому используйте эту опцию с осторожностью.
-D D указывает lsof использовать файл кэша устройств. Использование этой опции иногда ограничено. См. раздел «ФАЙЛ КЭША УСТРОЙСТВ» и следующие за ним разделы для получения дополнительной информации об этой опции.
-D должна следовать за функцией; за буквой функции может опционально следовать
имя пути. Lsof распознает следующие буквы функций:
? - сообщает об путях к файлам кэша устройств
b - создает файл кэша устройств
i - игнорирует файл кэша устройств
r - считывает файл кэша устройств
u - считывает и обновляет файл кэша устройств
Функции b, r и u, используемые вместе с именем пути, иногда ограничены. Когда эти функции ограничены, они не будут отображаться в описании опции -D, которая используется вместе с опциями -h или -?. См. раздел «ФАЙЛ КЭША УСТРОЙСТВ» и следующие за ним разделы для получения дополнительной информации об этих функциях и о том, когда они ограничены.
Функция ? сообщает о путях, которые lsof может использовать для файла кэша устройств для чтения и записи, об именах любых переменных среды, значения которых lsof будет проверять при
формировании пути к файлу кэша устройств, и о формате личного файла кэша устройств.
(Экранируйте символ ?, как это требуется вашей оболочкой.)
Если доступны, функции b, r и u могут использоваться с путем к файлу кэша устройств. Стандартное значение по умолчанию — .lsof_hostname в домашнем каталоге реального идентификатора пользователя, который выполняет lsof, но это могло быть изменено при настройке и компиляции lsof. (Вывод опций -h и -? показывает текущий префикс по умолчанию, например, ``.lsof''.) Суффикс, hostname, — это первый компонент имени хоста, возвращаемый gethostname(2).
Если доступна, функция b указывает lsof создать новый файл кэша устройств по пути по умолчанию или по указанному пути.
Функция i указывает lsof игнорировать файл кэша устройств по умолчанию и получать информацию об устройствах непосредственно из ядра.
Функция r указывает lsof считать файл кэша устройств по пути по умолчанию или по указанному пути, но не позволяет создавать новый файл кэша устройств, если он не существует или имеет неправильную структуру. Функция r, когда она указана без имени пути, предотвращает обновление lsof некорректного или устаревшего файла кэша устройств или создание нового файла вместо него. Функция r всегда доступна, когда она указана без аргумента имени пути; она может быть ограничена разрешениями процесса lsof.
Если доступна, функция u указывает lsof считать файл кэша устройств по пути по умолчанию или по указанному пути, если это возможно, и перестраивать его, если это необходимо. Это функция файла кэша устройств по умолчанию, когда опция -D не указана.
+|-e s исключает файловую систему, путь к которой указан в s, из выполнения
kernel-функций, которые могут приводить к блокировке. Опция +e исключает [stat]({filename}../../stat)(2), lstat(2) и большинство [readlink]({filename}../../readlink)(2)
kernel-функций. Опция -e исключает только [stat]({filename}../../stat)(2) и lstat(2) kernel-функции.
Несколько файловых систем могут быть указаны с помощью отдельных спецификаций +|-e, и для каждой из них может быть исключена или не исключена функция [readlink]({filename}../../readlink)(2).
Эта опция в настоящее время реализована только для Linux.
ВНИМАНИЕ: эту опцию легко можно применить не к целевой файловой системе, поскольку она использует имя пути, а не более надежные номера устройства и inode.
(Номера устройства и inode получаются с помощью потенциально блокирующего системного вызова stat(2) и, следовательно, недоступны, но см. опцию +|-m m в качестве возможного альтернативного способа указания номеров устройств.) Используйте эту опцию с особой осторожностью и полностью укажите имя пути файловой системы, которую необходимо исключить.
При отображении открытых файлов в исключенных файловых системах может быть невозможно получить всю их информацию. Поэтому некоторые столбцы информации будут пустыми, символы ``UNKN'' будут предшествовать значениям в столбце TYPE, а применимая опция исключения будет добавлена в скобках в конце столбца NAME. (Некоторая информация о номерах устройств может быть предоставлена с помощью опции +|-m m.)
+|-E +E указывает, что для Linux-каналов, Linux-UNIX-сокетов, Linux-INET(6)-сокетов, закрытых на локальном хосте, Linux-псевдотерминалов, реализации POSIX-очередей сообщений в Linux и Linux-eventfd должна отображаться информация о конечных точках, а файлы конечных точек также должны отображаться.
Примечание 1: информация о файловых конечных точках UNIX-сокета доступна только в том случае, если в строке «включенные функции» вывода -v содержится uxsockept, а информация о конечных точках псевдотерминала доступна только в том случае, если в строке «включенные функции» содержится ptyept.
Примечание 2: информация о файловых конечных точках POSIX-очереди сообщений доступна только в том случае, если файловая система mqueue смонтирована.
Информация о конечной точке канала отображается в столбце NAME в форме ``PID,cmd,FDmode'', где PID — идентификатор процесса конечной точки; cmd — команда процесса конечной точки; FD — дескриптор файла конечной точки; и mode — режим доступа файла конечной точки.
Информация о конечной точке псевдотерминала отображается в столбце NAME в форме
->/dev/ptsmin PID,cmd,FDmode'' илиPID,cmd,FDmode''. Первая форма предназначена для главного
устройства; вторая — для ведомого устройства. min — это номер младшего устройства ведомого устройства;
а PID, cmd, FD и mode такие же, как и для информации о конечной точке канала. Обратите внимание: информация о конечной точке псевдотерминала доступна только в том случае, если в строке «включенные функции» вывода -v содержится ptyept. Кроме того, эта функция работает в ядрах Linux версии 4.13.0 и выше.
Информация о файле UNIX-сокета отображается в столбце NAME в форме
``type=TYPE ->INO=INODE PID,cmd,FDmode'', где TYPE — тип сокета; INODE — номер inode подключенного сокета; а PID, cmd, FD и mode такие же, как и для информации о конечной точке канала. Обратите внимание: информация о файле UNIX-сокета доступна только в том случае, если в строке «включенные функции» вывода -v содержится uxsockept.
Информация о файле сетевого сокета INET, используемого в качестве конечной точки, вставляется в значение столбца NAME в формате
`` -> PID,cmd,FDmode'', где PID, cmd, FD и mode имеют те же значения, что и для информации о конечной точке канала. Информация о конечной точке доступна только в том случае, если сокет используется для локального межпроцессного взаимодействия (IPC), и оба конца привязаны к одному и тому же локальному IPv4 или IPv6 адресу.
Информация о файле очереди сообщений POSIX отображается в столбце NAME в том же формате, что и для канала.
Информация о конечной точке eventfd отображается в столбце NAME в том же формате, что и для канала. Эта функция работает в ядрах Linux версии 5.2.0 и выше.
В столбце NAME файла может появиться несколько экземпляров этой информации.
-E указывает, что файлы, поддерживающие конечные точки, должны отображаться с информацией о конечных точках, но не сами файлы конечных точек.
+|-f [cfgGn]
Опция `f` сама по себе уточняет, как следует интерпретировать аргументы путей. При использовании вместе с `c`, `f`, `g`, `G` или `n` в любой комбинации, она указывает, что вывод информации о структуре файлов ядра должен быть включен (`+`) или отключен (`-`).
Обычно аргумент пути считается именем файловой системы, если он соответствует имени смонтированной директории, сообщаемой командой [mount]({filename}../../mount)(8), или если он представляет собой блочное устройство, указанное в выводе команды mount и связанное с именем смонтированной директории. Когда указана опция +f, все аргументы путей будут рассматриваться как имена файловых систем, и lsof выдаст ошибку, если какой-либо из них не будет соответствовать. Это может быть полезно, например, когда имя файловой системы (устройство, на котором она смонтирована) не является блочным устройством. Это происходит для некоторых файловых систем CD-ROM.
Когда указана опция -f, все аргументы путей будут рассматриваться как простые файлы. Таким образом, например, аргументы ``-f -- /'' указывают lsof искать открытые файлы с путем `/'`, а не все открытые файлы в файловой системе `/' (корневой).
Будьте осторожны и убедитесь, что +f и -f правильно завершены и не за ними не следует символ (например, имя файла или файловой системы), который может быть воспринят как параметр. Например, используйте ``--'' после +f и -f, как в этих примерах.
$ lsof +f -- /file/system/name
$ lsof -f -- /file/name
Вывод информации из структур файлов ядра, запрошенный с помощью опции +f [cfgGn], обычно отключен и недоступен полностью или частично для некоторых диалектов, например, для ядер Linux, основанных на /proc, версии ниже 2.6.22. Когда префикс к `f` является знаком плюс (`+`), эти символы запрашивают информацию о структуре файла:
c использование структуры файла (не для Linux)
f адрес структуры файла (не для Linux)
g сокращенные флаги файла (Linux 2.6.22 и выше)
Сокращ. Флаг в коде C (см. open(2))
W O_WRONLY
RW O_RDWR
CR O_CREAT
EXCL O_EXCL
NTTY O_NOCTTY
TR O_TRUNC
AP O_APPEND
ND O_NDELAY
SYN O_SYNC
ASYN O_ASYNC
DIR O_DIRECT
DTY O_DIRECTORY
NFLK O_NOFOLLOW
NATM O_NOATIME
DSYN O_DSYNC
RSYN O_RSYNC
LG O_LARGEFILE
CX O_CLOEXEC
TMPF O_TMPFILE
G флаги файла в шестнадцатеричном формате (Linux 2.6.22 и выше)
n адрес узла структуры файла (не Linux)
Если префикс — минус (-), указанные символы отключают вывод соответствующих
значений.
Адреса структур файлов, количество использований, флаги и адреса узлов могут использоваться для более легкой идентификации идентичных файлов, унаследованных дочерними процессами, и идентичных файлов, используемых разными процессами. Вывод столбцов lsof можно отсортировать по столбцам, содержащим эти значения, и вывести для идентификации идентичного использования файлов, или вывод полей lsof можно обработать с помощью скрипта AWK или Perl, или с помощью программы на C.
-F f указывает список символов `f`, который выбирает поля для вывода для обработки другой программой, и символ, которым заканчивается каждое поле вывода. Каждое поле для вывода указывается одним символом в `f`. Символ-разделитель полей по умолчанию — NL, но его можно изменить на NUL (000). См. раздел «ВЫВОД ДЛЯ ДРУГИХ ПРОГРАММ» для получения описания символов идентификации полей и процесса вывода полей.
Когда список символов выбора полей пуст, выбираются все стандартные поля (за исключением поля необработанного устройства, поля контекста безопасности и поля зоны в целях совместимости) и используется символ-разделитель полей NL.
Когда список символов выбора полей содержит только ноль (0), выбираются все поля (за исключением поля необработанного устройства в целях совместимости), и используется символ-разделитель полей NUL.
Другие комбинации полей и соответствующих им символов-разделителей полей должны быть заданы с помощью явных записей в f, как описано в разделе «ВЫВОД ДЛЯ ДРУГИХ ПРОГРАММ».
Когда символ выбора поля идентифицирует элемент, который lsof обычно не выводит, например,
PPID, выбранный с помощью -R - (указание символа поля), например, -FR, также выбирает вывод этого элемента.
Когда список символов выбора полей содержит единственный символ ?, lsof отобразит список помощи с символами идентификации полей. (Экранируйте символ ?, как того требует ваша оболочка.)
-g [s] исключает или выбирает вывод файлов для процессов, идентификаторы групп процессов (PGID) которых входят в разделенный запятыми набор `s`, например, `"123"` или `"123,^456"`. (В наборе не должно быть пробелов.)
Номера PGID, начинающиеся с ^ (отрицание), представляют собой исключения.
Множественные номера PGID объединяются в единый набор, объединенный оператором OR, прежде чем участвовать в выборе с использованием оператора AND. Однако исключения PGID применяются без использования операторов OR или AND и вступают в силу до применения других критериев выбора.
Опция -g также включает вывод номеров PGID. Если указано без набора PGID, то это все, что она делает.
-H указывает lsof выводить размеры в удобочитаемом формате, например, 123.4K 456.7M.
-i [i] выбирает вывод файлов, любой из интернет-адресов которых соответствует адресу, указанному в `i`. Если адрес не указан, эта опция выбирает вывод всех интернет- и 25-файлов (HP-UX).
Если указаны -i4 или -i6 без последующего адреса, отображаются только файлы указанной версии IP, IPv4 или IPv6. (Указание IPv6 допускается только в том случае, если диалект поддерживает IPv6, что указывается в выходных данных lsof с параметрами -h или -? как [46] и IPv[46]). Последовательное указание -i4, за которым следует -i6, эквивалентно указанию -i, и наоборот. Указание -i4 или -i6 после -i эквивалентно указанию -i4 или -i6 по отдельности.
Несколько адресов (до 100) могут быть указаны с помощью нескольких опций -i. Они объединяются в единый набор, используемый в логическом выражении И с другими опциями выбора.
Интернет-адрес указывается в следующем формате (элементы в квадратных скобках являются необязательными):
[46][протокол][@имя_хоста|адрес_хоста][:сервис|порт]
где:
46указывает версию IP, IPv4 или IPv6,
которая применяется к следующему адресу.
'6' может быть указано только в том случае,
если UNIX-диалект поддерживает IPv6. Если ни
'4', ни '6' не указаны, следующий адрес
применяется ко всем версиям IP.
протокол — имя протокола — TCP, UDP или UDPLITE.
имя_хоста — имя хоста в Интернете. Если не
указана конкретная версия IP, открытые сетевые
файлы, связанные с именами хостов всех версий,
будут выбраны.
адрес_хоста — числовой IPv4-адрес в десятичном
формате или числовой IPv6-адрес в шестнадцатеричном
формате, заключенный в квадратные скобки, если
UNIX-диалект поддерживает IPv6. При выборе
версии IP можно указывать только ее числовые
адреса.
сервис — имя из `/etc/services`, например, smtp,
или список имен.
порт — номер порта или список номеров.
Опции IPv6 можно использовать только в том случае,
если UNIX-диалект поддерживает IPv6. Чтобы узнать,
поддерживает ли диалект IPv6, запустите `lsof` и
укажите параметры `-h` или `-?` (справка). Если в
отображаемом описании параметра `-i` содержатся
`[46]` и `IPv[46]`, IPv6 поддерживается.
IPv4-имена хостов и адреса нельзя указывать, если
выбор сетевых файлов ограничен IPv6 с помощью `-i 6`.
IPv6-имена хостов и адреса нельзя указывать, если
выбор сетевых файлов ограничен IPv4 с помощью `-i 4`.
Когда открытый IPv4-сетевой файл сопоставлен с IPv6-адресом, тип открытого файла будет IPv6, а не IPv4, и он будет выбран по параметру '6', а не '4'.
Должен быть указан как минимум один компонент адреса: 4, 6, протокол, имя_хоста, адрес_хоста или сервис. Символ `@`, начинающий спецификацию хоста, всегда обязателен, как и символ `:`, начинающий спецификацию порта. Укажите либо имя хоста, либо адрес хоста. Укажите либо список имен сервисов, либо список номеров портов. Если указан список имен сервисов, протокол также может потребоваться, если номера портов TCP, UDP и UDPLITE для имени сервиса различаются. Используйте любой регистр — строчный или прописной — для протокола.
Имена служб и номера портов могут быть объединены в список, элементы которого разделены запятыми, а числовые диапазоны — знаками минус. Не должно быть встроенных пробелов, и все имена служб должны относиться к указанному протоколу. Поскольку имена служб могут содержать встроенные знаки минус, начальный элемент диапазона не может быть именем службы; однако он может быть номером порта.
Вот несколько примеров адресов:
-i6 - только IPv6
TCP:25 - TCP и порт 25
@1.2.3.4 - IPv4-адрес 1.2.3.4
@[3ffe:1ebc::1]:1234 - IPv6-адрес
3fe:1ebc::1, порт 1234
UDP:who - UDP, служба who, порт
_:513 - TCP, порт 513 и имя хоста lsof.itap
tcp@foo:1-10,smtp,99 - TCP, порты с 1 по 10, имя службы smtp, порт 99, имя хоста foo
tcp@bar:1-smtp - TCP, порты с 1 по smtp, хост bar
:time - либо TCP, UDP или UDPLITE, служба time, порт
-K k - выбирает список задач (потоков) процессов, в тех диалектах, где поддерживается отчетность о задачах (потоках). (Если в выходных данных справки, то есть в выходных данных опций -h или -?, отображается эта опция, то отчетность о задачах (потоках) поддерживается диалектом.)
Если за -K следует значение k, оно должно быть i. Это приводит к тому, что lsof игнорирует задачи, особенно в случае по умолчанию, когда не указаны другие опции.
Когда -K и -a указаны вместе в Linux, и задачи основного процесса выбираются другими опциями, основной процесс также будет перечислен, как если бы это была задача, но без идентификатора задачи. (См. описание столбца TID в разделе OUTPUT.)
В FreeBSD, где поддерживаются потоки, все потоки будут перечислены с их идентификаторами.
В целом потоки и задачи наследуют файлы вызывающего процесса, но могут закрыть некоторые и открыть другие, поэтому lsof всегда сообщает обо всех открытых файлах потоков и задач.
-k k - указывает файл со списком имен ядра, k, вместо /vmunix, /mach и т. д. -k недоступен в AIX на IBM RISC/System 6000.
-l - отключает преобразование номеров идентификаторов пользователей в имена для входа в систему. Также полезно, когда поиск имени для входа в систему работает неправильно или медленно.
+|-L [l] - включает (`+`) или отключает (`-`) список счетчиков ссылок на файлы, где они доступны, например, они недоступны для сокетов или большинства FIFO и каналов.
Когда +L указан без последующего числа, будут перечислены все счетчики ссылок. Когда -L указан (по умолчанию), счетчики ссылок не будут перечислены.
Когда +L сопровождается числом, будут перечислены только файлы, имеющие счетчик ссылок, меньший этого числа. (После -L не может следовать число.) Спецификация в форме +L1 выберет открытые файлы, которые были удалены. Спецификация в форме +aL1 <file_system> выберет удаленные открытые файлы в указанной файловой системе.
Для других сравнений счетчиков ссылок используйте вывод полей (-F) и скрипт или программу для последующей обработки.
+|-m m - указывает альтернативный файл памяти ядра или активирует обработку дополнительных таблиц монтирования.
Опция -m m указывает файл памяти ядра, m, вместо /dev/kmem или /dev/mem, например, файл дампа памяти.
Опция +m указывает, что файл дополнения для монтирования должен быть записан в стандартный вывод. Все остальные опции игнорируются.
В файле дополнения для монтирования будет строка для каждой смонтированной файловой системы, содержащая каталог смонтированной файловой системы, за которой следует один пробел, а затем номер устройства в шестнадцатеричном формате «0x», например:
/ 0x801
Lsof может использовать файл дополнения для монтирования, чтобы получить номера устройств для файловых систем, когда он не может получить их с помощью stat(2) или lstat(2).
Опция +m m указывает, что m является файлом дополнения для монтирования.
Примечание: опции +m и +m m доступны не для всех поддерживаемых диалектов. Проверьте вывод опций lsof -h или -?, чтобы узнать, доступны ли опции +m и +m m.
+|-M Включает (+) или отключает (-) отображение регистраций portmapper для локальных TCP, UDP и UDPLITE портов, где поддерживается отображение portmapper. (См. последний абзац описания этой опции для информации о том, где поддерживается отображение регистраций portmapper.)
Режим отображения по умолчанию задается при сборке lsof с помощью макроса HASPMAPENABLED в файле machine.h для данного диалекта; lsof распространяется с отключенным макросом HASPMAPENABLED, поэтому отображение portmapper отключено по умолчанию и должно быть запрошено с помощью +M. Указание опции lsof -h или -? сообщит о режиме по умолчанию. Отключение регистрации portmapper, когда она уже отключена, или включение ее, когда она уже включена, допустимо. Когда отображение регистраций portmapper включено, lsof отображает регистрацию portmapper (если она есть) для локальных TCP, UDP или UDPLITE портов в квадратных скобках сразу после номеров портов или имен служб, например: «:1234[имя]» или «:имя[100083]». Информация о регистрации может быть именем или числом, в зависимости от того, что регистрирующая программа предоставила portmapper при регистрации порта.
Когда отображение регистраций portmapper включено, lsof может работать немного медленнее или даже зависать, когда доступ к portmapper становится перегруженным или прерывается. Измените режим отображения, чтобы определить, замедляет ли или блокирует отображение регистраций portmapper работу lsof.
Для целей отображения регистраций portmapper lsof считает TCP, UDP или UDPLITE порт локальным, если: он находится в локальной части его содержащейся структуры ядра; или если он находится в внешней части его содержащейся структуры ядра, и локальные и внешние IP-адреса одинаковы; или если он находится во внешней части его содержащейся структуры ядра, и внешний IP-адрес равен INADDR_LOOPBACK (127.0.0.1). Это правило может привести к тому, что lsof будет игнорировать некоторые внешние порты на машинах с несколькими интерфейсами, когда внешний IP-адрес находится в другом интерфейсе, чем локальный.
Обратитесь к разделу часто задаваемых вопросов (FAQ) lsof (в разделе FAQ указано его местоположение) для получения дополнительной информации об отчете о проблемах регистрации portmapper.
Отчет о регистрации portmapper поддерживается только в диалектах, имеющих файлы заголовков RPC. (В некоторых дистрибутивах Linux с GlibC 2.14 их нет.) Когда отчет о регистрации portmapper поддерживается, вывод справки с помощью -h или -? будет содержать опцию +|-M.
-n подавляет преобразование сетевых номеров в имена хостов для сетевых файлов. Подавление преобразования может ускорить работу lsof. Также полезно, когда разрешение имен хостов работает неправильно.
-N выбирает отображение файлов NFS.
-o указывает lsof всегда отображать смещение файла. Это приводит к тому, что заголовок столбца SIZE/OFF изменяется на OFFSET. Обратите внимание: в некоторых UNIX-диалектах lsof не может получить точную или последовательную информацию о смещении файла из источников данных ядра, иногда только для определенных типов файлов (например, файлы сокетов). См. раздел часто задаваемых вопросов (FAQ) lsof (в разделе FAQ указано его местоположение) для получения дополнительной информации.
Опции -o и -s взаимоисключающие; их нельзя указывать одновременно. Когда ни одна из них не указана, lsof отображает значение — размер или смещение — в зависимости от того, что подходит и доступно для типа файла.
-o o определяет количество десятичных цифр (o), которые будут выводиться после "0t" для смещения файла, прежде чем формат переключится на "0x...". Значение o, равное нулю (неограниченное), указывает lsof использовать формат "0t" для всего вывода смещения.
Эта опция НЕ указывает lsof всегда отображать смещение; используйте -o (без завершающей цифры), чтобы сделать это. -o o только определяет количество цифр после "0t" в смешанном выводе размера и смещения или только в выводе смещения. Таким образом, например, чтобы указать lsof всегда отображать смещение с количеством десятичных цифр, равным 10, используйте:
-o -o 10
или
-oo10
По умолчанию количество цифр после "0t" обычно равно 8, но оно могло быть изменено создателем lsof. См. описание опции -o o в выводе опции -h или -?, чтобы определить значение по умолчанию.
-O указывает lsof обходить стратегию, которую он использует, чтобы не блокироваться некоторыми операциями ядра, то есть выполнять их в дочерних процессах. См. разделы БЛОКИРОВКИ И ЗАДЕРЖКИ и ПРЕДОТВРАЩЕНИЕ БЛОКИРОВОК ЯДРА для получения дополнительной информации об операциях ядра, которые могут заблокировать lsof.
Хотя использование этой опции уменьшит накладные расходы на запуск lsof, это также может привести к тому, что lsof зависнет, если ядро не ответит на функцию. Используйте эту опцию с осторожностью.
-p s исключает или выбирает список файлов для процессов, идентификаторы (PID) которых указаны в разделенном запятыми наборе s, например, "123" или "123,^456". (В наборе не должно быть пробелов.)
Идентификаторы процессов, начинающиеся с `^` (отрицание), представляют собой исключения.
Несколько идентификаторов процессов объединяются в один набор, соединенный оператором OR, прежде чем участвовать в выборе с помощью оператора AND. Однако исключения идентификаторов процессов применяются без использования операторов OR или AND и действуют до применения других критериев выбора.
-P запрещает преобразование номеров портов в имена портов для сетевых файлов (обычно это сопоставление извлекается из /etc/services). Запрет преобразования может незначительно ускорить работу lsof. Это также полезно, когда поиск имени порта работает некорректно.
-Q игнорировать неудачные поисковые запросы. Когда lsof инструктируют искать пользователей файла, пользователей устройства, определенный PID или определенные протоколы, используемые этим PID, и так далее, lsof вернет ошибку, если какие-либо из результатов поиска окажутся пустыми. Опция -Q изменит это поведение, так что lsof вместо этого вернет успешный код выхода (0), даже если какие-либо из результатов поиска окажутся пустыми. Кроме того, отсутствующие поисковые запросы не будут сообщаться в stderr.
+|-r [t[c<N>][m<fmt>]]
переводит lsof в режим повторения. В этом режиме lsof перечисляет открытые файлы, выбранные другими опциями, задерживается на t секунд (по умолчанию пятнадцать), затем повторяет список, задерживаясь и повторяя его до тех пор, пока не будет остановлен условием, определенным префиксом опции.
Если префикс — `-'`, режим повторения будет бесконечным. Lsof должен быть остановлен сигналом прерывания или выхода. `c<N>` указывает на ограничение количества повторений; если количество итераций достигнет `<N>`, lsof остановится.
Если префикс — `+'`, режим повторения завершится в первом цикле, когда не будет перечислено ни одного открытого файла, и, конечно, когда lsof будет остановлен сигналом прерывания или выхода. Когда режим повторения завершается из-за того, что не было перечислено ни одного файла, код выхода процесса будет равен нулю, если когда-либо были перечислены какие-либо открытые файлы; один, если ни одного файла никогда не было перечислено.
Lsof помечает конец каждого списка: если вывод полей находится в процессе (указана опция -F), маркер по умолчанию — `m`; в противном случае маркер по умолчанию — `========`. За маркером следует символ новой строки (NL).
Необязательный аргумент "m<fmt>" задает формат для строки-маркера. Символы <fmt>, следующие за `m`, интерпретируются как спецификация формата для функции strftime(3), когда она и функция localtime(3) доступны в диалекте C-библиотеки. Обратитесь к документации strftime(3), чтобы узнать, что может содержаться в ее спецификации формата. Обратите внимание, что когда запрошен вывод полей с помощью опции -F, <fmt> не может содержать символ новой строки NL, `\%n`. Кроме того, обратите внимание, что когда <fmt> содержит пробелы или другие символы, которые влияют на интерпретацию аргументов оболочкой, <fmt> следует соответствующим образом заключить в кавычки.
Режим повторения снижает накладные расходы на запуск lsof, поэтому более эффективно использовать этот режим, чем, например, многократно вызывать lsof из скрипта оболочки.
Чтобы наиболее эффективно использовать режим повторения, используйте его вместе с указанием других опций выбора lsof, чтобы минимизировать объем доступа к памяти ядра, который выполняет lsof. Опции, которые фильтруют на уровне процесса, например, -c, -g, -p, -u, являются наиболее эффективными селекторами.
Режим повтора полезен при использовании с выводом в поле (см. описание опции -F) и с помощью скрипта awk или Perl, или C-программы, выполняющего мониторинг.
-R указывает lsof отображать идентификатор родительского процесса в столбце PPID.
-s [p:s] Если указана только `s`, lsof отображает размер файла в любое время. Это приводит к изменению заголовка столбца SIZE/OFF на SIZE. Если у файла нет размера, ничего не отображается.
Необязательная форма `-s p:s` доступна только для определенных диалектов и только в том случае, если она указана в выходных данных справки `-h` или `-?`.
Когда эта необязательная форма доступна, после `s` может следовать имя протокола (`p`), либо TCP, либо UDP, двоеточие (`:`) и список имен состояний протокола, разделенных запятыми. Эта опция исключает открытые TCP- и UDP-файлы, если их имена состояний находятся в списке (`s`), перед которыми стоит символ `^`, или включает их, если их имена в списке не начинаются с `^`.
Диалекты, поддерживающие эту опцию, могут поддерживать только один протокол. При указании неподдерживаемого протокола будет отображено сообщение о том, что имена состояний для этого протокола недоступны.
Когда определен список включений, в выходных данных lsof будут присутствовать только сетевые файлы, имена состояний которых есть в списке. Таким образом, указание одного имени состояния означает, что будут перечислены только сетевые файлы, у которых есть это единственное имя состояния.
Регистр букв в именах протоколов или состояний не имеет значения, но не должно быть пробелов, и двоеточие (`:`) между именем протокола (`p`) и списком имен состояний (`s`) обязательно.
Если необходимо перечислить только TCP- и UDP-файлы, как контролируется указанными исключениями и включениями, также необходимо указать опцию `-i`. Если необходимо перечислить файлы только одного протокола, добавьте его имя в качестве аргумента опции `-i`.
Например, чтобы перечислить только сетевые файлы с TCP-состоянием LISTEN, используйте:
-iTCP -sTCP:LISTEN
Или, например, чтобы перечислить сетевые файлы со всеми UDP-состояниями, кроме Idle, используйте:
-iUDP -sUDP:^Idle
Имена состояний различаются в зависимости от UNIX-диалектов, поэтому невозможно предоставить полный список. Некоторые распространенные имена TCP-состояний: CLOSED, IDLE, BOUND, LISTEN, ESTABLISHED, SYN_SENT, SYN_RCDV, ESTABLISHED, CLOSE_WAIT, FIN_WAIT1, CLOSING, LAST_ACK, FIN_WAIT_2 и TIME_WAIT. Два распространенных имени UDP-состояний: Unbound и Idle.
См. раздел часто задаваемых вопросов lsof (раздел FAQ указывает его местоположение) для получения дополнительной информации о том, как использовать исключение и включение состояний протокола, включая примеры.
Опции `-o` (без последующего числового значения) и `-s` (без последующего имени протокола и списка состояний) взаимоисключающие; их нельзя указывать одновременно. Если ни одна из них не указана, lsof отображает соответствующее значение - размер или смещение - в зависимости от типа файла.
Поскольку у некоторых типов файлов нет фактического размера - сокетов, FIFO, каналов и т. д. - lsof отображает для их размеров количество содержимого в связанных с ними буферах ядра, если это возможно.
-S [t] указывает необязательное значение тайм-аута в секундах для функций ядра - [lstat]({filename}../../lstat)(2), [readlink]({filename}../../readlink)(2) и [stat]({filename}../../stat)(2), которые в противном случае могут привести к взаимной блокировке. Минимальное значение для t равно двум; значение по умолчанию - пятнадцать; если значение не указано, используется значение по умолчанию.
См. раздел "БЛОКИРОВКИ И ТАЙМ-АУТЫ" для получения дополнительной информации.
-T [t] управляет отображением некоторой информации TCP/TPI, которая также отображается [netstat]({filename}../../netstat)(1) после сетевых адресов. В обычном выводе информация отображается в круглых скобках, каждый элемент, кроме имени состояния TCP или TPI, идентифицируется ключевым словом, за которым следует "=", и элементы разделяются одинарным пробелом:
<Имя состояния TCP или TPI>
QR=<длина очереди чтения>
QS=<длина очереди отправки>
SO=<параметры и значения сокета>
SS=<состояния сокета>
TF=<флаги и значения TCP>
WR=<длина окна чтения>
WW=<длина окна записи>
Не все значения отображаются для всех UNIX-систем. Значения элементов (если они доступны) отображаются после имени элемента и знака "=".
Когда режим вывода полей включен (см. "ВЫВОД ДЛЯ ДРУГИХ ПРОГРАММ"), каждый элемент отображается в виде поля с символом "`T" в начале.
-T без последующих ключевых символов отключает отображение информации TCP/TPI.
-T с последующими символами выбирает отображение определенной информации TCP/TPI:
f выбирает отображение параметров сокета, состояний и значений, а также флагов TCP и значений.
q выбирает отображение длины очереди.
s выбирает отображение состояния соединения.
w выбирает отображение размера окна.
Не все выборы доступны для некоторых UNIX-систем. Состояние может быть выбрано для всех систем и отображается по умолчанию. Опция "-h" или "-?" в выходных данных справки для опции "-T" покажет, какие выборы могут быть использованы в данной UNIX-системе.
Когда опция -T используется для выбора информации, то есть за ней следует один или несколько символов выбора, отображение состояния отключается по умолчанию, и его необходимо явно выбрать снова в символах, следующих за -T. (В этом случае значение по умолчанию эквивалентно -Ts.) Например, если требуется отобразить длину очереди и состояние, используйте -Tqs.
Параметры сокета, состояния сокета, некоторые значения сокетов, флаги TCP и одно значение TCP могут отображаться (если они доступны в данной UNIX-системе) в форме имен, которые обычно встречаются после SO_, so_, SS_, TCP_ и TF_ в файлах заголовков данной системы - чаще всего <sys/socket.h>, <sys/socketvar.h> и <netinet/tcp_var.h>. Обратитесь к этим файлам заголовков, чтобы узнать значение флагов, параметров, состояний и значений.
``SO='' предшествует параметрам и значениям сокета; ``SS='', состояниям сокета; и ``TF='', флагам TCP и значениям.
Если у флага или параметра есть значение, то значение следует после знака "=" и имени, например, SO=LINGER=5'',SO=QLIM=5'', ``TF=MSS=512''. Следующие семь значений могут быть отображены:
Имя Отображается Описание (Общий символ)
KEEPALIVE время ожидания (SO_KEEPALIVE)
LINGER время ожидания (SO_LINGER)
MSS максимальный размер сегмента (TCP_MAXSEG)
PQLEN количество частичных подключений в очереди прослушивания
QLEN количество установленных подключений в очереди прослушивания
QLIM предел установленных подключений в очереди прослушивания
RCVBUF длина буфера приема (SO_RCVBUF)
SNDBUF длина буфера отправки (SO_SNDBUF)
Подробную информацию о том, какие параметры сокетов и значения, состояния сокетов, а также флаги и значения TCP могут отображаться для конкретных UNIX-диалектов, можно найти в ответах на вопросы «Почему lsof не отображает параметры сокетов, состояния сокетов и флаги TCP для моего диалекта?» и «Почему lsof не отображает количество частичных подключений в очереди прослушивания для моего диалекта?» в разделе FAQ lsof (в разделе FAQ указано его местонахождение). В Linux этот параметр также отображает состояние сокетов UNIX-домена.
-t выдает краткий вывод, состоящий только из идентификаторов процессов (без заголовка), чтобы его можно было легко использовать в программах. Например:
# перезагрузить все, использующее старый SSL
lsof -t /lib/*/libssl.so.* | xargs -r kill -HUP
# получить список процессов, а затем выполнить итерацию по ним (только для Bash)
mapfile -t pids < <(
lsof -wt /var/log/your.log
)
for pid in "${pids[@]}" ; do
your_command -p "$pid"
done
Опция -t подразумевает опцию -w.
-u s выбирает список файлов для пользователя, чьи имена для входа или идентификаторы пользователей находятся в наборе, разделенном запятыми, например, «abe» или «548,root». (Пробелов в наборе быть не должно).
Несколько имен для входа или идентификаторов пользователей объединяются в один набор, соединенных оператором OR, прежде чем участвовать в выборе с использованием оператора AND.
Если имя для входа или идентификатор пользователя предшествует символу \`, то он становится отрицанием, то есть файлы процессов, принадлежащих имени для входа или идентификатору пользователя, никогда не будут перечислены. Выбор отрицательного имени для входа или идентификатора пользователя не соединяется оператором AND и не оператором OR с другими выборами; он применяется перед всеми остальными выборами и абсолютно исключает список файлов процесса. Например, чтобы указать lsof исключить список файлов, принадлежащих процессам root, укажите «-u^root» или «-u^0».
-U выбирает список файлов сокетов UNIX-домена.
-v выбирает список информации о версии lsof, включая: номер ревизии; время, когда была собрана двоичная версия lsof; кто собрал двоичный файл и где; имя компилятора, использованного для сборки двоичного файла lsof; номер версии компилятора, когда он доступен; флаги компилятора и загрузчика, использованные для сборки двоичного файла lsof; и системную информацию, обычно вывод команды uname с опцией -a.
-V указывает lsof указывать элементы, которые он должен был перечислить, но не смог найти: имена команд, имена файлов, интернет-адреса или файлы, имена для входа, файлы NFS, PID, PGID и UID.
Когда другие параметры соединяются с операторами поиска или параметры времени компиляции ограничивают список некоторых файлов, lsof может не сообщать о том, что он не смог найти элемент поиска, когда параметр, соединенный с оператором AND, или параметр времени компиляции предотвращает список открытого файла, содержащего найденный элемент поиска.
Например, lsof -V -iTCP@foobar -a -d 999 может не сообщать об ошибке при поиске открытых файлов по адресу TCP@foobar и может не отображать их, если таковых нет, или если ни у одного из них нет дескриптора файла с номером 99. Аналогичная ситуация возникает, когда HASSECURITY и HASNOSOCKSECURITY определены во время компиляции, и они предотвращают отображение открытых файлов.
+|-w Включает (+) или отключает (-) подавление предупреждающих сообщений.
Разработчик lsof может выбрать включение или отключение предупреждающих сообщений по умолчанию.
Состояние предупреждающих сообщений по умолчанию указывается в выходных данных опции -h или -?.
Отключение предупреждающих сообщений, когда они уже отключены, или включение, когда они уже включены, допустимо.
Опция -t подразумевает опцию -w.
-x [fl] может использоваться вместе с опциями `+d` и `+D`, чтобы указать, что при сканировании каталога (`+d`) или дерева каталогов (`+D`) следует переходить через символические ссылки и/или точки монтирования файловой системы.
Если -x указана сама по себе, без последующего параметра, переход через символические ссылки и точки монтирования файловой системы будет включен. Обратите внимание, что когда -x указана без параметра, следующий аргумент должен начинаться с - или +.
Необязательный параметр 'f' включает переход через точки монтирования файловой системы; 'l' включает переход через символические ссылки.
Опцию -x нельзя указывать без одновременного указания опции +d или +D.
-X Это опция, специфичная для диалекта.
AIX:
Эта опция IBM AIX RISC/System 6000 запрашивает отчет об исполняемых текстовых файлах и общих библиотеках.
ПРЕДУПРЕЖДЕНИЕ: поскольку эта опция использует функцию `readx()` ядра, ее использование в загруженной системе AIX может привести к тому, что процесс приложения зависнет настолько, что его нельзя будет ни убить, ни остановить. Я никогда не видел этого и не получал отчетов об этом, но я думаю, что существует небольшая вероятность, что это может произойти.
По умолчанию использование readx() отключено. В AIX 5L и выше lsof может потребовать разрешения setuid-root для выполнения действий, запрошенных этой опцией.
Разработчик lsof может указать, что опция -X должна быть ограничена процессами, реальный UID которых является root. Если это сделано, опция -X не будет отображаться в выходных данных опций -h или -?, если реальный UID процесса lsof не является root. В стандартной поставке lsof любой UID может указывать -X, поэтому по умолчанию она будет отображаться в выходных данных справки.
Когда использование readx() в AIX отключено, lsof может не отображать информацию для всех текстовых и загрузочных ссылок на файлы, но это также может предотвратить усугубление ошибки поиска каталогов ядра AIX, известной как ошибка устаревшего идентификатора сегмента.
Функция readx(), используемая lsof или любой другой программой для доступа к некоторым разделам виртуальной памяти ядра, может вызвать ошибку устаревшего идентификатора сегмента. Это может привести к тому, что функция dir_search() ядра будет ошибочно полагать, что часть копии файловой системы в памяти была обнулена. Другой процесс приложения, отличный от lsof, запрашивающий у ядра поиск в каталоге, например, с помощью open(2), может привести к тому, что dir_search() будет бесконечно повторяться, тем самым приводя к зависанию процесса приложения.
Обратитесь к часто задаваемым вопросам (FAQ) lsof (в разделе FAQ указано его местоположение) и к файлу 00README дистрибутива lsof для получения более подробной информации об ошибке Stale Segment ID, соответствующей APAR и методах определения использования readx() при компиляции lsof.
Linux: Этот параметр Linux указывает lsof пропускать информацию обо всех открытых TCP, UDP и UDPLITE IPv4 и IPv6 файлах.
Этот параметр Linux наиболее полезен, когда в системе очень большое количество открытых TCP, UDP и UDPLITE файлов, обработка информации о которых в файлах /proc/net/tcp* и /proc/net/udp* займет у lsof много времени, и отчет о которых не представляет интереса.
Используйте этот параметр с осторожностью и только в том случае, если вы уверены, что информация, которую вы хотите отобразить в lsof, не связана с открытыми TCP, UDP или UDPLITE сокетными файлами.
Solaris 10 и выше: Этот параметр Solaris 10 и выше запрашивает отчет о кэшированных путях для файлов, которые были удалены, то есть удалены с помощью rm(1) или unlink(2).
Кэшированный путь сопровождается строкой `` (deleted) для указания того, что путь, по которому был открыт файл, был удален.
Поскольку любые изменения, внесенные в путь, то есть переименования с помощью mv(1) или rename(2), не записываются в кэшированном пути, lsof сообщает только путь, по которому файл был открыт, а не его, возможно, другой конечный путь.
-z [z] указывает, как обрабатывать информацию о зонах Solaris 10 и выше.
Если после параметра нет аргумента, например, NO z, то параметр указывает, что имена зон должны отображаться в столбце ZONE.
Параметр -z может быть дополнен именем зоны, z. Это приводит к тому, что lsof будет отображать только открытые файлы для процессов в этой зоне. Можно указать несколько пар параметра -z z и аргумента, чтобы сформировать список именованных зон. Любой открытый файл любого процесса в любой из зон будет отображаться с учетом других условий, указанных другими параметрами и аргументами.
-Z [Z] указывает, как обрабатывать контексты безопасности SELinux. Поддержка этого параметра и символа вывода поля 'Z' отключается, когда SELinux отключен в работающем ядре Linux.
Если после параметра нет аргумента, например, NO Z, то параметр указывает, что контексты безопасности должны отображаться в столбце SECURITY-CONTEXT.
Параметр -Z может быть дополнен подстановочным знаком контекста безопасности, Z. Это приводит к тому, что lsof будет отображать только открытые файлы для процессов в этом контексте безопасности. Можно указать несколько пар параметра -Z Z и аргумента, чтобы сформировать список контекстов безопасности. Любой открытый файл любого процесса в любом из контекстов безопасности будет отображаться с учетом других условий, указанных другими параметрами и аргументами. Обратите внимание, что Z может быть A:B:C или *:B:C или A:B:* или *:*:C для сопоставления с контекстом A:B:C.
-- Опция с двойным минусом служит маркером, сигнализирующим об окончании именованных опций.
Ее можно использовать, например, когда имя первого файла начинается с минуса. Ее также можно использовать, когда отсутствие значения для последней именованной опции должно быть обозначено наличием минуса в следующей опции и перед началом имен файлов.
names Это пути к конкретным файлам, которые необходимо перечислить. Символические ссылки разрешаются перед использованием.
Первое имя может быть отделено от предыдущих опций опцией --.
Если имя является точкой монтирования файловой системы или устройством файловой системы, lsof выведет список всех открытых файлов в файловой системе. Чтобы имя считалось файловой системой, оно должно соответствовать имени точки монтирования в выходных данных mount(8) или имени блочного устройства, связанного с именем точки монтирования. Опции +|-f можно использовать, чтобы принудительно указать lsof рассматривать имя как идентификатор файловой системы (+f) или как простой файл (-f).
Если имя является путем к каталогу, который не является точкой монтирования файловой системы, он обрабатывается так же, как и обычный файл, то есть его список ограничивается процессами, которые открыли его как файл или как каталог, специфичный для процесса, такой как корневой каталог или текущий рабочий каталог. Чтобы запросить у lsof поиск открытых файлов внутри имени каталога, используйте опции +d s и +D D.
Если имя является базовым именем семейства мультиплексированных файлов, например, /dev/pt[cs] в AIX, lsof выведет список всех связанных мультиплексированных файлов на устройстве, которые открыты, например, /dev/pt[cs]/1, /dev/pt[cs]/2 и т. д.
Если имя является именем UNIX-доменного сокета, lsof обычно ищет его по символам имени, как оно указано, и как оно записано в структуре сокета ядра. (См. следующий абзац об исключении для Linux.) Указание относительного пути, например ./file, вместо абсолютного пути к файлу, например /tmp/file, не будет работать, потому что lsof должен сопоставить указанные вами символы с тем, что он находит в структурах UNIX-доменного сокета ядра.
Если имя является именем UNIX-доменного сокета Linux, в одном случае lsof может искать его по номеру устройства и inode, что позволяет использовать имя в виде относительного пути. Этот случай требует, чтобы абсолютный путь, то есть путь, начинающийся со слеша ('/'), использовался процессом, создавшим сокет, и поэтому он хранится в файле /proc/net/unix; и он требует, чтобы lsof мог получить номера устройства и узла как для абсолютного пути в /proc/net/unix, так и для имени с помощью успешных системных вызовов stat(2). Когда эти условия выполнены, lsof сможет найти UNIX-доменный сокет, когда какой-либо путь к нему указан в имени. Таким образом, например, если путь — /dev/log, и поиск lsof инициируется, когда текущий каталог — /dev, то имя может быть ./log.
Если имя не соответствует ни одному из вышеперечисленных, lsof отобразит все открытые файлы, чей номер устройства и индекс соответствуют указанному пути.
Если вы также указали опцию -b, единственные имена, которые вы можете безопасно указать, — это файловые системы, для которых в вашей таблице монтирования указаны альтернативные номера устройств. См. разделы «ИЗБЕЖАНИЕ БЛОКИРОВКИ ЯДРА» и «АЛЬТЕРНАТИВНЫЕ НОМЕРА УСТРОЙСТВ» для получения дополнительной информации.
Несколько имен файлов объединяются в один набор, связанный оператором OR, прежде чем участвовать в выборе с помощью опции AND.
AFS
Lsof поддерживает распознавание файлов AFS для следующих диалектов (и версий AFS):
AIX 4.1.4 (AFS 3.4a)
HP-UX 9.0.5 (AFS 3.4a)
Linux 1.2.13 (AFS 3.3)
Solaris 2.[56] (AFS 3.4a)
Он может распознавать файлы AFS в других версиях этих диалектов, но это не было протестировано. В зависимости от реализации AFS, lsof может распознавать файлы AFS в других диалектах или может испытывать трудности с распознаванием файлов AFS в поддерживаемых диалектах.
Lsof может испытывать трудности с идентификацией всех аспектов файлов AFS в поддерживаемых диалектах, когда поддержка ядра AFS реализована с помощью динамических модулей, адреса которых не отображаются в списке имен переменных ядра. В этом случае lsof может быть вынужден предполагать идентификацию файлов AFS и может не иметь возможности получить информацию об объеме из ядра, необходимую для вычисления номеров узлов тома AFS. Когда lsof не может вычислить номера узлов тома, он отображает пустую строку в столбце NODE.
Опция -A A доступна в некоторых реализациях lsof для указания файла списка имен, где можно найти адреса динамических модулей ядра. Если эта опция доступна, она будет указана в выходных данных справки lsof, которые отображаются при использовании опций -h или -?.
См. раздел «Часто задаваемые вопросы по lsof» (раздел «Часто задаваемые вопросы» указывает его местоположение) для получения дополнительной информации о динамических модулях, их символах и о том, как они влияют на параметры lsof.
Поскольку поиск путей AFS, похоже, не участвует в операциях кэша имен ядра, lsof не может идентифицировать компоненты имен путей для файлов AFS.
БЕЗОПАСНОСТЬ
Lsof имеет три функции, которые могут вызывать опасения по поводу безопасности. Во-первых, режим компиляции по умолчанию позволяет любому пользователю просматривать все открытые файлы с помощью lsof. Во-вторых, по умолчанию он создает файл кэша устройств, доступный для чтения и записи пользователем, в домашнем каталоге реального идентификатора пользователя, который выполняет lsof. (Функции «список всех открытых файлов» и «файл кэша устройств» могут быть отключены при компиляции lsof). В-третьих, его опции -k и -m указывают альтернативные имена файлов ядра или памяти.
Ограничение списка всех открытых файлов контролируется опциями времени компиляции HASSECURITY и HASNOSOCKSECURITY. Когда HASSECURITY определена, lsof разрешит только пользователю root просматривать все открытые файлы. Пользователь, не являющийся пользователем root, может просматривать только открытые файлы процессов с тем же идентификатором пользователя, что и у реального идентификатора пользователя процесса lsof (того, под которым пользователь вошел в систему).
Однако, если одновременно определены HASSECURITY и HASNOSOCKSECURITY, любой пользователь может просмотреть список открытых сокетных файлов, при условии, что они выбраны с помощью опции -i.
Когда HASSECURITY не определена, любой пользователь может просмотреть список всех открытых файлов.
В справке, отображаемой в ответ на опции -h или -?, указывается статус определений HASSECURITY и HASNOSOCKSECURITY.
См. раздел «Безопасность» файла 00README в дистрибутиве lsof для получения информации о том, как собрать lsof с включенными опциями HASSECURITY и HASNOSOCKSECURITY.
Создание и использование читаемого и записываемого пользователем файла кэша устройств контролируется опцией компиляции HASDCACHE. См. раздел «ФАЙЛ КЭША УСТРОЙСТВ» и следующие за ним разделы для получения подробной информации о том, как формируется его путь. С точки зрения безопасности важно отметить, что в дистрибутиве lsof по умолчанию, если реальный идентификатор пользователя, под которым выполняется lsof, является root, файл кэша устройств будет записан в домашней директории пользователя root, например, в / или /root. Когда HASDCACHE не определена, lsof не записывает и не пытается читать файл кэша устройств.
Когда HASDCACHE определена, в справке lsof, отображаемой в ответ на опции -h, -D? или -?, будет предоставлена информация об обработке файла кэша устройств. Когда HASDCACHE не определена, в выходных данных опций -h или -? не будет описания опции -D.
Прежде чем вы решите отключить функцию файла кэша устройств, учтите, что ее включение повышает производительность lsof, уменьшая накладные расходы на запуск, связанные с проверкой всех узлов в /dev (или /devices), — прочитайте обсуждение этого вопроса в файле 00DCACHE в дистрибутиве lsof и в часто задаваемых вопросах lsof (в разделе часто задаваемых вопросов указано его местоположение).
Если вы не уверены, вы можете временно отключить использование файла кэша устройств с помощью опции -Di.
Когда пользователь lsof объявляет альтернативный список имен ядра или файлы памяти с помощью опций -k и -m, lsof проверяет полномочия пользователя на чтение этих файлов с помощью access(2). Это сделано для того, чтобы предотвратить использование каких-либо специальных возможностей, которые могут быть у режимов lsof, для чтения файлов, к которым обычно нельзя получить доступ с правами реального идентификатора пользователя.
ВЫВОД
В этом разделе описывается информация, которую lsof перечисляет для каждого открытого файла. См. раздел «ВЫВОД ДЛЯ ДРУГИХ ПРОГРАММ» для получения дополнительной информации о выходных данных, которые могут быть обработаны другой программой.
^ sof выводит только печатные 8-битные символы (считаются таковыми функцией isprint(3)). Непечатные символы выводятся в одной из трех форм: форма C \`[bfrnt]''; форма контрольного символа`^' (например,^@); или шестнадцатеричная форма с префиксом\x(например,\xab). Пробел является непечатным символом в столбцеCOMMAND(\x20`) и печатным в других местах.
Для некоторых диалектов, если HASSETLOCALE определена в файле заголовков machine.h диалекта, lsof будет выводить расширенные 8-битные символы языка. Процессу lsof должна быть предоставлена переменная среды языка (например, LANG), значение которой представляет собой известный языковой стандарт, в котором расширенные символы считаются печатными функцией isprint(3). В противном случае lsof считает расширенные символы непечатными и выводит их в соответствии со своими правилами для непечатных символов, указанными выше. Обратитесь к странице руководства setlocale(3) для вашего диалекта, чтобы узнать имена других переменных среды, которые можно использовать вместо LANG, например, LC_ALL, LC_CTYPE и т. д.
Поддержка локали языка в lsof для определенного диалекта также охватывает символы широкого формата, например, UTF-8, если в файле заголовка machine.h этого диалекта определены HASSETLOCALE и HASWIDECHAR, и если для процесса lsof определена подходящая языковая локаль в соответствующей переменной среды. В этих условиях символы широкого формата будут отображаться как печатаемые, если функция iswprint(3) сообщает, что они таковыми являются.
Если HASSETLOCALE, HASWIDECHAR и подходящая языковая локаль не определены, или если функция iswprint(3) сообщает о непечатаемых символах широкого формата, lsof считает эти символы непечатаемыми и выводит каждый из их 8 бит в соответствии со своими правилами для непечатаемых символов, указанными выше.
См. ответы на вопросы о «Поддержке локали языка» в часто задаваемых вопросах (FAQ) lsof (в разделе FAQ указано его местоположение) для получения дополнительной информации.
Lsof динамически изменяет размер выходных столбцов каждый раз при запуске, гарантируя, что каждый столбец имеет минимальный размер. Он также гарантирует, что каждый столбец отделен от предшествующего ему как минимум одним пробелом.
COMMAND содержит первые девять символов имени команды UNIX, связанной с процессом. Если для опции +c w указано ненулевое значение w, столбец содержит первые w символов имени команды UNIX, связанной с процессом, в пределах лимита символов, предоставляемых lsof диалектом UNIX. (См. описание команды +c w или часто задаваемые вопросы (FAQ) lsof для получения дополнительной информации. В разделе FAQ указано его местоположение.)
Если w меньше длины заголовка столбца, COMMAND, то его значение будет увеличено до этой длины.
Если для опции +c w указано нулевое значение w, столбец содержит все символы имени команды UNIX, связанной с процессом.
Все символы имен команд, хранящиеся ядром в его структурах, отображаются в выходных данных, когда указан дескриптор имени команды (c). См. раздел «ВЫВОД ДЛЯ ДРУГИХ КОМАНД» для получения информации о выборе выходных данных и связанного с ними дескриптора имени команды.
PID — это идентификационный номер процесса.
TID — это идентификационный номер задачи (потока), если диалект поддерживает отчетность о задачах (потоках) и отображается задача (поток). (Если в выходных данных справки, т. е. в выходных данных опций `-h` или `-?`, отображается эта опция, то диалект поддерживает отчетность о задачах (потоках).)
Пустой столбец TID в Linux указывает на процесс, то есть не задачу.
TASKCMD — имя команды задачи. Как правило, оно совпадает с именем процесса, указанным в столбце COMMAND, но в некоторых реализациях задач (например, в Linux) задача может изменять свое имя команды.
Ширина столбца TASKCMD подвержена тем же ограничениям по размеру, что и столбец COMMAND.
ZONE — имя зоны Solaris 10 и более поздних версий. Этот столбец необходимо выбирать с помощью опции -z.
SECURITY-CONTEXT — контекст безопасности SELinux. Этот столбец необходимо выбирать с помощью опции -Z. Обратите внимание, что опция -Z отключена, когда SELinux отключен в работающем ядре Linux.
PPID — идентификатор родительского процесса (Parent Process ID) процесса. Он отображается только в том случае, если указана опция -R.
PGID — идентификатор группы процессов (process group ID), связанной с процессом. Он отображается только в том случае, если указана опция -g.
USER — идентификатор пользователя или имя пользователя, которому принадлежит процесс, обычно то же, что и отображается в [ps]({filename}../../ps)(1). Однако в Linux USER — это идентификатор пользователя или имя пользователя, владеющего каталогом в /proc, где lsof находит информацию о процессе. Обычно это то же значение, что и в [ps]({filename}../../ps)(1), но может отличаться, если процесс изменил свой эффективный идентификатор пользователя. (См. описание опции -l для получения информации о том, когда отображается идентификатор пользователя или имя пользователя.)
FD — номер дескриптора файла или:
cwd — текущий рабочий каталог;
Lnn — ссылки на библиотеки (AIX);
ctty — символьный терминал;
DEL — удаленный файл;
err — ошибка информации о дескрипторе файла (см. столбец NAME);
fp. — Fileport (Darwin);
jld — каталог jail (FreeBSD);
ltx — текст общей библиотеки (код и данные);
Mxx — шестнадцатеричный номер сопоставленной памяти типа xx.
m86 — сопоставленный файл DOS Merge;
mem — сопоставленный файл памяти;
mmap — сопоставленное устройство памяти;
NOFD — для каталога Linux /proc/
За FD следует один из этих символов, описывающих режим, в котором открыт файл:
r — доступ для чтения;
w — доступ для записи;
u — доступ для чтения и записи;
пробел — если режим неизвестен и нет блокировки;
символ следует.
`-` — если режим неизвестен и есть блокировка;
символ следует.
Символ режима дополняется одним из символов блокировки, описывающих тип блокировки, применяемой к файлу:
N — блокировка Solaris NFS неизвестного типа;
r — блокировка для чтения части файла;
R — блокировка для чтения всего файла;
w — блокировка для записи части файла;
W — блокировка для записи всего файла;
u — блокировка для чтения и записи любой длины;
U — блокировка неизвестного типа;
x — блокировка SCO OpenServer Xenix части файла;
X — блокировка SCO OpenServer Xenix всего файла;
пробел — если блокировка отсутствует.
См. раздел «LOCKS» для получения дополнительной информации о символе информации о блокировке.
Содержимое столбца FD представляет собой одно поле для разбора в скриптах постобработки. Номера FD, превышающие 9999, сокращаются до «*», за которым следуют последние три цифры. Например, 10001 отображается как «*001».
TYPE — это тип узла, связанного с файлом, например, VDIR, VREG и т. д.
или «ax25» для сокета Linux AX.25;
или «a_inode» для анонимного inode;
или «icmp» для сокета ICMP;
или «inet» для сокета доменного интернет-протокола;
или «ipx» для сокета IPX;
или «key» для внутреннего сокета управления ключами;
или «lla» для файла доступа к каналу связи HP-UX;
или «ndrv» для сокета драйвера сети;
или «netlink» для сокета netlink;
или «pack» для сокета пакетов;
или «ppp» для сокета PPP;
или «raw» для необработанного сокета;
или «raw6» для необработанного сокета IPv6;
или «rte» для сокета AF_ROUTE;
или «sock» для сокета с неизвестным доменом;
или «systm» для системного сокета;
или «unix» для сокета UNIX;
или «x.25» для сокета x.25 HP-UX;
или «ATALK» для сокета AppleTalk;
или «BLK» для блочного специального файла;
или «CHR» для символьного специального файла;
или «DEL» для файла карты Linux, который был удален;
или «DIR» для каталога;
или «DOOR» для файла VDOOR;
или «EVENTFD» для eventfd;
или «FIFO» для специального файла FIFO;
или «FSEVENTS» для fsevents;
или «IPv4» для сокета IPv4;
или «IPv6» для открытого сетевого файла IPv6, даже если его адрес IPv4, отображается в адресе IPv6;
или «KQUEUE» для файловой очереди событий ядра BSD;
или «LINK» для символической ссылки;
или «MPB» для мультиплексированного блочного файла;
или «MPC» для мультиплексированного символьного файла;
или «PAS» для файла /proc/as;
или «PAXV» для файла /proc/auxv;
или «PCRE» для файла /proc/cred;
или «PCTL» для файла управления /proc;
или «PCUR» для текущего процесса /proc;
или «PCWD» для текущего рабочего каталога /proc;
или «PDIR» для каталога /proc;
или «PETY» для типа исполняемого файла /proc (etype);
или «PFD» для файла дескриптора файлов /proc;
или «PFDR» для каталога дескрипторов файлов /proc;
или «PFIL» для исполняемого файла /proc;
или «PFPR» для набора регистров FP /proc;
или «PGD» для файла /proc/pagedata;
или «PGID» для файла-уведомления группы /proc;
или «PIPE» для каналов;
или «PLC» для файла /proc/lwpctl;
или «PLDR» для каталога /proc/lpw;
или «PLDT» для файла /proc/ldt;
или «PLPI» для файла /proc/lpsinfo;
или «PLST» для файла /proc/lstatus;
или «PLU» для файла /proc/lusage;
или «PLWG» для файла /proc/gwindows;
или «PLWI» для файла /proc/lwpsinfo;
или «PLWS» для файла /proc/lwpstatus;
или «PLWU» для файла /proc/lwpusage;
или «PLWX» для файла /proc/xregs;
или «PMAP» для файла карты /proc (map);
или «PMPS» для файла /proc/maps;
или «PMEM» для файла образа памяти /proc.
или ``PNTF'' для файла уведомлений о процессах /proc;
или ``POBJ'' для файла объектов /proc;
или ``PODR'' для каталога объектов /proc;
или ``POLP'' для файла легковесного процесса старого формата /proc;
или ``POPF'' для файла PID старого формата /proc;
или ``POPG'' для файла данных страниц старого формата /proc;
или ``PORT'' для именованного канала SYSV;
или ``PREG'' для файла реестра /proc;
или ``PRMP'' для файла /proc/rmap;
или ``PROCDSC'' для дескриптора процессора;
или ``PRTD'' для корневого каталога /proc;
или ``PSGA'' для файла /proc/sigact;
или ``PSIN'' для файла /proc/psinfo;
или ``PSTA'' для файла состояния /proc;
или ``PSXMQ'' для файла очереди сообщений POSIX;
или ``PSXSEM'' для файла семафора POSIX;
или ``PSXSHM'' для файла общей памяти POSIX;
или ``PTS'' для файла /dev/pts;
или ``PUSG'' для файла /proc/usage;
или ``PW'' для файла /proc/watch;
или ``PXMP'' для файла /proc/xmap;
или ``REG'' для обычного файла;
или ``SHM'' для файла общей памяти;
или ``SMT'' для файла транспорта общей памяти;
или ``STR'' для потоков;
или ``STSO'' для сокета потока;
или ``UNKN'' для неизвестного файла;
или ``UNKNcwd'' для неизвестного текущего рабочего каталога;
или ``UNKNdel'' для неизвестного удаленного файла;
или ``UNKNfd'' для неизвестного файлового дескриптора;
или ``UNKNmem'' для неизвестного файла, отображенного в память;
или ``UNKNrtd'' для неизвестного корневого каталога;
или ``UNKNtxt'' для неизвестного программного текста;
или ``UNNM'' для файла неопределенного типа;
или ``XNAM'' для специального файла OpenServer Xenix неизвестного типа;
или ``XSEM'' для файла семафора OpenServer Xenix;
или ``XSD'' для файла общих данных OpenServer Xenix;
или ``UNSP'' для неподдерживаемого файла;
или четыре октета номера типа, если соответствующее имя неизвестно.
FILE-ADDR содержит адрес структуры файла ядра, когда указан флаг +f;
FCT содержит количество ссылок на файл из структуры файла ядра, когда указан флаг +f;
FILE-FLAG, когда указаны флаги g или G, это поле содержит содержимое члена f_flag[s] структуры файла ядра и флаги открытых файлов ядра для каждого процесса (если они доступны); `G` приводит к отображению их в шестнадцатеричном формате; `g` – в виде коротких имен; два списка могут быть отображены с записями, разделенными запятыми, списки разделены точкой с запятой (`;`); первый список может содержать короткие имена для значений f_flag[s] из следующей таблицы:
AIO асинхронный ввод/вывод (например, FAIO)
AP добавление
ASYN асинхронный ввод/вывод (например, FASYNC)
BAS блок, тест и установка в использовании
BKIU блокировать, если в использовании
BL использовать смещения блоков
BSK поиск блоков
CA избегать копирования
CIO одновременный ввод/вывод
CLON клон
CLRD чтение CL
CR создание
DF отложить
DFI отложить IND
DFLU сброс данных
DIR прямой
DLY задержка
DOCL выполнить клон
DSYN целостность данных
DTY должен быть каталогом
EVO только события
EX открыть для выполнения
EXCL исключительное открытие
FSYN синхронная запись
GCDF отложить во время unp_gc() (AIX)
GCMK пометить во время unp_gc() (AIX)
GTTY доступ через /dev/tty
HUP завершение
KERN ядро
KIOC ввод/вывод, инициированный ядром
LCK есть блокировка
LG большой файл
MBLK блок сообщений потока
MK метка
MNT монтировать
MSYN множественная синхронизация
NATM не обновлять время доступа
NB неблокирующий ввод/вывод
NBDR нет проверки BDRM
NBIO неблокирующий ввод/вывод SYSV
NBF буферизация в действии
NC нет кэша
ND нет задержки
NDSY нет синхронизации данных
NET сеть
NFLK не следовать по ссылкам
NMFS файловая система NM
NOTO отключить фоновую остановку
NSH нет общего доступа
NTTY нет управляющего TTY
OLRM зеркало OLR
PAIO асинхронный ввод/вывод POSIX
PATH путь
PP канал POSIX
R чтение
RC кэш блокировки файлов и записей
REV отменено
RSH общий доступ для чтения
RSYN синхронизация чтения
RW доступ для чтения и записи
SL общая блокировка
SNAP созданный снимок
SOCK сокет
SQSH общий набор Sequent при открытии
SQSV набор SVM Sequent при открытии
SQR восстановление набора Sequent при открытии
SQS1 полное общее открытие Sequent
SQS2 частичное общее открытие Sequent
STPI остановить ввод/вывод
SWR синхронное чтение
SYN целостность файла во время записи
TCPM избежать конфликта TCP
TMPF временный файл
TR усечение
W запись
WKUP параллельная синхронизация ввода/вывода
WTG параллельная синхронизация ввода/вывода
VH ожидающий vhangup
VTXT виртуальный текст
XL исключительная блокировка
Этот список имен был получен из макроопределений `#define` в файлах заголовков диалекта <fcntl.h>, <linux/fs.h>, <sys/fcntl.c>, <sys/fcntlcom.h> и <sys/file.h>; список соответствий между этими сокращенными именами и определениями в файлах заголовков можно найти в файле заголовка common.h;
второй список (после точки с запятой) может содержать сокращенные имена для флагов открытых файлов, специфичных для каждого процесса в ядре, взятые из следующей таблицы:
ALLC выделено
BR файл был прочитан
BHUP активность приостановлена сигналом SIGHUP
BW в файл была произведена запись
CLSG закрытие
CX закрытие при вызове exec (см. fcntl(F_SETFD))
LCK применена блокировка
MP отображено в память
OPIP открытие в процессе
RSVW резервное ожидание
SHMT установлен UF_FSHMAT (AIX)
USE используется (многопоточный режим)
NODE-ID (или INODE-ADDR в некоторых диалектах) содержит уникальный идентификатор узла файла (обычно адрес vnode или inode в ядре, но иногда и конкатенацию номера устройства и узла), когда указан параметр +n;
DEVICE содержит номера устройств, разделенные запятыми, для символьного специального файла, блочного специального файла, обычного файла, каталога или NFS-файла;
или «память» для узла файловой системы памяти в Tru64 UNIX;
или адрес частной области данных потока сокета Solaris;
или адрес ссылки в ядре, идентифицирующий файл (адрес ссылки в ядре может использоваться, например, для FIFO);
или базовый адрес или имя устройства Linux AX.25 сокета.
Обычно отображаются только младшие тридцать два бита адреса ядра Tru64 UNIX.
SIZE, SIZE/OFF или OFFSET
— размер файла или смещение файла в байтах. Значение отображается в этом столбце только в том случае, если оно доступно. Lsof отображает любое значение — размер или смещение — в зависимости от типа файла и версии lsof.
В некоторых UNIX-диалектах lsof не может получить точную или согласованную информацию о смещении файла из источников данных ядра, иногда только для определенных типов файлов (например, файлов сокетов). В других случаях файлы не имеют фиксированного размера — например, сокеты, FIFO, каналы — поэтому lsof отображает для их размеров количество содержимого, которое он находит в дескрипторах буферов ядра (например, размеры буферов сокетов или размеры окон TCP/IP). Обратитесь к часто задаваемым вопросам lsof (в разделе FAQ указано его расположение) для получения дополнительной информации.
Размер файла отображается в десятичной форме; смещение обычно отображается в десятичной форме с префиксом ``0t'', если оно содержит 8 цифр или меньше; в шестнадцатеричной форме с префиксом ``0x'', если оно больше 8 цифр. (См. описание опции -o o для получения информации о том, когда 8 может по умолчанию иметь другое значение.)
Таким образом, префиксы ``0t'' и ``0x'' идентифицируют смещение, когда столбец может содержать как размер, так и смещение (т. е., его заголовок — SIZE/OFF).
Если указана опция -o, lsof всегда отображает смещение файла (или ничего, если смещение недоступно) и помечает столбец как OFFSET. Смещение всегда начинается с 0t'' или0x'', как описано выше.
Пользователь lsof может управлять переключением с 0t'' на0x'' с помощью опции -o o. Обратитесь к его описанию для получения дополнительной информации.
Если указана опция -s, lsof всегда отображает размер файла (или ничего, если размер недоступен) и помечает столбец как SIZE. Опции -o и -s взаимоисключающие; их нельзя указывать одновременно.
Если указана опция -H, lsof отображает размер файла в удобочитаемой форме.
Для файлов, которые не имеют фиксированного размера — например, не находятся на дисковом устройстве — lsof отобразит соответствующую информацию о текущем размере или положении файла, если она доступна в структурах ядра, определяющих файл.
NLINK содержит количество ссылок на файл, если указана опция +L;
NODE — это номер узла локального файла;
или номер i-узла файла NFS на сервере;
или тип протокола Internet — например, ``TCP'';
или ``STR'' для потока;
или ``CCITT'' для сокета HP-UX x.25;
или IRQ или номер i-узла устройства Linux AX.25.
NAME — это имя точки монтирования и файловой системы, на которой находится файл;
или имя файла, указанного в опции names (после того как все символические ссылки были разрешены);
или имя символьного или блочного специального устройства;
или локальные и удаленные адреса сети; за локальным именем хоста или IP-адресом следует двоеточие (':'), порт, ``->'' и двухкомпонентный удаленный адрес; IP-адреса могут отображаться в виде чисел или имен, в зависимости от опций +|-M, -n и -P; IPv6-адреса, разделенные двоеточием, заключены в квадратные скобки; IPv4 INADDR_ANY и IPv6 IN6_IS_ADDR_UNSPECIFIED адреса и нулевые номера портов представлены звездочкой ('*'); за UDP-адресом назначения может следовать количество времени, прошедшего с момента отправки последнего пакета в пункт назначения; за TCP, UDP и UDPLITE удаленными адресами может следовать информация TCP/TPI в скобках — состояние (например, ``(ESTABLISHED)'', ``(Unbound)''), размеры очередей и размеры окон (не во всех диалектах) — аналогично тому, как это делает [netstat]({filename}../../netstat)(1); см. описание опции -T или описание поля TCP/TPI в разделе OUTPUT FOR OTHER PROGRAMS для получения дополнительной информации о состоянии, размере очереди и размере окна.
или адрес или имя UNIX-доменного сокета, возможно, включая имя устройства потоковой репликации, путь к файлу файловой системы, локальные и удаленные адреса ядра, информацию о паре сокетов и связанный адрес vnode;
или локальные и удаленные точки монтирования NFS-файла;
или ``STR'', за которым следует имя потока;
или имя символьного устройства потока, за которым следует ``->'' и имя потока или список имен модулей потока, разделенных ``->'';
или ``STR:'', за которым следуют имена устройства и модуля потока SCO OpenServer, разделенные ``->'';
или имя системного каталога, `` -- '', и столько компонентов имени пути, сколько lsof может найти в кэше имен ядра для выбранных диалектов (см. раздел «КЭШ ИМЕН ЯДРА» для получения дополнительной информации);
или ``PIPE->'', за которым следует адрес назначения канала Solaris;
или ``COMMON:'', за которым следует имя устройства структуры информации vnode общего vnode для Solaris;
или семейство адресов, за которым следует слэш (`/`), за которым следуют четырнадцать байтов, разделенных запятыми, адреса не-интернет-сокета;
или локальный адрес HP-UX x.25, за которым следует номер виртуального соединения (если есть), за которым следует удаленный адрес (если есть);
или ``(dead)'' для отсоединенных файлов Tru64 UNIX — обычно это файлы терминалов, для которых был вызван ioctl TIOCNOTTY, и которые были закрыты демонами;
или ``rd=<смещение>'' и ``wr=<смещение>'' для значений считывающего и записывающего смещений FIFO;
или ``clone n:/dev/event'' для файлов-клонов устройства /dev/event SCO OpenServer, где n — номер устройства файла;
или ``(socketpair: n)'' для UNIX-доменного сокета Solaris 2.6, 8, 9 или 10, созданного сетевой функцией socketpair(3N);
или ``no PCB'' для файлов сокетов, у которых отсутствует блок протокола, за которым необязательно следует `, CANTSENDMORE'', если отправка данных по сокету отключена, или ``, CANTRCVMORE'', если прием данных по сокету отключен (например, функцией [shutdown]({filename}../../shutdown)(2));
или локальные и удаленные адреса Linux-сокета IPX в виде `<сеть>:[<узел>:]<порт>`, за которым в скобках следуют размеры передающей и принимающей очередей, а также состояние соединения;
или ``dgram`` или ``stream`` для типа UNIX-доменных сокетов, работающих в ядре, начиная с UnixWare 7.1.1, за которым следует двоеточие (':') и локальный путь к файлу, когда он доступен, за которым следуют ``->`` и удаленный путь к файлу или адрес сокета ядра в шестнадцатеричном формате, когда он доступен;
или значение ассоциации, индекс ассоциации, значение конечной точки, локальный адрес, локальный порт, удаленный адрес и удаленный порт для Linux-сокетов SCTP;
или ``protocol:``, за которым следует атрибут протокола сокета Linux.
Для диалектов, поддерживающих файловую систему ``namefs``, которая позволяет прикрепить один файл к другому с помощью `fattach(3C)`, lsof добавит ``(FA:<address1><direction><address2>)`` в столбец NAME. `<address1>` и `<address2>` — это шестнадцатеричные адреса vnode. `<direction>` будет ``<-``, если `<address2>` был прикреплен к этому vnode, чей адрес — `<address1>`; и ``->``, если `<address1>`, адрес vnode этого vnode, был прикреплен к `<address2>`. `<address1>` может быть опущен, если он уже указан в столбце DEVICE.
Lsof может добавить две дополнительные пометки в столбец NAME для открытых файлов Solaris 10: ``(?)``, если lsof считает, что путь к файлу вызывает сомнения; и ``(deleted)``, если указана опция -X и lsof обнаруживает, что путь к открытому файлу был удален. См. раздел FAQ lsof (в этом разделе указано его местоположение) для получения дополнительной информации об этих дополнениях в столбце NAME.
БЛОКИРОВКИ
Lsof не может адекватно отображать широкий спектр UNIX-диалектов блокировок файлов одним символом. То, что он отображает одним символом, является компромиссом между информацией, которую он находит в ядре, и ограничениями формата отчетности.
Кроме того, когда процесс удерживает несколько блокировок на уровне байтов для файла, lsof отображает только статус первой обнаруженной блокировки. Если это блокировка на уровне байтов, то символ блокировки будет отображаться в нижнем регистре, т. е. r, w или x, а не в верхнем регистре, как для полной блокировки файла.
Как правило, lsof может сообщать только о блокировках, удерживаемых локальными процессами в локальных файлах. Когда локальный процесс устанавливает блокировку для удаленно смонтированного файла (например, NFS), удаленный сервер обычно записывает состояние блокировки. Исключение составляет Solaris — на некоторых уровнях исправлений 2.3 и во всех версиях, начиная с 2.4, ядро Solaris записывает информацию об удаленных блокировках в локальные структуры.
Lsof испытывает трудности с отображением блокировок для некоторых UNIX-диалектов. См. раздел BUGS в этой странице руководства или раздел FAQ lsof (в этом разделе указано его местоположение) для получения дополнительной информации.
ВЫВОД ДЛЯ ДРУГИХ ПРОГРАММ
Когда указана опция -F, lsof генерирует вывод, который подходит для обработки другой программой, например, скриптом awk или Perl или программой на языке C.
Каждый блок информации выводится в поле, которое идентифицируется ведущим символом и заканчивается символом новой строки (0x12) (или символом NUL (0x00), если указан символ поля 0 (ноль)). Данные поля следуют непосредственно за символом идентификации поля и заканчиваются символом-разделителем поля.
Можно рассматривать вывод полей как наборы процессов и файлов. Набор процессов начинается с поля, идентификатор которого равен p (идентификатор процесса (PID)). Он продолжается до начала следующего поля PID или начала первого набора файлов в процессе, в зависимости от того, что произойдет раньше. В набор процессов входят поля, идентифицирующие команду, идентификатор группы процессов (PGID), идентификатор задачи (TID) и идентификатор пользователя (UID) или имя для входа в систему.
Набор файлов начинается с поля, идентификатор которого равен f (дескриптор файла). За ним следуют строки, описывающие режим доступа к файлу, состояние блокировки, тип, устройство, размер, смещение, номер i-узла, протокол, имя и имена модулей потока. Он продолжается до начала следующего набора файлов или процессов, в зависимости от того, что произойдет раньше.
Когда в качестве символа-разделителя поля выбран символ NUL (0x00) с помощью символа идентификатора поля 0 (ноль), lsof заканчивает каждый набор процессов и файлов символом новой строки (0x12).
Lsof всегда генерирует одно поле, поле PID (p). В режиме повторения также генерируется маркер (m). Все остальные поля могут быть указаны необязательно в списке символов идентификаторов полей, следующих за опцией -F. Когда символ выбора поля идентифицирует элемент, который lsof обычно не перечисляет, например, PPID, выбранный с помощью опции -R, указание символа поля, например, -FR, также выбирает перечисление этого элемента.
В версиях lsof от 4.88 до 4.93.2 всегда генерировалось еще одно поле, поле дескриптора файла (f). Однако в этой версии lsof оно не генерируется. Это изменение сделано для поддержки сценария использования, при котором пользователю требуется только поле PID и поле дескриптора файла. Если вам нужно это поле, явно укажите f.
Вполне возможно выбрать набор полей, которые нелегко анализировать, например, если поле дескриптора файла не выбрано, может быть трудно идентифицировать наборы файлов. Чтобы помочь вам избежать этой трудности, lsof поддерживает опцию -F; она выбирает вывод всех полей с символами-разделителями новой строки (опция -F0 выбирает вывод всех полей с символами-разделителями NUL). В целях совместимости ни -F, ни -F0 не выбирают поле необработанного устройства.
Ниже приведены поля, которые будет генерировать lsof. Первый символ в списке — это идентификатор поля.
a режим доступа к файлу
c имя команды процесса (все символы из структуры proc или пользователя)
C счетчик общих ресурсов структуры файла
d символьный код устройства файла
D основной/дополнительный номер устройства файла (0x<шестнадцатеричный>)
f дескриптор файла
F адрес структуры файла (0x<шестнадцатеричный>)
G флаги файла (0x<шестнадцатеричный>; имена, если следует +fg)
g идентификатор группы процессов
i номер i-узла файла
K идентификатор задачи
k количество ссылок
l статус блокировки файла
L имя пользователя, вошедшего в систему
m маркер между повторяющимися выводами (всегда выбирается в режиме повторения)
M имя команды задачи
n имя файла, комментарий, Интернет-адрес
N идентификатор узла (0x<шестнадцатеричный>)
o смещение файла (0t<десятичное> или 0x<шестнадцатеричное>; см. -o o)
p идентификатор процесса (всегда выбирается)
P имя протокола
r необработанный номер устройства (0x<шестнадцатеричный>)
R идентификатор родительского процесса
s размер файла (десятичное)
S идентификатор потока файла
t тип файла
T информация TCP/TPI, идентифицируется префиксами (символ `=` является частью префикса):
QR=<размер очереди чтения>
QS=<размер очереди отправки>
SO=<параметры и значения сокета> (не для всех диалектов)
SS=<состояния сокета> (не для всех диалектов)
ST=<состояние соединения>
TF=<флаги и значения TCP> (не для всех диалектов)
WR=<размер окна чтения> (не для всех диалектов)
WW=<размер окна записи> (не для всех диалектов)
(информация TCP/TPI не сообщается для всех поддерживаемых UNIX-диалектов. Вывод справки для опции -T с помощью -h или -? покажет, какую информацию TCP/TPI можно запросить).
u идентификатор пользователя процесса
z имя зоны Solaris 10 и более поздних версий
Z контекст безопасности SELinux (подавлен, когда SELinux отключен)
0 использовать символ-разделитель поля NUL вместо символа новой строки
19 специфичные для диалекта идентификаторы полей (вывод -F? идентифицирует информацию, которую можно найти в специфичных для диалекта полях).
Вы можете получить онлайн-справку об этих символах и их описаниях, указав опцию -F?. (Экранируйте символ ?, как того требует ваша оболочка.) Дополнительную информацию о содержимом полей можно найти в разделе «ВЫВОД».
В качестве примера, \-F pcfn'` выберет идентификатор процесса (\p'`), имя команды (\c'`), дескриптор файла (\f'`) и имя файла (\n'`) с символом-разделителем полей NL. \-F pcfn0'` выберет тот же вывод с символом-разделителем полей NUL (000).
Lsof не генерирует все поля для каждого процесса или набора файлов, а только те, которые доступны. Некоторые поля взаимоисключающие: символы устройства файла и основные/дополнительные номера устройств файла; номер узла файла и имя протокола; имя файла и идентификатор потока; размер файла и смещение. Один из элементов этих взаимоисключающих наборов появится в выходных данных полей, но не оба.
Обычно lsof заканчивает каждое поле символом NL (012). Символ поля 0 (ноль) может быть указан, чтобы изменить символ-разделитель полей на NUL (000). Разделитель полей NUL может облегчить обработку с помощью xargs (1), например, или с программами, механизмы экранирования которых могут не справляться с диапазоном символов в выходных данных полей. При использовании разделителя полей NUL lsof заканчивает каждый процесс и набор файлов символом NL (012).
Три вспомогательных средства для создания программ, которые могут обрабатывать вывод полей lsof, включены в дистрибутив lsof. Первым является заголовочный файл C, lsof_fields.h, который содержит символы для идентификаторов полей, индексы для их хранения в таблице и строки пояснений, которые можно скомпилировать в программы. Lsof использует этот заголовочный файл.
Вторая помощь — это набор примеров скриптов, обрабатывающих выходные данные, написанных на awk, Perl 4 и Perl 5. Они находятся в подкаталоге scripts в дистрибутиве lsof.
Третья помощь — это библиотека C, используемая для набора тестов lsof. Набор тестов написан на C и использует выходные данные для проверки правильной работы lsof. Библиотеку можно найти в файле tests/LTlib.c в дистрибутиве lsof. В библиотеке используется первая помощь, заголовочный файл lsof_fields.h.
БЛОКИРОВКИ И ВРЕМЕННЫЕ ОГРАНИЧЕНИЯ
Lsof может быть заблокирован некоторыми функциями ядра, которые он использует: lstat(2), readlink(2) и stat(2). Эти функции зависают в ядре, например, когда недоступны хосты, на которых расположены смонтированные файловые системы NFS.
Lsof пытается прервать эти блокировки с помощью таймеров и дочерних процессов, но эти методы не всегда надежны. Когда lsof удается прервать блокировку, он сообщает об этом с помощью сообщения об ошибке. Эти сообщения можно подавить с помощью опций -t и -w.
Значение времени ожидания по умолчанию можно отобразить с помощью опций -h или -?, и его можно изменить с помощью опции -S [t]. Минимальное значение для t — две секунды, но не следует использовать небольшие значения, поскольку медленная работа системы может привести к неожиданному истечению короткого времени ожидания и, возможно, к остановке lsof до того, как он сможет вывести какие-либо данные.
Когда lsof должен прервать блокировку при доступе к информации о смонтированных файловых системах, он обычно продолжает работу, хотя и с меньшим объемом информации, доступной для отображения об открытых файлах.
Lsof также может быть настроен на отказ от использования таймеров и дочерних процессов при использовании функций ядра, которые могут блокироваться, путем указания опции -O. Хотя это позволит lsof запускаться с меньшими накладными расходами, это полностью подвергает lsof ситуациям в ядре, которые могут его заблокировать. Используйте эту опцию с осторожностью.
ИЗБЕЖАНИЕ БЛОКИРОВОК ЯДРА
Вы можете использовать опцию -b, чтобы указать lsof избегать использования функций ядра, которые могут блокироваться. При этом следует учитывать некоторые предостережения.
Во-первых, использование этой опции обычно требует, чтобы ваша система предоставляла альтернативные номера устройств вместо номеров устройств, которые lsof обычно получает с помощью функций lstat(2) и stat(2) в ядре. См. раздел «АЛЬТЕРНАТИВНЫЕ НОМЕРА УСТРОЙСТВ» для получения дополнительной информации об альтернативных номерах устройств.
Во-вторых, вы не можете указывать имена для lsof, если это не имена файловых систем. Это связано с тем, что lsof необходимо знать номера устройств и inode файлов, перечисленных в опциях lsof, а опция -b не позволяет lsof получать их. Кроме того, поскольку lsof имеет номера устройств только для файловых систем, для которых есть альтернативы, его способность находить файлы на файловых системах полностью зависит от наличия и точности альтернатив. Если альтернативы недоступны или неверны, lsof не сможет найти файлы в указанных файловых системах.
Во-первых, если имена каталогов вашей файловой системы, полученные lsof из таблицы монтирования вашей системы, являются символическими ссылками, lsof не сможет их разрешить. Это связано с тем, что опция -b не позволяет lsof использовать функцию ядра readlink(2), которую он использует для разрешения символических ссылок.
Во-вторых, использование опции -b приводит к тому, что lsof выдает предупреждающие сообщения, когда ему необходимо использовать функции ядра, использование которых опция -b запрещает. Вы можете подавить эти сообщения, указав опцию -w, но в этом случае вы не увидите альтернативные номера устройств, отображаемые в предупреждающих сообщениях.
АЛЬТЕРНАТИВНЫЕ НОМЕРА УСТРОЙСТВ
В некоторых диалектах, когда lsof вынужден прерывать блок, потому что он не может получить информацию о смонтированной файловой системе через функции ядра lstat(2) и stat(2), или потому что вы указали опцию -b, lsof может получить часть необходимой ему информации — номер устройства и, возможно, тип файловой системы — из таблицы монтирования системы. Когда это возможно, lsof сообщает полученный номер устройства. (Вы можете подавить этот вывод, указав опцию -w).
Вы можете помочь в этом процессе, если ваша таблица монтирования поддерживается файлом /etc/mtab или /etc/mnttab, содержащим поле параметров, добавив поле dev=xxxx для точек монтирования, в строке параметров которых его нет. Обратите внимание: вы должны иметь возможность редактировать файл — например, некоторые таблицы монтирования, такие как недавняя Solaris /etc/mnttab или Linux /proc/mounts, доступны только для чтения и не могут быть изменены.
Вы также можете указать номера устройств, используя опции +m и +m m, если они поддерживаются вашим диалектом. Проверьте вывод опций lsof -h или -?, чтобы узнать, доступны ли опции +m и +m m.
Часть xxxx поля — это шестнадцатеричное значение номера устройства файловой системы. (См. поле st_dev в выводе функций lstat(2) и stat(2) для получения соответствующих значений для ваших файловых систем). Вот пример из Sun Solaris 2.6 /etc/mnttab для файловой системы, удаленно смонтированной через NFS:
nfs ignore,noquota,dev=2a40001
Существует преимущество в наличии записей dev=xxxx в вашем файле таблицы монтирования, особенно для файловых систем, смонтированных с удаленных NFS-серверов. Когда удаленный сервер выходит из строя, и вы хотите идентифицировать его пользователей, запустив lsof на одном из его клиентов, lsof, вероятно, не сможет получить вывод из функций lstat(2) и stat(2) для файловой системы. Если он может получить номер устройства файловой системы из таблицы монтирования, он сможет отобразить открытые файлы на неисправном NFS-сервере.
Некоторые диалекты, которые не используют ASCII-файл /etc/mtab или /etc/mnttab для таблицы монтирования, могут по-прежнему предоставлять альтернативный номер устройства в своих внутренних таблицах монтирования. Это включает AIX, Apple Darwin, FreeBSD, NetBSD, OpenBSD и Tru64 UNIX. Lsof знает, как получить альтернативный номер устройства для этих диалектов и использует его, когда его попытка выполнить lstat(2) или stat(2) файловой системы заблокирована.
Если вы не уверены, предоставляет ли ваша версия утилиты альтернативные номера устройств для файловых систем из таблицы монтирования, используйте следующую команду lsof, чтобы проверить, сообщает ли она какие-либо альтернативные номера устройств:
lsof -b
Ищите предупреждающие сообщения об ошибках стандартного вывода, начинающиеся с "``предполагается "dev=xxxx" из ...''".
КЭШ ИМЕН КЕРНЕЛЯ
Lsof может изучать кэш имен ядра или использовать другие возможности ядра (например, функцию ADVFS x tag_to_path() в Tru64 UNIX) в некоторых версиях для большинства типов файловых систем, за исключением AFS, и извлекать из него недавно использованные компоненты имени пути. (Поиск путей файловой системы AFS не использует кэш имен ядра; некоторые операции файловой системы Solaris VxFS, по-видимому, также не используют его.)
Lsof сообщает полные пути, которые он находит, в столбце NAME. Если lsof не может сообщить обо всех компонентах пути, он сообщает в столбце NAME имя файловой системы, за которым следует пробел, два символа -, еще один пробел и имена компонентов, которые он нашел, разделенные символом /.
Когда lsof запускается в режиме повтора, т. е. с указанным параметром -r, степень, в которой он может сообщать о компонентах пути для одного и того же файла, может меняться от цикла к циклу. Это связано с тем, что другие запущенные процессы могут привести к тому, что ядро удалит записи из своего кэша имен и заменит их другими.
Использование lsof кэша имен ядра для идентификации путей файлов может привести к тому, что он будет сообщать неверные компоненты в некоторых случаях. Это может произойти, когда кэш имен ядра использует номер устройства и inode в качестве ключа (например, SCO OpenServer), и ключ в быстро меняющейся файловой системе используется повторно. Если ядро версии UNIX не очищает запись кэша имен для файла, когда он удаляется, lsof может найти ссылку на неверную запись в кэше. В разделе FAQ lsof (расположение указано в разделе FAQ) содержится дополнительная информация об этой ситуации.
Lsof может сообщать о компонентах имени пути для следующих версий:
FreeBSD
HP-UX
Linux
NetBSD
SCO OpenServer
SCO|Caldera UnixWare
Solaris
Tru64 UNIX
Lsof не может сообщать о компонентах имени пути для следующих версий:
AIX OpenBSD
Если вы хотите узнать, почему lsof не может сообщать о компонентах имени пути для некоторых версий, обратитесь к разделу FAQ lsof (расположение указано в разделе FAQ).
ФАЙЛ КЭША УСТРОЙСТВ
Изучение всех элементов дерева узлов /dev (или /devices) с помощью функций stat(2) может занимать много времени. Кроме того, информация, которая необходима lsof (номер устройства, номер inode и путь), редко меняется.
Следовательно, lsof обычно поддерживает текстовый файл в формате ASCII с кэшированной информацией о /dev (или /devices) (исключение: lsof на основе /proc в Linux, где это не требуется). Локальный системный администратор, который создает lsof, может контролировать способ формирования пути к файлу кэша устройств, выбирая один из следующих вариантов:
Путь, указанный с помощью опции -D;
Путь, указанный в переменной окружения;
Системный путь;
Личный путь (по умолчанию);
Личный путь, измененный переменной окружения.
Обратитесь к выходным данным опций -h, -D? или -? для получения информации о текущем состоянии поддержки кэша устройств. В выходных данных справки перечислен путь к файлу кэша устройств по умолчанию, который используется в текущем вызове lsof. Опция -D? выводит пути к файлам кэша устройств для чтения и записи, имена применимых переменных окружения и формат личного пути к кэшу устройств.
Lsof может обнаружить, что текущий файл кэша устройств был случайно или злонамеренно изменен с помощью проверок целостности, включая вычисление и проверку шестнадцатеричной контрольной суммы (CRC) содержимого файла. Когда lsof обнаруживает проблему с файлом, он выдает предупреждение и пытается удалить текущий файл кэша и создать новый, но только в путь, на который процесс имеет право записи.
Путь, из которого процесс lsof может пытаться читать файл кэша устройств, может отличаться от пути, на который он может законно записывать. Таким образом, когда lsof обнаруживает, что ему необходимо обновить файл кэша устройств, он может выбрать другой путь для записи, отличный от пути, из которого он прочитал неверную или устаревшую версию.
Если это возможно, опция -Dr запретит запись нового файла кэша устройств. (Она всегда доступна, если указана без аргумента имени пути.)
Когда в систему добавляется новое устройство, файл кэша устройств может потребоваться пересоздать. Поскольку lsof сравнивает время изменения файла кэша устройств с временем изменения и создания каталога /dev (или /devices), он обычно обнаруживает, что было добавлено новое устройство; в этом случае lsof выдает сообщение предупреждения и пытается перестроить файл кэша устройств.
Всякий раз, когда lsof записывает файл кэша устройств, он устанавливает его владельца на реальный UID выполняющегося процесса, а права доступа на 0600, что ограничивает чтение и запись файла только для владельца файла.
ПРАВА ДОСТУПА LSOF, КОТОРЫЕ ВЛИЯЮТ НА ДОСТУП К ФАЙЛАМ КЭША УСТРОЙСТВ
Два права доступа исполняемого файла lsof влияют на его способность получать доступ к файлам кэша устройств. Эти права доступа устанавливаются локальным системным администратором при установке lsof.
Первое и более редкое право доступа - это setuid-root. Оно вступает в силу, когда lsof выполняется; его эффективный UID становится root, а реальный UID (то есть UID вошедшего в систему пользователя) не изменяется. Распространение lsof рекомендует, чтобы версии для этих диалектов работали с setuid-root.
HP-UX 11.11 и 11.23
Linux
Второе и более распространенное право доступа - это setgid. Оно вступает в силу, когда эффективный идентификатор группы (GID) процесса lsof устанавливается на значение, которое может получить доступ к устройствам памяти ядра, например, kmem, sys или system.
Процесс lsof, которому предоставлено разрешение setgid, обычно отказывается от этого разрешения после доступа к устройствам памяти ядра. В этом случае lsof может использовать более гибкие пути формирования кэша устройств. Дистрибутив lsof рекомендует, чтобы версии для этих диалектов работали с разрешением setgid и могли отказываться от этого разрешения.
AIX 5.[12] и 5.3-ML1
Apple Darwin 7.x Power Macintosh systems
FreeBSD 4.x, 4.1x, 5.x и [6789].x для систем на базе x86
FreeBSD 5.x, [6789].x и 1[012].8 для систем на базе Alpha, AMD64 и Sparc64
HP-UX 11.00
NetBSD 1.[456], 2.x и 3.x для систем на базе Alpha, x86 и SPARC
OpenBSD 2.[89] и 3.[0-9] для систем на базе x86
SCO OpenServer Release 5.0.6 для систем на базе x86
SCO|Caldera UnixWare 7.1.4 для систем на базе x86
Solaris 2.6, 8, 9 и 10
Tru64 UNIX 5.1
(Примечание: для lsof в AIX 5L и выше требуется разрешение setuid-root, если используется опция -X.)
Для этих диалектов lsof не поддерживает кэш устройств, поэтому разрешения, предоставленные исполняемому файлу, не применяются к файлу кэша устройств.
Linux
ПУТЬ К ФАЙЛУ КЭША УСТРОЙСТВ, УКАЗАННЫЙ В ОПЦИИ -D
Опция -D предоставляет ограниченные возможности для указания пути к файлу кэша устройств. Ее функция ? отображает пути к файлам кэша устройств, которые будут использоваться для чтения и записи.
Когда доступны функции -D b, r и u, вы можете использовать их для указания, что файл кэша должен быть создан в определенном месте (b[path]), прочитан, но не перестроен (r[path]), или прочитан и перестроен (u[path]). Функции b, r и u имеют ограничения в некоторых случаях. Они ограничены, когда процесс lsof работает с разрешением setuid-root. Путь, указанный с помощью функции r, всегда доступен только для чтения, даже если он доступен.
Функции b, r и u также ограничены, когда процесс lsof работает с разрешением setgid и lsof не отказывается от этого разрешения. (См. раздел «РАЗРЕШЕНИЯ LSOF, ВЛИЯЮЩИЕ НА ДОСТУП К ФАЙЛУ КЭША УСТРОЙСТВ», для списка реализаций, которые обычно не отказываются от своего разрешения setgid.)
Дополнительная функция -D, i (игнорировать), всегда доступна.
Когда доступна, функция b указывает lsof читать информацию об устройствах из ядра с помощью функции [stat]({filename}../../stat)(2) и создать файл кэша устройств по указанному пути.
Когда доступна, функция r указывает lsof читать файл кэша устройств, но не обновлять его. Если аргумент пути сопровождает -Dr, он указывает путь к файлу кэша устройств. Функция r всегда доступна, когда она указана без аргумента пути. Если lsof не работает с разрешением setuid-root и отказывается от своего разрешения setgid, аргумент пути может сопровождать функцию r.
Когда доступна, функция u указывает lsof попытаться прочитать и использовать файл кэша устройств. Если он не может прочитать файл или обнаруживает, что содержимое файла неверно или устарело, он прочитает информацию из ядра и попытается записать обновленную версию файла кэша устройств, но только в путь, который он считает допустимым для эффективных и фактических UID процесса lsof.
ПУТЬ К КЭШУ УСТРОЙСТВ ИЗ ПЕРЕМЕННОЙ ОКРУЖЕНИЯ
Второй вариант пути к файлу кэша устройств для lsof — это содержимое переменной окружения LSOFDEVCACHE. Этот вариант не используется, если процесс lsof запущен с правами root или если реальный UID процесса равен root.
Дополнительное ограничение применяется к пути к файлу кэша устройств, взятому из переменной окружения LSOFDEVCACHE: lsof не будет записывать файл кэша устройств по указанному пути, если процесс lsof не отказывается от привилегии setgid. (См. раздел «ПРИВИЛЕГИИ LSOF, ВЛИЯЮЩИЕ НА ДОСТУП К ФАЙЛУ КЭША УСТРОЙСТВ» для получения информации о реализациях, которые не отказываются от привилегии setgid.)
Локальный системный администратор может отключить использование переменной окружения LSOFDEVCACHE или изменить ее имя при сборке lsof. Обратитесь к выводу команды -D?, чтобы узнать имя переменной окружения.
СИСТЕМНЫЙ ПУТЬ К КЭШУ УСТРОЙСТВ
Локальный системный администратор может выбрать использование системного файла кэша устройств при сборке lsof. Этот файл обычно создается с помощью специальной процедуры системного администрирования при загрузке системы или при изменении содержимого каталогов /dev или /devices. Если он определен, это третий вариант пути к файлу кэша устройств для lsof.
Вы можете определить, используется ли системный файл кэша устройств для вашей локальной установки, изучив вывод команды справки lsof, т. е. вывод команды -h или -?.
По умолчанию lsof никогда не будет записывать данные в системный путь к файлу кэша устройств. Его необходимо явно указать с помощью опции -D в процедуре, выполняемой от имени root. После того как файл был записан, процедура должна изменить его режимы разрешений на 0644 (владелец имеет права на чтение и запись, группа и другие пользователи имеют права на чтение).
ЛИЧНЫЙ ПУТЬ К КЭШУ УСТРОЙСТВ (ПО УМОЛЧАНИЮ)
Путь к файлу кэша устройств по умолчанию в дистрибутиве lsof находится в домашнем каталоге реального UID, который выполняет lsof. К домашнему каталогу добавляется второй компонент пути в формате .lsof_hostname.
Это четвертый вариант пути к файлу кэша устройств для lsof и обычно является путем по умолчанию. Если при сборке lsof был определен системный путь к файлу кэша устройств, этот четвертый вариант будет использоваться, когда lsof не может найти системный файл кэша устройств. Это единственный случай, когда lsof использует два пути при чтении файла кэша устройств.
Часть hostname во втором компоненте — это базовое имя выполняемого хоста, возвращаемое функцией gethostname(2). Базовое имя определяется как символы, предшествующие первой точке . в выводе gethostname(2), или весь вывод gethostname(2), если он не содержит точки ..
Файл кэша устройств принадлежит идентификатору пользователя и доступен для чтения и записи только этому пользователю, т. е. его режимы разрешений — 0600. Каждый уникальный реальный идентификатор пользователя на данном хосте, который выполняет lsof, имеет свой собственный файл кэша устройств. Часть hostname в пути позволяет различать файлы кэша устройств, записанные в смонтированный по NFS домашний каталог, с нескольких разных хостов.
Путь к файлу личного кэша устройств, формируемый этим методом, представляет собой файл кэша устройств, который lsof попытается прочитать и, при необходимости, создать или обновить.
Опция -Dr без указания пути запрещает запись нового файла кэша устройств.
Опция -D? отображает формат спецификации для построения файла личного кэша устройств. Преобразования, используемые в формате спецификации, описаны в файле 00DCACHE в составе дистрибутива lsof.
ИЗМЕНЕННЫЙ ПУТЬ К ЛИЧНОМУ КЭШУ УСТРОЙСТВ
Если эта опция определена локальным системным администратором при сборке lsof, содержимое переменной окружения LSOFPERSDCPATH может использоваться для добавления компонента в путь к файлу личного кэша устройств.
Содержимое переменной LSOFPERSDCPATH вставляется в путь в месте, отмеченном локальным системным администратором с помощью преобразования %p в формате HASPERSDC для данной машины, указанном в заголовочном файле machine.h. (Он размещается сразу после домашнего каталога в стандартном дистрибутиве lsof.)
Таким образом, например, если LSOFPERSDCPATH содержит ``LSOF``, домашний каталог — ``/Homes/abe``, имя хоста — ``lsof.itap.purdue.edu``, а формат HASPERSDC — формат по умолчанию (``%h/%p.lsof_%L``), то измененный путь к файлу личного кэша устройств будет следующим:
/Homes/abe/LSOF/.lsof_vic
Переменная окружения LSOFPERSDCPATH игнорируется, если процесс lsof запущен с установленным setuid-root или если реальный UID процесса — root.
Lsof не будет записывать данные в измененный путь к файлу личного кэша устройств, если процесс lsof не откажется от разрешения setgid. (См. раздел «ПЕРЕЧЕНЬ РАЗРЕШЕНИЙ LSOF, КОТОРЫЕ ВЛИЯЮТ НА ДОСТУП К ФАЙЛУ КЭША УСТРОЙСТВ», для получения списка реализаций, которые обычно не отказываются от своего разрешения setgid.)
Если, например, вы хотите создать подкаталог для файлов личного кэша устройств, используя переменную окружения LSOFPERSDCPATH для его именования, и lsof не отказывается от разрешения setgid, вам придется разрешить lsof создавать файлы кэша устройств по стандартному пути, а затем перемещать их в свой подкаталог с помощью команд оболочки.
Локальный системный администратор может: отключить эту опцию при сборке lsof; изменить имя переменной окружения с LSOFPERSDCPATH на другое; изменить формат HASPERSDC, чтобы включить компонент личного пути в другом месте; или полностью исключить компонент личного пути. Обратитесь к выходным данным опции -D?, чтобы узнать имя переменной окружения и формат спецификации HASPERSDC.
ДИАГНОСТИКА
Ошибки идентифицируются сообщениями, выводимыми в стандартный поток ошибок.
Lsof возвращает 1, если обнаружена какая-либо ошибка, включая невозможность найти имена команд, имена файлов, интернет-адреса или файлы, имена входа в систему, NFS-файлы, PID, PGID или UID, которые необходимо перечислить. Если указана опция -V, lsof укажет элементы поиска, которые не удалось перечислить. Если указана опция -Q, lsof будет игнорировать любые сбои в элементах поиска и возвращать ошибку только в случае возникновения чего-то необычного и невосстановимого.
Возвращает ноль (0), если ошибки не обнаружены, и если указана опция -Q или если удалось получить информацию обо всех указанных аргументах поиска.
Когда lsof не может получить доступ к /dev (или /devices) или к одному из его подкаталогов, или получить информацию о файле в них с помощью stat(2), он выдает предупреждающее сообщение и продолжает работу. Тот факт, что lsof будет выдавать предупреждающие сообщения о недоступных файлах в /dev (или /devices), указывается в его справке, которую можно получить с помощью опций -h или -? , и сообщение будет следующим:
Предупреждения о недоступности /dev включены.
Это предупреждающее сообщение можно подавить с помощью опции -w. Оно также могло быть подавлено системным администратором во время компиляции lsof путем установки определения WARNDEVACCESS. В этом случае вывод из опций справки будет включать сообщение:
Предупреждения о недоступности /dev отключены.
Предупреждающие сообщения о недоступности устройств обычно исчезают после того, как lsof создаст рабочий файл кэша устройств.
ПРИМЕРЫ
Для получения более подробного набора примеров обратитесь к файлу 00QUICKSTART в дистрибутиве lsof.
Чтобы перечислить все открытые файлы, используйте:
lsof
Чтобы перечислить все открытые файлы, использующие протоколы Internet, x.25 (HP-UX) и UNIX domain, используйте:
lsof -i -U
Чтобы перечислить все открытые файлы IPv4, используемые процессом с PID 1234, используйте:
lsof -i 4 -a -p 1234
Если допустимо, что PID 1234 не существует или что PID 1234 не имеет открытых файлов IPv4, добавьте -Q:
lsof -Q -i 4 -a -p 1234
Если диалект UNIX поддерживает IPv6, чтобы перечислить только открытые файлы IPv6, используйте:
lsof -i 6
Чтобы перечислить все файлы, использующие любой протокол на портах 513, 514 или 515 хоста wonderland.cc.purdue.edu, используйте:
lsof -i @wonderland.cc.purdue.edu:513-515
Чтобы перечислить все файлы, использующие любой протокол на любом порту mace.cc.purdue.edu (cc.purdue.edu является доменом по умолчанию), используйте:
lsof -i @mace
Чтобы перечислить все открытые файлы для имени входа \abe'', или идентификатора пользователя 1234, или процесса 456, или процесса 123, или процесса 789, используйте:
lsof -p 456,123,789 -u 1234,abe
Чтобы перечислить все открытые файлы на устройстве /dev/hd4, используйте:
lsof /dev/hd4
Чтобы найти процесс, у которого открыт файл /u/abe/foo, не беспокоясь о том, что его может не быть, используйте:
lsof -Q /u/abe/foo
Чтобы выполнить действие только в том случае, если у процесса открыт файл /u/abe/foo, используйте:
lsof /u/abe/foo echo "still in use"
Чтобы отправить сигнал SIGHUP процессам, у которых открыт файл /u/abe/bar, используйте:
kill -HUP `lsof -t /u/abe/bar`
Чтобы найти любой открытый файл, включая открытый файл UNIX domain socket, с именем /dev/log, используйте:
lsof /dev/log
Чтобы найти процессы с открытыми файлами в NFS-файловой системе, названной /nfs/mount/point, чей сервер недоступен, и предполагая, что ваша таблица монтирования предоставляет номер устройства для /nfs/mount/point, используйте:
lsof -b /nfs/mount/point
Чтобы выполнить указанный выше поиск с подавлением предупреждающих сообщений, используйте:
lsof -bw /nfs/mount/point
Чтобы игнорировать файл кэша устройств, используйте:
lsof -Di
Чтобы получить вывод PID и имени команды для каждого процесса, дескриптора файла, номера устройства файла и номера inode файла для каждого файла каждого процесса, используйте:
lsof -FpcfDi
Чтобы перечислить файлы в дескрипторах 1 и 3 каждого процесса, выполняющего команду lsof, для идентификатора пользователя abe каждые 10 секунд, используйте:
lsof -c lsof -a -d 1 -d 3 -u abe -r10
Чтобы перечислить текущий рабочий каталог процессов, выполняющих команду, которая состоит ровно из четырех символов и имеет символ «o» или «O» в третьем символе, используйте эту форму регулярного выражения для опции -c:
lsof -c /^..o.$/i -a -d cwd
Чтобы найти IPv4-сокет по связанному с ним числовому адресу в десятичном формате, используйте:
lsof [email protected]
Чтобы найти IPv6-сокет (когда UNIX-диалект поддерживает IPv6) по связанному с ним числовому адресу в шестнадцатеричном формате, используйте:
lsof -i@[0:1:2:3:4:5:6:7]
Чтобы найти IPv6-сокет (когда UNIX-диалект поддерживает IPv6) по связанному с ним числовому адресу в шестнадцатеричном формате, который содержит последовательность нулей, например, адрес обратной связи, используйте:
lsof -i@[::1]
Чтобы получить маркер режима повтора, содержащий текущее время, используйте:
lsof -rm====%T====
Чтобы добавить пробелы к предыдущей строке-маркеру, используйте:
lsof -r "m==== %T ===="
ОШИБКИ
Поскольку lsof считывает данные из памяти ядра при поиске открытых файлов, быстрые изменения в памяти ядра могут приводить к непредсказуемым результатам.
Когда файл имеет несколько блокировок записей, символ состояния блокировки (следующий за дескриптором файла) определяется путем проверки первой структуры блокировки, а не путем какой-либо комбинации отдельных структур блокировок записей, которые могут быть описаны несколькими структурами.
Lsof не может искать файлы с ограниченными разрешениями доступа по имени, если он не установлен с правами root (set-UID). В противном случае он ограничен поиском файлов, к которым имеет доступ его пользователь или группа, к которой он принадлежит (если таковая имеется).
Отображение адреса назначения для необработанного сокета (например, для ping) зависит от UNIX-операционной системы. В некоторых диалектах адрес назначения хранится в блоке управления протоколом необработанного сокета, в других — нет.
Lsof не всегда может представлять номера устройств Solaris тем же способом, что и ls(1). Например, основные и второстепенные номера устройств, которые функции lstat(2) и stat(2) сообщают для каталога, на котором смонтированы файлы CD-ROM (обычно /cdrom), не совпадают с номерами, которые он сообщает для устройства, на котором смонтированы файлы CD-ROM (обычно /dev/sr0). (Lsof сообщает номера каталога.)
Поддержка файловой системы /proc доступна только для BSD и Tru64 UNIX, Linux и диалектов, производных от SYSV R4, таких как FreeBSD, NetBSD, OpenBSD, Solaris и UnixWare.
Некоторые элементы файла /proc — номер устройства, номер inode и размер файла — недоступны в некоторых диалектах. Для поиска файлов в файловой системе /proc может потребоваться указать полное имя пути.
Для процессов Linux не отображаются дескрипторы текстовых файлов (txt). Все записи для файлов, отличных от текущего рабочего каталога, корневого каталога и числовых дескрипторов файлов, помечены как дескрипторы памяти (mem).
Lsof не может выполнять поиск именованных каналов Tru64 UNIX по имени, поскольку их реализация lstat(2) в ядре возвращает неправильный номер устройства для именованного канала.
Lsof не может полностью или правильно отображать блокировки в HP-UX 9.01, 10.20 и 11.00 из-за недостаточного доступа к данным ядра или ошибок в данных ядра. Подробности см. в разделе «Часто задаваемые вопросы» (FAQ) (в этом разделе указано его расположение).
Тип файла AIX SMT является вымышленным. Он предназначен для файловых структур, чей тип (15) не определен в файле заголовков AIX /usr/include/sys/file.h. Один из способов создания таких файловых структур — запуск клиентов X с переменной DISPLAY, установленной в значение «:0.0».
Параметр +|-f[cfn] не поддерживается в lsof, основанном на /proc, поскольку он не считывает структуры ядра из памяти ядра.
ОКРУЖАЮЩАЯ СРЕДА
Lsof может получать доступ к следующим переменным окружения.
LANG определяет языковую локаль. См. setlocale(3) для получения имен других переменных, которые можно использовать вместо LANG, например, LC_ALL, LC_TYPE и т. д.
LSOFDEVCACHE определяет путь к файлу кэша устройств. См. раздел «ПУТЬ К КЭШУ УСТРОЙСТВ ИЗ ПЕРЕМЕННОЙ ОКРУЖАЮЩЕЙ СРЕДЫ» для получения дополнительной информации.
LSOFPERSDCPATH определяет средний компонент пути к измененному файлу личного кэша устройств. См. раздел «ИЗМЕНЕННЫЙ ПУТЬ К ЛИЧНОМУ КЭШУ УСТРОЙСТВ» для получения дополнительной информации.
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
Часто задаваемые вопросы и ответы на них (FAQ) доступны в файле 00FAQ в дистрибутиве lsof.
Последняя версия файла находится по адресу:
https://github.com/lsof-org/lsof/blob/master/00FAQ
ФАЙЛЫ
/dev/kmem устройство виртуальной памяти ядра
/dev/mem устройство физической памяти
/dev/swap устройство системной подкачки
.lsof_hostname файл кэша устройств lsof (суффикс, hostname, является первым компонентом имени хоста, возвращаемого функцией gethostname(2)).
АВТОРЫ
Lsof был написан Виктором А. Абеллом <_> из Университета Пердью. Начиная с версии 4.93.0, команда lsof-org на GitHub поддерживает lsof. Многие другие люди внесли свой вклад в lsof. Они перечислены в файле 00CREDITS в дистрибутиве lsof.
РАСПРОСТРАНЕНИЕ
Последний дистрибутив lsof доступен по адресу:
https://github.com/lsof-org/lsof/releases
СМ. ТАКЖЕ
Не все следующие страницы руководства могут существовать в каждом UNIX-диалекте, на который был портирован lsof.
access(2), awk(1), crash(1), fattach(3C), ff(1), fstat(8), fuser(1), gethostname(2), isprint(3), kill(1), localtime(3), lstat(2), modload(8), mount(8), netstat(1), ofiles(8L), open(2), perl(1), ps(1), readlink(2), setlocale(3), stat(2), strftime(3), time(2), uname(1).