Как найти файл по его pid

linux

Как узнать какой файл/скрипт запускает процесс ? В Windows просто открыть расположение файла, а в линукс ?
Нужно узнать откуда запускается этот cryptonight malware
mysite 224079 3.9 0.0 1883876 46716 ? Sl Sep26 3186:59 ./httpd -a cryptonight -o 178.32.145.31:8005 -u


  • Вопрос задан

    более трёх лет назад

  • 12661 просмотр


Комментировать


Решения вопроса 2

Посмотреть где лежит исполняемый файл процесса:
ll /proc/{PID}/exe
Посмотреть кто его родитель:
ps -o ppid= -p {PID}

morihaos

Moris Haos

@morihaos

На 99% вопросов уже есть ответы в инетке…

Привет,
1. Сначала вывод процессовс разными вариантами по ключами, как кому надо. К примеру:
ps -aux
Читай:
man ps
2. Для того чтобы узнать где именно располагается файл, можно использовать:
pwdx PID
где PID это номер процесса.
Можно и через lsof узнать:
lsof -p PID | grep cwd
где PID это тот же номер процесса.

Пригласить эксперта


Ответы на вопрос 1

ls -l /proc/$(pidof prog_name)/exe


Комментировать


Похожие вопросы


  • Показать ещё
    Загружается…

26 мая 2023, в 02:01

10000 руб./за проект

26 мая 2023, в 01:06

500 руб./за проект

26 мая 2023, в 00:08

2500 руб./за проект

Минуточку внимания

4 / 4 / 0

Регистрация: 04.12.2009

Сообщений: 134

1

22.10.2010, 17:58. Показов 9156. Ответов 30


Студворк — интернет-сервис помощи студентам

помогите написать программу которая находит файл по его pid и убивает его



0



Эксперт С++

3211 / 1459 / 73

Регистрация: 09.08.2009

Сообщений: 3,441

Записей в блоге: 2

22.10.2010, 18:17

2

Цитата
Сообщение от suv121
Посмотреть сообщение

находит файл по его pid и убивает его

файлы по pid`у не ищут, и тем более не убивают.
поясните.



0



4 / 4 / 0

Регистрация: 04.12.2009

Сообщений: 134

22.10.2010, 18:22

 [ТС]

3

ну вообщем нужно найти процесс по его Pid и удалить его



0



Эксперт С++

3211 / 1459 / 73

Регистрация: 09.08.2009

Сообщений: 3,441

Записей в блоге: 2

22.10.2010, 18:45

4

pid процесса — это и так его идентификатор. процесс убивается по pid`у.

или тебе нужно найти определить pid процесса зная его имя?



0



4 / 4 / 0

Регистрация: 04.12.2009

Сообщений: 134

24.10.2010, 22:16

 [ТС]

5

мне известно имя , по нему определить пид и убить процесс , это надо реализовать на си , чтобы когда в консоле я вызывал программу она спрашивала только название
через команды это можно сделать легко , через grep , а потом kill



0



Эксперт С++

3211 / 1459 / 73

Регистрация: 09.08.2009

Сообщений: 3,441

Записей в блоге: 2

24.10.2010, 22:29

6

Цитата
Сообщение от suv121
Посмотреть сообщение

мне известно имя , по нему определить пид и убить процесс

выродил..наконец-то
а до сих пор, кто писал тот бред что выше? энергетический клон?



0



4 / 4 / 0

Регистрация: 04.12.2009

Сообщений: 134

24.10.2010, 22:31

 [ТС]

7

просто мне только щас уточнили задание



0



Эксперт С++

3211 / 1459 / 73

Регистрация: 09.08.2009

Сообщений: 3,441

Записей в блоге: 2

24.10.2010, 22:36

8

я так понимаю, системные утилиты нельзя вызывать из кода программы?



0



4 / 4 / 0

Регистрация: 04.12.2009

Сообщений: 134

24.10.2010, 22:52

 [ТС]

9

Цитата
Сообщение от niXman
Посмотреть сообщение

я так понимаю, системные утилиты нельзя вызывать из кода программы?

я думаю можно



0



niXman

Эксперт С++

3211 / 1459 / 73

Регистрация: 09.08.2009

Сообщений: 3,441

Записей в блоге: 2

24.10.2010, 23:02

10

это все упрощает.
читаем ман:

man pidof

из этого понимаем, что если выполнить в консоле: pidof process_name, то получим его pid. дальше убиваем его.
значит нам нужно выполнить:

C
1
FILE* f = popen("/bin/pidof process_name", "r");

из f читаем строку и приводим ее к целому.
все)



1



4 / 4 / 0

Регистрация: 04.12.2009

Сообщений: 134

24.10.2010, 23:09

 [ТС]

11

а как в си реализовать убийство процесса?



0



Эксперт С++

3211 / 1459 / 73

Регистрация: 09.08.2009

Сообщений: 3,441

Записей в блоге: 2

24.10.2010, 23:13

12

путем чтения «man 2 kill»

зы
не забываем жать на «спасибо»



1



4 / 4 / 0

Регистрация: 04.12.2009

Сообщений: 134

28.10.2010, 22:18

 [ТС]

13

а как на сделать чтобы я вводил в программу на си только имя процесса , а программа сама определяла пид и убивала?



0



Эксперт С++

3211 / 1459 / 73

Регистрация: 09.08.2009

Сообщений: 3,441

Записей в блоге: 2

28.10.2010, 23:39

14

найти процесс по имени и определить его PID.
процессы ищутся путем парсинга вывода ps, или путем чтения procfs



0



suv121

4 / 4 / 0

Регистрация: 04.12.2009

Сообщений: 134

29.10.2010, 23:54

 [ТС]

15

а можно пример кода

Добавлено через 10 часов 16 минут
вот что у меня получается

C
1
2
3
4
5
6
7
8
9
#include<stdio.h>
main(){
char a[10];
int b;
printf("enter name procces:n");
gets(a);
b=getpid(a);
kill (b, SIGKILL);
}

какие библиотеки нужно ещё подключить и будет ли работать эта программа?
процесс название которого я должен ввести , это запущенная программа с бесконечным циклом



0



Эксперт С++

3211 / 1459 / 73

Регистрация: 09.08.2009

Сообщений: 3,441

Записей в блоге: 2

30.10.2010, 00:53

16

Цитата
Сообщение от suv121
Посмотреть сообщение

getpid(a);

это что такое?
эта функция не принимает никаких аргументов. и возвращает она именно pid текущего процесса.

я же вам написал каким образом определяется pid по имени процесса.

Добавлено через 1 минуту
и возвращает она не int.
у какой балды вы этот код взяли?



0



4 / 4 / 0

Регистрация: 04.12.2009

Сообщений: 134

30.10.2010, 10:16

 [ТС]

17

а можете в мой код вставить нахождение пида по имени



0



Эксперт С++

3211 / 1459 / 73

