команда lsof

Thank you for reading this post, don't forget to subscribe!

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

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

 

Примеры команды lsof

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

 

Вывод дол­жен быть таким:

 

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

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

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

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

  • REG – обыч­ный файл
  • DIR – Справочник
  • CHR – спе­ци­аль­ный файл символов
  • FIFO – пер­вый на первом

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

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

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

 

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

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

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

 

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

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

 

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

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

 

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

 

или вот так:

 

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

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

 

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

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

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

 

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

 

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

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

 

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

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

 

Читать  Как очи­стить память под­кач­ки в Linux

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

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

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

 

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

 

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

 

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

использование оператора отрицания с lsof

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

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

 

Коман­да lsof ста­но­вит­ся еще более полез­ной, когда вы исполь­зу­е­те ее с коман­дой grep.