Linux таблица открытых файлов

Содержание
  1. 10 примеров команд lsof в Linux
  2. 1. Список всех открытых файлов с помощью команды lsof
  3. 2. Список открытых файлов конкретного пользователя
  4. 3. Найти процессы, запущенные на определенном порту
  5. 4. Список только IPv4 и IPv6 открытых файлов
  6. 5. Список открытых файлов диапазона TCP-портов 1-1024
  7. 6. Исключение пользователя с помощью символа ‘^’
  8. 7. Узнайте, кто какие файлы смотрит и какие команды использует.
  9. 8. Список всех сетевых подключений
  10. 9. Поиск по PID
  11. 10. Убить все активности конкретного пользователя
  12. 7 примеров команды lsof в Linux
  13. Примеры команды l sof
  14. 1. Перечислите все процессы, которые открыли файл
  15. 2. Список всех файлов, открытых пользователем
  16. 3. Список всех открытых файлов в каталоге
  17. 4. Перечислите все открытые файлы процессом
  18. 5. Список всех файлов, открытых командой
  19. 6. Найти открытый пользователем и командой или процессом
  20. 7. Перечислите сетевые соединения и порты с помощью команды lsof
  21. Бонусный совет: использование оператора отрицания с lsof

10 примеров команд lsof в Linux

10 примеров команд lsof в Linux

Мы продолжаем цикл статей о командах Linux, и в этой статье мы рассмотрим команду lsof с практическими примерами. lsof означает «LiSt Open Files«, используется для того, что бы понять, какие файлы открыты каким процессом. Как мы все знаем, Linux/Unix рассматривает все как файлы (каналы, сокеты, каталоги, устройства и т.д). Одной из причин использования команды lsof является ситуация, когда диск не может быть размонтирован, так как он говорит, что файлы используются. С помощью этой команды мы можем легко определить используемые файлы.

1. Список всех открытых файлов с помощью команды lsof

В приведенном ниже примере показан длинный список открытых файлов, которые отображают такие столбцы, как Command, PID, USER, FD, TYPE и т.д.

# lsof COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 253,0 4096 2 / init 1 root rtd DIR 253,0 4096 2 / init 1 root txt REG 253,0 145180 147164 /sbin/init init 1 root mem REG 253,0 1889704 190149 /lib/libc-2.12.so init 1 root 0u CHR 1,3 0t0 3764 /dev/null init 1 root 1u CHR 1,3 0t0 3764 /dev/null init 1 root 2u CHR 1,3 0t0 3764 /dev/null init 1 root 3r FIFO 0,8 0t0 8449 pipe init 1 root 4w FIFO 0,8 0t0 8449 pipe init 1 root 5r DIR 0,10 0 1 inotify init 1 root 6r DIR 0,10 0 1 inotify init 1 root 7u unix 0xc1513880 0t0 8450 socket

Разделы и их значения не требуют пояснений. Однако мы рассмотрим столбцы FD и TYPE более подробно.

FD – обозначает дескриптор файла и может иметь такие значения, как:

  • cwd – текущий рабочий каталог
  • rtd – корневой каталог
  • txt – текст программы (код и данные)
  • mem – файл памяти

Также в столбце FD номера, например 1u — это фактический дескриптор файла, за которым следуют u,r,w как режим доступа:

TYPE — файлов и их идентификация.

2. Список открытых файлов конкретного пользователя

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

# lsof -u tecmint COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1838 tecmint cwd DIR 253,0 4096 2 / sshd 1838 tecmint rtd DIR 253,0 4096 2 / sshd 1838 tecmint txt REG 253,0 532336 188129 /usr/sbin/sshd sshd 1838 tecmint mem REG 253,0 19784 190237 /lib/libdl-2.12.so sshd 1838 tecmint mem REG 253,0 122436 190247 /lib/libselinux.so.1 sshd 1838 tecmint mem REG 253,0 255968 190256 /lib/libgssapi_krb5.so.2.2 sshd 1838 tecmint mem REG 253,0 874580 190255 /lib/libkrb5.so.3.3