Регистрация: 09.08.2009

Сообщений: 3,441

Записей в блоге: 2

30.10.2010, 11:48

18

Цитата
Сообщение от suv121
Посмотреть сообщение

а можете в мой код вставить нахождение пида по имени

во первых — не понятно что это. вопрос?
во вторых — если это вопрос, не понятно почему бы вам самим этого не сделать.
в третьих — если вам западло, то мне стократно. из принципа.



0



4 / 4 / 0

Регистрация: 04.12.2009

Сообщений: 134

30.10.2010, 12:32

 [ТС]

19

я не понимаю как связать FILE* f = popen(«/bin/pidof process_name», «r»); с введенным мною именем процесса и как преобразовать f к целочисленному виду



0



niXman

Эксперт С++

3211 / 1459 / 73

Регистрация: 09.08.2009

Сообщений: 3,441

Записей в блоге: 2

30.10.2010, 19:00

20

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

вот

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
 
int get_pid(const char* pname) {
   char buf[128] = "/bin/pidof ";
   char* p = &buf[0];
   strcat(buf, pname);
   
   FILE* f = popen(buf, "r");
   if ( !f ) {
      perror("popen():");
      return -1;
   }
   while ( !feof(f) ) {
      *p++ = fgetc(f);
   }
   pclose(f);
   return (p > &buf[0]) ? atoi(buf) : -1;
}
 
int main() {
   int pid = 0;
   char pname[128] = "";
 
   strcpy(pname, gets(pname));
   printf("pid: %dn", (pid=get_pid(pname)));
 
   if ( pid != -1 ) {
      if ( kill(pid, SIGKILL) ) {
         perror("kill():");
      }
   } else {
      printf("process not found");
   }
}



1



Содержание

  1. Как получить подробные сведения о процессах в Windows 7
  2. Как узнать PID (идентификатор процесса) в Windows
  3. Как узнать PID (идентификатор процесса) в диспетчере задач
  4. Как узнать PID (идентификатор процесса) в командной строке
  5. Finding the process ID
  6. Task Manager
  7. The tasklist command
  8. TList utility
  9. The .tlist debugger command
  10. PowerShell Get-Process command
  11. CSRSS and user-mode drivers
  12. Как узнать какой порт использует программа
  13. Определения порта программы стандартными средствами Windows
  14. Поиск идентификатора процесса PID
  15. Поиск порта процесса
  16. Программы для просмотра сетевых соединений
  17. TCPView
  18. CurrPorts
  19. Поиск и сравнение процесса
  20. Решение

Как получить подробные сведения о процессах в Windows 7

В статье «Анализ использования памяти с помощью Монитора ресурсов Windows 7» я рассказывал, как использовать Монитор ресурсов (Resource Monitor) для анализа распределения памяти в Windows 7. При этом я упомянул, что графа «Образ» (Image) в таблице «Процессы» (Processes) на вкладке «Память» (Memory) позволяет идентифицировать процессы приложений по имени исполняемого файла. Например, процесс «notepad.exe» со всей очевидностью принадлежит Блокноту (Notepad).

Однако далеко не все процессы можно так легко опознать, и я получил уже немало вопросов от читателей по этому поводу. С идентификацией менее очевидных процессов поможет Диспетчер задач (Task Manager), и в этой статье я расскажу, как его использовать.

Запуск Диспетчера задач

Запустить Диспетчер задач в Windows 7 можно несколькими способами. Во-первых, можно нажать на панели задач правой кнопкой мыши и выбрать опцию «Запустить диспетчер задач» (Start Task Manager). Во-вторых, можно воспользоваться клавишной комбинацией [Ctrl]+[Shift]+[Esc]. И наконец в-третьих, можно запустить исполняемый файл Диспетчера задач из строки поиска меню «Пуск» (Start) — для этого введите taskmgr и нажмите [Enter]. В открывшемся окне выберите вкладку «Процессы» (Processes).

На вкладке «Процессы» есть графа «Описание» (Description, рис. A), в которой приводятся подробные сведения о каждом процессе.

Добавление столбцов на вкладке «Процессы»

Чтобы получить более подробные сведения о процессах Windows 7, воспользуйтесь командой «Выбрать столбцы» (Select Columns) в меню «Вид» (View). Появится диалоговое окно «Выбор столбцов страницы процессов» (Select Process Page Columns), показанное на рис. B. Отсюда можно добавить на вкладку «Процессы» дополнительные колонки — например, столбец «Путь к образу» (Image Path Name), в котором указывается полный путь к файлу, инициировавшему запущенный процесс Windows 7, или графу «Командная строка» (Command Line), где приводится полная команда для запуска процесса со всеми параметрами и переключателями.

Помимо этих столбцов, на вкладку «Процессы» можно добавить и многие другие. Всего в окне «Выбор столбцов страницы процессов» доступно более 30 опций, описание которых не входит в задачи данной статьи. Узнать о назначении всех колонок можно из справочной статьи «Что означают столбцы памяти Диспетчера задач?» на сайте Microsoft.

Опция «Открыть место хранения файла»

Помимо добавления на вкладку столбцов «Путь к образу» и «Командная строка», можно нажать на процессе правой кнопкой мыши и выбрать опцию «Открыть место хранения файла» (Open File Location). При этом откроется папка со всеми файлами, относящимися к данному процессу. К примеру, для процесса «hqtray.exe» на моем компьютере открывается папка «VMware Player» (рис. C).

Еще один источник информации о процессе Windows 7 — окно свойств, которое можно вызвать, нажав на процессе правой кнопкой мыши и выбрав опцию «Свойства» (Properties). Полезные сведения содержатся на вкладке «Подробно» (Details, рис. D).

Если вас интересует процесс «Svchost.exe», можно воспользоваться утилитой командной строки Tasklist, чтобы узнать о нем поподробнее. «Svchost.exe» — общее имя процесса для всех служб, запускаемых из динамически подключаемых библиотек (DLL). Чтобы узнать, каким службам принадлежит этот процесс, откройте командную строку (Command Prompt) и выполните следующую команду:

Вы получите список всех запущенных процессов, в котором приводятся сведения о службах для каждого процесса «Svchost.exe» (рис. E).

Узнав имена служб, запомните идентификатор (PID) процесса «Svchost.exe». Теперь откройте вкладку «Службы» (Services) в Диспетчере задач и отсортируйте список по столбцу «ИД процесса» (PID). Найдите нужный идентификатор и посмотрите описание, чтобы понять назначение службы Windows 7 (рис. F).

Сведения, к сожалению, весьма скудные, но хотя бы позволяют понять, какая именно служба запустила процесс «Svchost.exe».

А вам приходилось использовать Диспетчер задач для поиска информации о запущенных процессах Windows 7? Поделитесь своим опытом в комментариях!

Автор: Greg Shultz
Перевод SVET

Оцените статью: Голосов

Источник

Как узнать PID (идентификатор процесса) в Windows

1555418414 get pid process id in windows 1

В данной статье показаны действия, с помощью которых можно узнать PID (идентификатор процесса) в операционной системе Windows.

Идентификатор процесса (process identifier, PID) — уникальный номер процесса в операционной системе Windows.

Все процессы имеют уникальные идентификаторы PID, которые автоматически присваиваются каждому процессу когда он создается в операционной системе, что позволяет ядру системы различать процессы.

При необходимости можно узнать PID (идентификатор процесса).

Как узнать PID (идентификатор процесса) в диспетчере задач

1555418439 get pid process id in windows 2

Теперь найдите нужный процесс, и в столбце ИД процесса будет отображен идентификатор соответствующего процесса.

1555418480 get pid process id in windows 3

Как узнать PID (идентификатор процесса) в командной строке

Также узнать PID (идентификатор процесса) можно используя командную строку.

Запустите командную строку и выполните следующую команду:

Найдите нужный процесс, в столбце PID будет отображен идентификатор процесса.

1555418490 get pid process id in windows 4

Также можно отобразить процессы в виде списка, для этого в командной строке выполните следующую команду:

Найдите нужный процесс, в строке PID будет отображен идентификатор процесса.

1555418402 get pid process id in windows 5

Используя рассмотренные выше действия, можно узнать PID (идентификатор процесса) в операционной системе Windows.

Источник

Finding the process ID

Each process running in Windows is assigned a unique decimal number called the process ID (PID). This number is used in a number of ways, for example to specify the process when attaching a debugger to it.

This topic describes how you can determine the PID for a given app using Task Manager, the tasklist Windows command, the TList utility, or the debugger.

Task Manager

Task Manager can be opened in a number of ways, but the simplest is to select Ctrl+Alt+Delete, and then select Task Manager.

In Windows 10, first click More details to expand the information displayed. From the Processes tab, select the Details tab to see the process ID listed in the PID column.

process id task manager windows 10

Click on any column name to sort. You can right click a process name to see more options for a process.

Some kernel errors may cause delays in Task Manager’s graphical interface.

The tasklist command

Use the built in Windows tasklist command from a command prompt to display all processes, their PIDs, and a variety of other details.

Use tasklist /? to display command line help.

TList utility

Task List Viewer (TList), or tlist.exe, is a command-line utility that displays the list of tasks, or user-mode processes, currently running on the local computer. TList is included in the Debugging Tools for Windows. For information on how to download and install the debugging tools, see Download Debugging Tools for Windows.

If you installed the Windows Driver Kit in the default directory on a 64 bit PC, the debugging tools are located here:

C:Program Files (x86)Windows Kits10Debuggersx64

When you run TList from the command prompt, it will display a list of all the user-mode processes in memory with a unique PID number. For each process, it shows the PID, process name, and, if the process has a window, the title of that window.

For more information, see TList.

The .tlist debugger command

If there’s already a user-mode debugger running on the system in question, the .tlist (List Process IDs) command will display a list of all PIDs on that system.

PowerShell Get-Process command

To work with automation scripts, use the Get-Process PowerShell command. Specify a specific process name, to see the process ID for that process.

For more information, see Get-Process.

CSRSS and user-mode drivers

To debug a user-mode driver running on another computer, debug the Client Server Run-Time Subsystem (CSRSS) process. For more information, see Debugging CSRSS.

Источник

Как узнать какой порт использует программа

На компьютере может быть установлено довольно много программ и все они резервируют в операционной системе определенный порт для взаимодействия с другим программным обеспечением по сети. В большинстве случаев пользователь заранее знает какой порт использует программа. Это может быть официально зарезервированный порт, под определенный сетевой протокол. Например почтовые программы используют для приема почты протокол POP3 и резервируют порт 110. Бывают неофициально резервируемые порты, например порт 1540 используемый агентом сервера 1С:Предприятие. Информацию об используемых неофициальных портах разработчики программного обеспечения указывают в документации.

Определения порта программы стандартными средствами Windows

Поиск идентификатора процесса PID

1. Открываем командную строку: сочетание клавиш и вводим команду CMD.

image 21

2. Запускаем tasklist и находим PID процесса.

Если необходимо отобразить полный список процессов, в том числе служебных и системных, необходимо использовать tasklist без аргументов.

Команда tasklist /fi «status eq running» найдет только те процессы, которые были запущенны программами. Это сократит список процессов и облегчит поиск.

Находим в списке нужную программу, например OneDrive.exe и запоминаем соответствующий PID.

image 23

Поиск порта процесса

Для получения списка используемых портов воспользуемся утилитой командной строки netstat.

B netstat были использованы слtдующие аргументы:

В результате будет получен довольно крупный список активных сетевых соединений, среди которых необходимо найти соединение с нужным PID.

image 25

image 29

В найденных результатах видно, что процесс c PID 15304 (программа OneDrive.exe) использует несколько сетевых портов: 11906, 11907, 11908.

Обращайте внимание на то, для какого траспортного протокола открыт порт: ТСР или UDP. Это информация будет важна, когда будете пробрасывать порт через межсетевой экран.

Программы для просмотра сетевых соединений

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

TCPView

image 31

CurrPorts

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

image 36

Источник

Поиск и сравнение процесса

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Поиск процесса на c++
ПОМОГИТЕ ПЛИЗ. Программирую на с++ builder 6. Задача: 1-е проверить наличие процесса.

Поиск процесса по имени
Такой вопрос: я ввожу с клавиатуры имя процесса и можно ли проверить, запущен ли процесс с таким.

Поиск процесса по имени
Помогите написать программу поиска процесса по имени на MS Visual Studio 2010.

Добавлено через 1 час 0 минут
Модифицированный вариант с поиском файла в произвольной папке и обработкой каждого найденного PID для найденного имени файлапроцесса:

Решение

Добавлено через 5 минут
что-то типа

чтобы точнее, надо поизучать help по wmic process

Добавлено через 1 минуту
под XP wmic работает,
a ежели чо, проверить наличие SP3.

Добавлено через 4 часа 6 минут
ну вот, появился у меня windows под рукой, поэтому,
чтобы перезапустить процесс, зная его исполняемый путь
doit.bat:

tickПоиск окон процесса
Привет, подскажите пожалуйста какие функции надо использовать в моем случае, никак не могу найти.

tickПоиск процесса по имени
Здравствуйте, помогите пожалуйста перевести с Lua код поиск процесса по имени, на язык.

Поиск процесса по имени
Нужно написать функцию которая будет искать запущен ли процесс (имя процесса за ранние известно).

поиск скрытого процесса.
у меня в системе завёлся скрытый процесс я знаю только имя файла «000.exe» мне надо на нулевом.

Источник

Недорогой хостинг для сайтов

hosting.energy недорогой хостинг сайтов