3. Найти процессы, запущенные на определенном порту

Чтобы узнать все запущенные процессы на определенном порту, просто используйте следующую команду с опцией -i. В приведенном ниже примере будут перечислены все запущенные процессы на 22 порту.

# lsof -i TCP:22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1471 root 3u IPv4 12683 0t0 TCP *:ssh (LISTEN) sshd 1471 root 4u IPv6 12685 0t0 TCP *:ssh (LISTEN)

4. Список только IPv4 и IPv6 открытых файлов

В приведенном ниже примере показаны только IPv4 и IPv6 сетевые файлы.

# lsof -i 4 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 1203 rpc 6u IPv4 11326 0t0 UDP *:sunrpc rpcbind 1203 rpc 7u IPv4 11330 0t0 UDP *:954 rpcbind 1203 rpc 8u IPv4 11331 0t0 TCP *:sunrpc (LISTEN) avahi-dae 1241 avahi 13u IPv4 11579 0t0 UDP *:mdns avahi-dae 1241 avahi 14u IPv4 11580 0t0 UDP *:58600 # lsof -i 6 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 1203 rpc 9u IPv6 11333 0t0 UDP *:sunrpc rpcbind 1203 rpc 10u IPv6 11335 0t0 UDP *:954 rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN) rpc.statd 1277 rpcuser 10u IPv6 11858 0t0 UDP *:55800 rpc.statd 1277 rpcuser 11u IPv6 11862 0t0 TCP *:56428 (LISTEN) cupsd 1346 root 6u IPv6 12112 0t0 TCP localhost:ipp (LISTEN)

5. Список открытых файлов диапазона TCP-портов 1-1024

Список всех запущенных процессов открытых файлов TCP в диапазоне 1-1024.

# lsof -i TCP:1-1024 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN) cupsd 1346 root 7u IPv4 12113 0t0 TCP localhost:ipp (LISTEN) sshd 1471 root 4u IPv6 12685 0t0 TCP *:ssh (LISTEN) master 1551 root 13u IPv6 12898 0t0 TCP localhost:smtp (LISTEN) sshd 1834 root 3r IPv4 15101 0t0 TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED) sshd 1838 tecmint 3u IPv4 15101 0t0 TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED) sshd 1871 root 3r IPv4 15842 0t0 TCP 192.168.0.2:ssh->192.168.0.1:groove (ESTABLISHED) httpd 1918 root 5u IPv6 15991 0t0 TCP *:http (LISTEN) httpd 1918 root 7u IPv6 15995 0t0 TCP *:https (LISTEN)

6. Исключение пользователя с помощью символа ‘^’

Здесь мы исключили пользователя root. Вы можете исключить любого пользователя, используя команду ‘^‘ как показано выше.

# lsof -i -u^root COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 1203 rpc 6u IPv4 11326 0t0 UDP *:sunrpc rpcbind 1203 rpc 7u IPv4 11330 0t0 UDP *:954 rpcbind 1203 rpc 8u IPv4 11331 0t0 TCP *:sunrpc (LISTEN) rpcbind 1203 rpc 9u IPv6 11333 0t0 UDP *:sunrpc rpcbind 1203 rpc 10u IPv6 11335 0t0 UDP *:954 rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN) avahi-dae 1241 avahi 13u IPv4 11579 0t0 UDP *:mdns avahi-dae 1241 avahi 14u IPv4 11580 0t0 UDP *:58600 rpc.statd 1277 rpcuser 5r IPv4 11836 0t0 UDP *:soap-beep rpc.statd 1277 rpcuser 8u IPv4 11850 0t0 UDP *:55146 rpc.statd 1277 rpcuser 9u IPv4 11854 0t0 TCP *:32981 (LISTEN) rpc.statd 1277 rpcuser 10u IPv6 11858 0t0 UDP *:55800 rpc.statd 1277 rpcuser 11u IPv6 11862 0t0 TCP *:56428 (LISTEN)

7. Узнайте, кто какие файлы смотрит и какие команды использует.