lsof — это утилита командной строки для всех Unix и Linux подобных операционных систем для проверки « списка открытых файлов » Само название «lsof» происходит от этой функции. Команда lsof в основном используется для получения информации о файлах, которые открываются различными процессами. Открытые файлы в системе могут быть разных типов, например, дисковые файлы, сетевые сокеты, именованные каналы и устройства. Эта отличительная особенность позволяет лучше отлаживать и понимать операционную систему Linux.

Когда мы выполняем минимальную установку CentOS / RHEL / Ubuntu / OpenSUSE , lsof не является частью установки по умолчанию, поэтому используйте следующую команду для установки команды или утилиты lsof

Для системы CentOS / RHEL,

~] # yum install lsof -y

Системы на основе Debian (Ubuntu / Linux Mint)

~] # apt install lsof -y

Для системы OpenSUSE,

~] # zypper install lsof

Команда «lsof» имеет множество опций и переключателей. Будет очень интересно изучить некоторые из этих важных. В этой статье мы обсудим 18 полезных примеров команды lsof для гиков Linux.

Пример: 1) Список всех открытых файлов вашей системы (lsof)

Выполнение команды lsof без каких-либо параметров выведет список всех открытых файлов вашей системы, принадлежащих всем активным процессам.

Просто набрав команду «lsof» без каких-либо параметров в командной строке, вы получите следующий результат:

Примечание . — Поскольку вывод lsof предоставляет много информации для STDOUT, лучше использовать вертикальную черту «|» операция, чтобы просмотреть этот вывод постранично.

 ~]# lsof | more
COMMAND    PID  TID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd      1         root  cwd       DIR              253,0      4096        128 /
systemd      1         root  rtd       DIR              253,0      4096        128 /
systemd      1         root  txt       REG              253,0   1489960   50674818 /usr/lib/systemd/systemd
systemd      1         root  mem       REG              253,0     20032   33628284 /usr/lib64/libuuid.so.1.3.0
systemd      1         root  mem       REG              253,0    252704   33745961 /usr/lib64/libblkid.so.1.1.0

Приведенный выше вывод команды, если вы внимательно его изучите, предоставляет много информации со многими параметрами. Например, процесс « systemd » (который является процессом демона) имеет идентификатор процесса ( PID ) «1», пользователь — « root », файловый дескриптор ( FD ) — « cwd » и т. Д. FD предлагает множество values, поскольку известно, что дескриптор файла создается для любых открытых файлов автоматически в системах Linux. Ниже приведены некоторые из хорошо известных значений «FD», используемых для команд lsof.

18 быстрых примеров команды lsof для любителей Linux

Примечание . В некоторых случаях за «mem» следует число и различные символы, такие как «r», «u», «w» и т. Д. Эти символы: «r» для чтения, «w» для записи, «u» для прочти и напиши.

Наконец, « Type » в выводе команды указывает тип файла. Ниже приведены стандартные типы файлов в системах Linux.

18 быстрых примеров команды lsof для любителей Linux

Другие поля, которые отображаются вместе с этим, следующие:

  • DEVICE –> Идентификатор устройства
  • SIZE/OFF –> Фактический размер этого процесса (взятый во время выполнения)
  • NODE –> Обычно номер inode каталога или родительского каталога
  • NAME –> Путь или ссылка

Пример: 2) Список открытых файлов определенной файловой системы (/ proc)

Как вы знаете, « /proc » будет существовать только в течение срока службы ОС Linux, этот каталог содержит много важной информации, связанной с процессами. Выполнение «lsof» в / proc даст нам интересный результат для изучения,

~]# lsof /proc
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF       NODE NAME
systemd      1 root    9r   REG    0,3        0       6690 /proc/1/mountinfo
systemd      1 root   11r   REG    0,3        0 4026532018 /proc/swaps
systemd-j  462 root   10r   REG    0,3        0       6936 /proc/sys/kernel/hostname
lsof      5186 root    3r   DIR    0,3        0          1 /proc
lsof      5186 root    6r   DIR    0,3        0      28890 /proc/5186/fd
~]#

Как упоминалось ранее, здесь фиксируется «lsof» самого «lsof», и отображаются все подробности. Помимо «lsof» существуют другие процессы, такие как systemd и rsyslogd, которые являются демонами, используемыми для свопинга, монтирования и т. Д.

Точно так же мы можем перечислить открытые файлы другой файловой системы, например /var/log,

 ~]# lsof /var/log/

Команда lsof становится очень удобной в ситуации, когда команды df и du показывают разное использование диска одной и той же файловой системы, с помощью команды lsof мы можем найти файлы, которые были удалены, когда они были открыты и использовались каким-то процессом,

~]# lsof /var/log | grep -i "deleted"

Вышеупомянутая команда предоставит вам pid файлов, которые были удалены, но все еще существуют в системе в удаленном состоянии. Итак, чтобы освободить место в файловой системе, мы можем безопасно убить процесс по его pid.

Пример: 3) Список открытых файлов для команды «lsof»

Само «lsof» выдает сообщение об ошибке,

~]# lsof lsof
lsof: status error on lsof: No such file or directory
lsof 4.87

Пример: 4) Список открытых файлов для пользователей (lsof -u <user_name>)

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

Список всех открытых файлов для пользователя root

 ~]# lsof -u root | more
COMMAND    PID USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd      1 root  cwd       DIR              253,0      4096        128 /
systemd      1 root  rtd       DIR              253,0      4096        128 /
systemd      1 root  txt       REG              253,0   1620416   51034677 /usr/lib/systemd/systemd
systemd      1 root  mem       REG              253,0     20032   33628284 /usr/lib64/libuuid.so.1.3.0
systemd      1 root  mem       REG              253,0    252704   33745961 /usr/lib64/libblkid.so.1.1.0
systemd      1 root  mem       REG              253,0     90632   33628275 /usr/lib64/libz.so.1.2.7
systemd      1 root  mem       REG              253,0    153192   33618596 /usr/lib64/liblzma.so.5.0.99
systemd      1 root  mem       REG              253,0     19888   33656455 /usr/lib64/libattr.so.1.1.0
…………………………………………………………

Список открытых файлов для пользователей без полномочий root, давайте посмотрим все открытые файлы для пользователя infoit,

~]# lsof -u infoit  | more
Или
~]# lsof -l -u infoit | more
COMMAND    PID       USER   FD   TYPE             DEVICE  SIZE/OFF     NODE NAME
sshd      2657 infoit  cwd    DIR              253,0      4096      128 /
sshd      2657 infoit  rtd    DIR              253,0      4096      128 /
sshd      2657 infoit  txt    REG              253,0    815520 34698340 /usr/sbin/sshd
sshd      2657 infoit  DEL    REG                0,4              23850 /dev/zero
sshd      2657 infoit  mem    REG              253,0     15472 33831639 /usr/lib64/security/pam_lastlog.so
sshd      2657 infoit  mem    REG              253,0     68192 33628305 /usr/lib64/libbz2.so.1.0.6
sshd      2657 infoit  mem    REG              253,0    153192 33618596 /usr/lib64/liblzma.so.5.0.99
sshd      2657 infoit  mem    REG              253,0     91496 33628319 /usr/lib64/libelf-0.163.so
sftp-serv 2661 infoit  mem    REG              253,0     14608 33618582 /usr/lib64/libutil-2.17.so
sftp-serv 2661 infoit  mem    REG              253,0     61856 33863972 /usr/lib64/liblber-2.4.so.2.10.3
sftp-serv 2661 infoit  mem    REG              253,0    344224 33863974 /usr/lib64/libldap-2.4.so.2.10.3
sftp-serv 2661 infoit  mem    REG              253,0     19512 33618298 /usr/lib64/libdl-2.17.so
sftp-serv 2661 infoit  mem    REG              253,0   2516624 33657314 /usr/lib64/libcrypto.so.1.0.2k
sftp-serv 2661 infoit  mem    REG              253,0    164432 33618285 /usr/lib64/ld-2.17.so
sftp-serv 2661 infoit  0r     FIFO                0,8       0t0    24046 pipe
sftp-serv 2661 infoit  1w     FIFO                0,8       0t0    24047 pipe
sftp-serv 2661 infoit  2w     FIFO                0,8       0t0    24048 pipe
bash      2670 infoit  cwd    DIR              253,0        79 17157147 /home/infoit
………………………………………………………………………

Чтобы вывести список всех открытых файлов, кроме пользователя root, используйте ^ (символ каретки) перед пользователем root (lsof -u ^ root),

~]# lsof -u ^root | more
COMMAND    PID  TID       USER   FD      TYPE             DEVICE  SIZE/OFF     NODE NAME
dbus-daem 1662            dbus  cwd       DIR              253,0      4096      128 /
dbus-daem 1662            dbus  rtd       DIR              253,0      4096      128 /
dbus-daem 1662            dbus  txt       REG              253,0    441176 17133533 /usr/bin/dbus-daemon
dbus-daem 1662            dbus  mem       REG              253,0     57824 33618566 /usr/lib64/libnss_files-2.17.so
dbus-daem 1662            dbus  mem       REG              253,0     19512 33618298 /usr/lib64/libdl-2.17.so
dbus-daem 1662            dbus  mem       REG              253,0    398272 33628261 /usr/lib64/libpcre.so.1.2.0
dbus-daem 1662            dbus  mem       REG              253,0   2107816 33618292 /usr/lib64/libc-2.17.so
……………………………………………………………………………………………………………

Пример: 5) Список всех открытых файлов Интернета и домена UNIX (lsof -i -U)

Используйте параметр «-i -U» в команде lsof для вывода списка всех открытых файлов Интернета и домена UNIX в вашей системе, пример показан ниже.

~]# lsof -i -U
COMMAND    PID       USER   FD   TYPE             DEVICE SIZE/OFF  NODE NAME
systemd      1       root   12u  unix 0xffff8800b8baab40      0t0 11075 /run/systemd/cgroups-agent
systemd      1       root   13u  unix 0xffff8800b8bab2c0      0t0 11077 /run/systemd/private
systemd      1       root   42u  IPv4              16576      0t0   TCP *:sunrpc (LISTEN)
systemd      1       root   43u  IPv4              16577      0t0   UDP *:sunrpc
rpcbind   1633        rpc    3u  unix 0xffff8800bab8cf00      0t0 16574 /var/run/rpcbind.sock
rpcbind   1633        rpc    4u  IPv4              16576      0t0   TCP *:sunrpc (LISTEN)
rpcbind   1633        rpc    5u  IPv4              16577      0t0   UDP *:sunrpc
rpcbind   1633        rpc    6u  IPv6              16578      0t0   TCP *:sunrpc (LISTEN)
rpcbind   1633        rpc    7u  IPv6              16579      0t0   UDP *:sunrpc
rpcbind   1633        rpc   10u  IPv4              16649      0t0   UDP *:960
sshd      2532       root    3u  IPv4              21120      0t0   TCP 192.168.1.6:ssh->192.168.1.5:65110 (ESTABLISHED)
sshd      2532       root    4u  unix 0xffff8800bbef3a40      0t0 21260 socket
sshd      2532       root    8u  unix 0xffff8800b8afd680      0t0 21298 /tmp/ssh-QHz9BdtRvt/agent.2532
sshd      2536       root    3u  IPv4              21191      0t0   TCP 192.168.1.6:ssh->192.168.1.5:65112 (ESTABLISHED)
sshd      2536       root    4u  unix 0xffff8800b8afd2c0      0t0 21363 socket
………………………………………………………………………………………………………………

Пример: 6) Список всех открытых сетевых файлов IPv4 (lsof -i 4)

Используйте опцию «-i -4» в команде lsof, чтобы вывести список всех открытых сетевых файлов для IPv4,

 ~]# lsof -i 4
COMMAND   PID       USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd     1       root   42u  IPv4  16576      0t0  TCP *:sunrpc (LISTEN)
systemd     1       root   43u  IPv4  16577      0t0  UDP *:sunrpc
rpcbind  1633        rpc    4u  IPv4  16576      0t0  TCP *:sunrpc (LISTEN)
sshd     2258       root    3u  IPv4  19493      0t0  TCP *:ssh (LISTEN)
master   2360       root   13u  IPv4  20087      0t0  TCP localhost:smtp (LISTEN)
dhclient 2494       root    6u  IPv4  20983      0t0  UDP *:bootpc
dhclient 2494       root   20u  IPv4  20951      0t0  UDP *:24884
dhclient 2514       root    6u  IPv4  20866      0t0  UDP *:bootpc
sshd     2532       root    3u  IPv4  21120      0t0  TCP 192.168.1.6:ssh->192.168.1.5:65110 (ESTABLISHED)
sshd     2536       root    3u  IPv4  21191      0t0  TCP 192.168.1.6:ssh->192.168.1.5:65112 (ESTABLISHED)
sshd     2621       root    3u  IPv4  23506      0t0  TCP 192.168.1.6:ssh->192.168.1.9:65422 (ESTABLISHED)
sshd     2655       root    3u  IPv4  23863      0t0  TCP 192.168.1.6:ssh->192.168.1.9:49992 (ESTABLISHED)
sshd     2657 infoit    3u  IPv4  23795      0t0  TCP 192.168.1.6:ssh->192.168.1.9:49990 (ESTABLISHED)
sshd     2660 infoit    3u  IPv4  23863      0t0  TCP 192.168.1.6:ssh->192.168.1.9:49992 (ESTABLISHED)
 ~]#

Чтобы перечислить все открытые сетевые файлы IPv4, используемые определенным процессом, чей идентификатор процесса «any_number», приведены ниже.

Предположим, мы хотим перечислить все сетевые файлы IPv4 для процесса rpcbind.