В примере ниже показано, что пользователь tecmint использует команду ping и каталог /etc.

# lsof -i -u tecmint COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 1839 tecmint cwd DIR 253,0 12288 15 /etc ping 2525 tecmint cwd DIR 253,0 12288 15 /etc

8. Список всех сетевых подключений

Следующая команда с опцией ‘-i‘ показывает список всех сетевых соединений ‘LISTENING & ESTABLISHED’.

# lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 1203 rpc 6u IPv4 11326 0t0 UDP *:sunrpc rpcbind 1203 rpc 7u IPv4 11330 0t0 UDP *:954 rpcbind 1203 rpc 11u IPv6 11336 0t0 TCP *:sunrpc (LISTEN) avahi-dae 1241 avahi 13u IPv4 11579 0t0 UDP *:mdns avahi-dae 1241 avahi 14u IPv4 11580 0t0 UDP *:58600 rpc.statd 1277 rpcuser 11u IPv6 11862 0t0 TCP *:56428 (LISTEN) cupsd 1346 root 6u IPv6 12112 0t0 TCP localhost:ipp (LISTEN) cupsd 1346 root 7u IPv4 12113 0t0 TCP localhost:ipp (LISTEN) sshd 1471 root 3u IPv4 12683 0t0 TCP *:ssh (LISTEN) master 1551 root 12u IPv4 12896 0t0 TCP localhost:smtp (LISTEN) master 1551 root 13u IPv6 12898 0t0 TCP localhost:smtp (LISTEN) sshd 1834 root 3r IPv4 15101 0t0 TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED) httpd 1918 root 5u IPv6 15991 0t0 TCP *:http (LISTEN) httpd 1918 root 7u IPv6 15995 0t0 TCP *:https (LISTEN) clock-app 2362 narad 21u IPv4 22591 0t0 TCP 192.168.0.2:45284->www.gov.com:http (CLOSE_WAIT) chrome 2377 narad 61u IPv4 25862 0t0 TCP 192.168.0.2:33358->maa03s04-in-f3.1e100.net:http (ESTABLISHED) chrome 2377 narad 80u IPv4 25866 0t0 TCP 192.168.0.2:36405->bom03s01-in-f15.1e100.net:http (ESTABLISHED)

9. Поиск по PID

В приведенном ниже примере показан только PID is 1 [One].

# lsof -p 1 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME init 1 root cwd DIR 253,0 4096 2 / init 1 root rtd DIR 253,0 4096 2 / init 1 root txt REG 253,0 145180 147164 /sbin/init init 1 root mem REG 253,0 1889704 190149 /lib/libc-2.12.so init 1 root mem REG 253,0 142472 189970 /lib/ld-2.12.so

10. Убить все активности конкретного пользователя

Иногда вам может потребоваться убить все процессы определенного пользователя. Приведенная ниже команда убьет все процессы пользователя tecmint.

Читайте также:  Сведение операционных систем linux

Примечание: Здесь невозможно привести примеры всех доступных опций, это руководство лишь показывает, как можно использовать команду lsof. Вы можете обратиться к странице справки команды lsof, чтобы узнать о ней больше.

Источник

7 примеров команды lsof в Linux

7 примеров команды lsof в Linux

М ы думаем, что в какой-то момент вы задавались вопросом, есть ли способ показать открытые файлы процесса или пользователя. Хорошо, что ответ на этот вопрос это команда lsof.

Вы, наверное, уже знаете, что команда ls — это сокращение от «list». lsof обозначает «Список открытых файлов». И это именно то, что он делает, перечисляет открытые файлы по процессам, пользователям и идентификаторам процессов.

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

Примеры команды l sof

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

COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root cwd DIR 252,1 4096 2 / systemd 1 root rtd DIR 252,1 4096 2 / systemd 1 root txt REG 252,1 1595792 17384 /lib/systemd/systemd systemd 1 root mem REG 252,1 1700792 2077 /lib/x86_64-linux-gnu/libm-2.27.so