Синтаксис : # lsof i 4 -a -p {process_pid}

 ~]# lsof -i 4 -a  -p 1633
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1633  rpc    4u  IPv4  16576      0t0  TCP *:sunrpc (LISTEN)
rpcbind 1633  rpc    5u  IPv4  16577      0t0  UDP *:sunrpc
rpcbind 1633  rpc   10u  IPv4  16649      0t0  UDP *:960
 ~]#

Пример: 7) Список всех открытых сетевых файлов для IPv6 (lsof -i 6)

Предполагая, что домен ipv6 поддерживается, вывод lsof будет примерно таким, как показано ниже:

 ~]# lsof -i 6
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd     1   root   44u  IPv6  16578      0t0  TCP *:sunrpc (LISTEN)
systemd     1   root   46u  IPv6  16579      0t0  UDP *:sunrpc
rpcbind  1633    rpc    6u  IPv6  16578      0t0  TCP *:sunrpc (LISTEN)
rpcbind  1633    rpc    7u  IPv6  16579      0t0  UDP *:sunrpc
rpcbind  1633    rpc   11u  IPv6  16650      0t0  UDP *:960
sshd     2258   root    4u  IPv6  19504      0t0  TCP *:ssh (LISTEN)
master   2360   root   14u  IPv6  20088      0t0  TCP localhost:smtp (LISTEN)
dhclient 2494   root   21u  IPv6  20952      0t0  UDP *:16498
dhclient 2514   root   21u  IPv6  20823      0t0  UDP *:34955
httpd    2594   root    4u  IPv6  22703      0t0  TCP *:http (LISTEN)
httpd    2595 apache    4u  IPv6  22703      0t0  TCP *:http (LISTEN)
httpd    2596 apache    4u  IPv6  22703      0t0  TCP *:http (LISTEN)
httpd    2597 apache    4u  IPv6  22703      0t0  TCP *:http (LISTEN)
httpd    2598 apache    4u  IPv6  22703      0t0  TCP *:http (LISTEN)
httpd    2599 apache    4u  IPv6  22703      0t0  TCP *:http (LISTEN)
~]#

Пример: 8) Список всех процессов TCP и UDP, запущенных на определенном порту (lsof -i TCP / UDP: порт)

Предположим, мы хотим вывести список всех TCP-процессов, запущенных на 80-м порту, используйте следующую команду

~]# lsof -i TCP:80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   2594   root    4u  IPv6  22703      0t0  TCP *:http (LISTEN)
httpd   2595 apache    4u  IPv6  22703      0t0  TCP *:http (LISTEN)
httpd   2596 apache    4u  IPv6  22703      0t0  TCP *:http (LISTEN)
httpd   2597 apache    4u  IPv6  22703      0t0  TCP *:http (LISTEN)
httpd   2598 apache    4u  IPv6  22703      0t0  TCP *:http (LISTEN)
httpd   2599 apache    4u  IPv6  22703      0t0  TCP *:http (LISTEN)
~]#

Чтобы вывести список всех открытых файлов на TCP-порту из диапазона портов (от 1 до 1048), используйте следующую команду

~]# lsof -i TCP:1-1048
COMMAND  PID       USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd    1       root   41u  IPv4  16863      0t0  TCP *:sunrpc (LISTEN)
systemd    1       root   44u  IPv6  16865      0t0  TCP *:sunrpc (LISTEN)
rpcbind 1663        rpc    4u  IPv4  16863      0t0  TCP *:sunrpc (LISTEN)
rpcbind 1663        rpc    6u  IPv6  16865      0t0  TCP *:sunrpc (LISTEN)
sshd    2294       root    3u  IPv4  19949      0t0  TCP *:ssh (LISTEN)
sshd    2294       root    4u  IPv6  19965      0t0  TCP *:ssh (LISTEN)
master  2433       root   13u  IPv4  21026      0t0  TCP localhost:smtp (LISTEN)
master  2433       root   14u  IPv6  21027      0t0  TCP localhost:smtp (LISTEN)
sshd    2600       root    3u  IPv4  21737      0t0  TCP 192.168.1.3:ssh->192.168.1.9:52393 (ESTABLISHED)
sshd    2659       root    3u  IPv4  22056      0t0  TCP 192.168.1.3:ssh->192.168.1.9:52486 (ESTABLISHED)
sshd    2663       root    3u  IPv4  22123      0t0  TCP 192.168.1.3:ssh->192.168.1.9:52489 (ESTABLISHED)
httpd   2837       root    4u  IPv6  26112      0t0  TCP *:http (LISTEN)
httpd   2838     apache    4u  IPv6  26112      0t0  TCP *:http (LISTEN)
httpd   2839     apache    4u  IPv6  26112      0t0  TCP *:http (LISTEN)
httpd   2840     apache    4u  IPv6  26112      0t0  TCP *:http (LISTEN)
httpd   2841     apache    4u  IPv6  26112      0t0  TCP *:http (LISTEN)
httpd   2842     apache    4u  IPv6  26112      0t0  TCP *:http (LISTEN)
sshd    2891       root    3u  IPv4  26896      0t0  TCP 192.168.1.3:ssh->192.168.1.9:53541 (ESTABLISHED)
sshd    2895 infoit    3u  IPv4  26896      0t0  TCP 192.168.1.3:ssh->192.168.1.9:53541 (ESTABLISHED)
~]#

Чтобы вывести список всех процессов UDP, запущенных на определенном порту, используйте следующую команду

~]# lsof -i UDP:16498
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dhclient 2494 root   21u  IPv6  20952      0t0  UDP *:16498
~]#

Примечание . Чтобы вывести список всех открытых процессов UDP в вашей системе Linux, используйте команду « lsof -i UDP ».

Пример: 9) Список всех открытых файлов для определенного устройства (lsof <device_name>)

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

Примечание: в этом случае тип устройства является виртуальным, обычно это может быть тип / dev / hd <number> / sd {number}

 ~]# lsof  /dev/vda1 | more
COMMAND    PID       USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
systemd      1       root  cwd    DIR  253,1     4096       2 /
systemd      1       root  rtd    DIR  253,1     4096       2 /
systemd      1       root  txt    REG  253,1  1577264  262271 /lib/systemd/systemd
systemd      1       root  mem    REG  253,1    18976  262252 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
systemd      1       root  mem    REG  253,1   262408  262245 /lib/x86_64-linux-gnu/libblkid.so.1.1.0
systemd      1       root  mem    REG  253,1    14608  266364 /lib/x86_64-linux-gnu/libdl-2.23.so
systemd      1       root  mem    REG  253,1   456632  262207 /lib/x86_64-linux-gnu/libpcre.so.3.13.2
systemd      1       root  mem    REG  253,1  1868984  266362 /lib/x86_64-linux-gnu/libc-2.23.so
systemd      1       root  mem    REG  253,1   138696  266361 /lib/x86_64-linux-gnu/libpthread-2.23.so
systemd      1       root  mem    REG  253,1   286824  261756 /lib/x86_64-linux-gnu/libmount.so.1.1.0

Пример: 10) Список процессов с открытыми файлами в файловой системе NFS

Бывают ситуации, когда вы смонтировали файловую систему nfs на свой Linux-сервер, но сервер nfs недоступен и вы хотите вывести список всех процессов с открытыми файлами в этой файловой системе nfs,

~]# lsof -b <nfs-share-mount-point>

Пример: 11) Список открытых файлов, связанных с терминалом (lsof / dev / tty {number})

Следующая команда используется для всех открытых файлов на / dev / tty1.

Примечание . В этом случае тип терминала — «tty1». Также можно использовать любой другой тип терминала, например / dev / tty <number>

~]# lsof /dev/tty1
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    2442 root    0u   CHR    4,1      0t0 4689 /dev/tty1
bash    2442 root    1u   CHR    4,1      0t0 4689 /dev/tty1
bash    2442 root    2u   CHR    4,1      0t0 4689 /dev/tty1
bash    2442 root  255u   CHR    4,1      0t0 4689 /dev/tty1
~]#

Пример: 12) Список PID, имени команды, дескриптора файла, номера устройства и номера индексного дескриптора файла (lsof -FpcfDi)

Один из интересных вариантов в «lsof» для получения вывода поля PID (P) и имени команды (c) для каждого процесса, дескриптора файла (f), номера файлового устройства (D) и номера индексного дескриптора файла (i) для каждого файла. Пример каждого процесса показан ниже

 ~]# lsof -FpcfDi | more
p1
csystemd
fcwd
D0xfd00
i128
frtd
D0xfd00
i128
ftxt
D0xfd00
i51034677
fmem
D0xfd00
i33628284
………………

Примечание. Отображается длинный список вывода, но он сокращен для экономии места.

Пример: 13) Список всех сетевых подключений (lsof -i)

Используйте опцию «-i» в команде lsof, чтобы вывести список всех связанных с сетью процессов или команд, пример показан ниже,

 ~]# lsof -i
COMMAND    PID       USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd      1       root   41u  IPv4  16863      0t0  TCP *:sunrpc (LISTEN)
systemd      1       root   43u  IPv4  16864      0t0  UDP *:sunrpc
rpcbind   1663        rpc    4u  IPv4  16863      0t0  TCP *:sunrpc (LISTEN)
rpcbind   1663        rpc    5u  IPv4  16864      0t0  UDP *:sunrpc
rpcbind   1663        rpc   11u  IPv6  17051      0t0  UDP *:988
sshd      2294       root    3u  IPv4  19949      0t0  TCP *:ssh (LISTEN)
sshd      2294       root    4u  IPv6  19965      0t0  TCP *:ssh (LISTEN)
rpc.statd 2300    rpcuser   10u  IPv6  19974      0t0  UDP *:48486
rpc.statd 2300    rpcuser   11u  IPv6  20045      0t0  TCP *:39334 (LISTEN)
rpc.mount 2311       root    7u  IPv4  19897      0t0  UDP *:mountd
rpc.mount 2311       root    8u  IPv4  19911      0t0  TCP *:mountd (LISTEN)
master    2433       root   13u  IPv4  21026      0t0  TCP localhost:smtp (LISTEN)
master    2433       root   14u  IPv6  21027      0t0  TCP localhost:smtp (LISTEN)
dhclient  2563       root    6u  IPv4  21589      0t0  UDP *:bootpc
dhclient  2583       root   21u  IPv6  21365      0t0  UDP *:10368
sshd      2600       root    3u  IPv4  21737      0t0  TCP 192.168.1.3:ssh->192.168.1.9:52393 (ESTABLISHED)
sshd      2659       root    3u  IPv4  22056      0t0  TCP 192.168.1.3:ssh->192.168.1.9:52486 (ESTABLISHED)
~]#

Пример: 14) Найдите файл сокета IPv4 / IPv6

Чтобы найти файл сокета IPv4, используйте следующую команду, замените IP-адрес на IP-адрес вашей системы.

 ~]# lsof -i@192.168.1.3
COMMAND  PID       USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    2600       root    3u  IPv4  21737      0t0  TCP 192.168.1.3:ssh->192.168.1.9:52393 (ESTABLISHED)
sshd    2659       root    3u  IPv4  22056      0t0  TCP 192.168.1.3:ssh->192.168.1.9:52486 (ESTABLISHED)
sshd    2663       root    3u  IPv4  22123      0t0  TCP 192.168.1.3:ssh->192.168.1.9:52489 (ESTABLISHED)
sshd    2724       root    3u  IPv4  25004      0t0  TCP 192.168.1.3:ssh->192.168.1.9:52848 (ESTABLISHED)
sshd    2728 infoit    3u  IPv4  25004      0t0  TCP 192.168.1.3:ssh->192.168.1.9:52848 (ESTABLISHED)
 ~]#

Чтобы найти файл сокета IP версии 6 по соответствующему числовому адресу в форме двоеточия, в котором есть ряд нулей — например, адрес обратной связи (127.0.0.1), используйте команду и параметры ниже:

 ~]# lsof -i@[::1]
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
master  2433 root   14u  IPv6  21027      0t0  TCP localhost:smtp (LISTEN)
 ~]#

Пример: 15) Список всех процессов или команд, принадлежащих идентификатору процесса (lsof -p <pid>)

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

 ~]# lsof -p 2842 | more
COMMAND  PID   USER   FD      TYPE             DEVICE SIZE/OFF     NODE NAME
httpd   2842 apache  cwd       DIR              253,0     4096      128 /
httpd   2842 apache  rtd       DIR              253,0     4096      128 /
httpd   2842 apache  txt       REG              253,0   523680 34641136 /usr/sbin/httpd
httpd   2842 apache  mem       REG              253,0   110808 33618576 /usr/lib64/libresolv-2.17.so
httpd   2842 apache  mem       REG              253,0    27512 33618564 /usr/lib64/libnss_dns-2.17.so
httpd   2842 apache  mem       REG              253,0    57824 33618566 /usr/lib64/libnss_files-2.17.so
httpd   2842 apache  mem       REG              253,0    27808 17080385 /usr/lib64/httpd/modules/mod_cgi.so
httpd   2842 apache  mem       REG              253,0    68192 33628305 /usr/lib64/libbz2.so.1.0.6
………………………………………………

Пример: 16) Убить все процессы, принадлежащие определенному пользователю.

Команда lsof становится очень удобной, когда мы хотим убить весь процесс, принадлежащий определенному пользователю, в приведенном ниже примере будет уничтожен весь процесс, принадлежащий пользователю infoit.

~]# kill -9 `lsof -t -u infoit`
~]#

Пример: 17) Список всех открытых файлов в определенном каталоге (lsod + D <directory-path>)