Выводы в основном говорят сами за себя, но вы все еще можете задаться вопросом о столбцах FD и TYPE.

FD означает файловый дескриптор. Некоторые из общих значений для FD:

  • cwd — Текущий рабочий каталог
  • txt — текстовые файлы
  • mem — файл с отображенной памятью
  • mmap — Устройство с отображенной памятью
  • NUMBER — фактический дескриптор файла. У этого также есть информация о том, в каком разрешении файла это открыто.

TYPE это не просто. Он определяет тип файла. Вот некоторые примеры:

  • REG — обычный файл
  • DIR — Справочник
  • CHR — специальный файл символов
  • FIFO — первый на первом
Читайте также:  Linux посмотреть разделы lvm

Доверьтесь нам. Вы не захотите запускать команду lsof без аргументов.

Почему мы это говорим? Потому что он начнет заполнять ваш экран тысячами результатов.

Если мы запускаем команду lsof на сервере Ubuntu и подсчитываем количество строк с помощью команды wc, вот результат.

Да! Вот так. В системе открыто более одиннадцати тысяч файлов, открытых различными процессами.

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

Если вы не вошли в систему как root, вывод команды lsof будет очень ограничен. Рекомендуется использовать sudo, если вы вошли в систему как пользователь без полномочий root.

1. Перечислите все процессы, которые открыли файл

Это просто Вам просто нужно указать путь к файлу.

2. Список всех файлов, открытых пользователем

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

Вы также можете указать более одного пользователя, как это:

3. Список всех открытых файлов в каталоге

Если вам интересно, какие из файлов были открыты в определенном каталоге, вы можете использовать команду lsof с опцией + D.

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

4. Перечислите все открытые файлы процессом

В этом случае вам нужно знать идентификатор процесса (pid). Если вы знаете идентификатор процесса, вы можете использовать опцию -p команды lsof, чтобы найти файлы, открытые им.

Вы также можете указать несколько идентификаторов процессов.

5. Список всех файлов, открытых командой

Это особенно полезно при отладке. Предположим, вы хотите увидеть, какие файлы используются демоном http, вам просто нужно указать имя команды (httpd в нашем примере).

Читайте также:  Найти путь до файла linux

6. Найти открытый пользователем и командой или процессом

Вы можете комбинировать параметры, такие как пользователь и команда, и процесс, используя вариант -, Думайте об этом как об операторе AND. Это дает вам дополнительный фильтр при попытке сузить область поиска.

lsof -a -u user_name -c command_name

7. Перечислите сетевые соединения и порты с помощью команды lsof

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

Вы можете подать все виды открытых портов с опцией -i:

Вывод может выглядеть так:

lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 920 root 3u IPv4 20507 0t0 TCP *:ssh (LISTEN) sshd 920 root 4u IPv6 20535 0t0 TCP *:ssh (LISTEN) docker-pr 1163 root 4u IPv6 21687 0t0 TCP *:https (LISTEN) docker-pr 1175 root 4u IPv6 21717 0t0 TCP *:http (LISTEN) sshd 7528 root 3u IPv4 39506588 0t0 TCP testing:ssh->212.91.91.19:58904 (ESTABLISHED) systemd-r 10993 systemd-resolve 12u IPv4 20901990 0t0 UDP localhost:domain systemd-r 10993 systemd-resolve 13u IPv4 20901991 0t0 TCP localhost:domain (LISTEN)

Вы также можете указать тип сетевого подключения. Например, чтобы вывести список всех открытых портов TCP, вы можете использовать:

Чтобы узнать, какой процесс использует определенный порт, вы можете указать номер порта:

Бонусный совет: использование оператора отрицания с lsof

Вы можете использовать оператор отрицания, чтобы исключить пользователя или процесс при использовании команды lsof.

Например, вы хотите перечислить все файлы, открытые пользователем, отличным от root, используйте его следующим образом:

Мы надеемся, что вы узнали что-то новое с этой статьей. Если у вас есть вопросы или предложения, пожалуйста, оставьте комментарий ниже.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

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