Предположим, мы хотим перечислить все открытые файлы в каталоге / var / log, а затем использовать следующую команду lsof,

 ~]# lsof +D /var/log/
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
auditd    1635   root    4w   REG  253,0  1177238 51031316 /var/log/audit/audit.log
wpa_suppl 1840   root    3w   REG  253,0      240   392280 /var/log/wpa_supplicant.log
tuned     2295   root    3w   REG  253,0     6000 17713597 /var/log/tuned/tuned.log
rsyslogd  2296   root    6w   REG  253,0     7118   392279 /var/log/cron
rsyslogd  2296   root    7w   REG  253,0   449328   338975 /var/log/messages
rsyslogd  2296   root    8w   REG  253,0    26038   338976 /var/log/secure
rsyslogd  2296   root    9w   REG  253,0     1576   338977 /var/log/maillog
rsyslogd  2296   root   10w   REG  253,0     9458      138 /var/log/boot.log
httpd     2837   root    2w   REG  253,0     2829 34768157 /var/log/httpd/error_log
httpd     2837   root    7w   REG  253,0        0 34824416 /var/log/httpd/access_log
httpd     2838 apache    2w   REG  253,0     2829 34768157 /var/log/httpd/error_log
httpd     2838 apache    7w   REG  253,0        0 34824416 /var/log/httpd/access_log
httpd     2839 apache    2w   REG  253,0     2829 34768157 /var/log/httpd/error_log
httpd     2839 apache    7w   REG  253,0        0 34824416 /var/log/httpd/access_log
httpd     2840 apache    2w   REG  253,0     2829 34768157 /var/log/httpd/error_log
httpd     2840 apache    7w   REG  253,0        0 34824416 /var/log/httpd/access_log
httpd     2841 apache    2w   REG  253,0     2829 34768157 /var/log/httpd/error_log
httpd     2841 apache    7w   REG  253,0        0 34824416 /var/log/httpd/access_log
httpd     2842 apache    2w   REG  253,0     2829 34768157 /var/log/httpd/error_log
httpd     2842 apache    7w   REG  253,0        0 34824416 /var/log/httpd/access_log
~]#

Примечание: в приведенной выше команде, если мы используем опцию + D, то lsof будет рекурсивно перечислять все открытые файлы каталога, и если вы не хотите рекурсивно перечислять открытые файлы каталога, используйте опцию «+ d».

Пример: 18) «lsof», чтобы проверить, кто открыл файл журнала (чтобы найти PID)

Следующая опция команды используется, чтобы узнать, кто открыл файл /var/log/httpd/access.log и каков PID этого процесса. А затем с помощью команды «ps -ef» мы можем найти точного пользователя

 ~]# lsof -t /var/log/httpd/access_log
3109
3110
3111
3112
3113
3114
 ~]#

~]# ps -ef | grep -E "3109|3110|3111|3112|3113|3114" | grep -v grep
or
~]# ps -fp "$(lsof -t /var/log/httpd/access_log | xargs echo)"
root      3109     1  0 03:36 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache    3110  3109  0 03:36 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache    3111  3109  0 03:36 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache    3112  3109  0 03:36 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache    3113  3109  0 03:36 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache    3114  3109  0 03:36 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
 ~]#

Многие параметры команды «lsof» можно комбинировать для различных целей, как показано ниже, некоторые комбинации флагов «-c», «-u» и «-I». Для получения более подробной информации обратитесь к странице руководства.

Приведенная ниже комбинация команд каждую секунду будет выводить информацию о домашнем каталоге «infoit», который все файлы открывались повторно.

~]# lsof -u infoit -c init -a -r1
=======
COMMAND   PID       USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
inita.sh 2971 infoit  cwd    DIR    8,1     4096  393218 /home/infoit
inita.sh 2971 infoit  rtd    DIR    8,1     4096       2 /
inita.sh 2971 infoit  txt    REG    8,1    83344  524367 /bin/dash
inita.sh 2971 infoit  mem    REG    8,1  1434567 1443695 /lib/i386-linux-gnu/libc-2.13.so
……………………………………………………………………………

Заключение:

Как упоминалось во вводном разделе, «lsof» — очень мощная и полезная команда в дистрибутивах на базе Linux. Эту команду и перечисленные параметры можно использовать для различных целей, таких как отладка, устранение неполадок и сортировка процессов Linux. Упомянутые варианты и комбинации, если попробуете, помогут установить полное понимание команды «lsof». Другие команды, такие как lstat , stat и ls, также можно использовать в сочетании с командой «lsof».

Рекомендуемый контент


На терминальном сервере человек 10 запускают приложение, пусть это будет CALC.exe, и естетсвенно, в процессах 10 ОДИНАКОВЫХ процессов.

Здесь мне подсказали, как узнать путь к файлу нужного процесса.

А как сделать тоже самое, только если пользователя зовут ВАСЯ, то процесс запущенный ВАСЕЙ и находился?

Дух сообщества's user avatar

задан 1 фев 2011 в 14:57

Eugene's user avatar

2

Самый простой вариант с помощью WMI:

string processName = "calc.exe";
string currentUser = WindowsIdentity.GetCurrent().Name.Split('\')[1];

string query = "Select * from Win32_Process Where Name = "" + processName + """;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection processes = searcher.Get();

foreach (ManagementObject proc in processes)
{
    string owner;
    string[] argList = new string[] { string.Empty };
    int returnVal = Convert.ToInt32(proc.InvokeMethod("GetOwner", argList));
    if (returnVal == 0)
        owner = argList[0];
    else
        continue;

    if (owner != currentUser)
        continue;

    // Вот тут-то и остался только нужный процесс!
    string path = proc["ExecutablePath"].ToString();
}

ответ дан 1 фев 2011 в 15:16

kirelagin's user avatar

kirelaginkirelagin

4,50821 серебряный знак29 бронзовых знаков

1

На WinApi проблема решалась еще в первом вопросе)
Поиск по msdn выдал сразу:

Получаем токен процесса по хендлу: OpenProcessToken(…)

SID пользователя — в информации о токене: GetTokenInformation(…)


@kirelagin:

Оригинал с мсдн:

BOOL WINAPI OpenProcessToken(
  __in   HANDLE ProcessHandle,
  __in   DWORD DesiredAccess,
  __out  PHANDLE TokenHandle
);

В c#:

[DllImport("Advapi32.dll", EntryPoint = "OpenProcessToken")]
private static extern bool OpenProcessToken(int ProcessHandle, int DesiredAccess, int* TokenHandle);

ответ дан 1 фев 2011 в 15:30

Бодров Андрей's user avatar

Бодров АндрейБодров Андрей

3711 золотой знак2 серебряных знака13 бронзовых знаков

1

Понравилась статья? Поделить с друзьями:
  • Как найти неисправность в интернете
  • Как правильно составить опись для посылки
  • Как найти углы параллелограмма зная два угла
  • Как найти большую кровать
  • Как найти телефон молитва