lsof - chỉ giới hạn đầu ra cho các tệp vật lý - làm thế nào?


30

Làm thế nào để tôi nói với lsof Tôi chỉ cần liệt kê các tệp vật lý (không phải ổ cắm, không kết nối TCP / IP, chỉ các tệp vật lý)?


Đầu tiên bạn cần xác định những gì bạn cần nó cho. Nói "tập tin vật lý" là quá chung chung. lsof sẽ cung cấp cho bạn các tệp đã được mở bằng một bộ mô tả tệp. nó sẽ cung cấp cho bạn các tệp đã được mở dưới dạng các tệp ánh xạ bộ nhớ theo các luồng. nó sẽ cung cấp cho bạn các tệp thư viện đã được mở bởi các quy trình. tất cả đều là các tệp vật lý, nhưng cách chúng đang được sử dụng là khác nhau.
Michael Martinez

Câu trả lời:


37

Chỉ cần xem qua một số trang man, có vẻ như bạn sử dụng lệnh:

sudo lsof /

Điều này sẽ liệt kê tất cả các tệp đang mở trong thư mục /, đó là tất cả mọi thứ trên hệ thống tệp Linux. Chỉ cần thử nghiệm và nó chỉ hiển thị REG và DIR.

Ví dụ khác:

lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /

0-999 giới hạn nó trong các tệp có số mô tả tệp.


2
Sẽ bao gồm cả FIFO.
Kyle Brandt

1
Đẹp và đơn giản. Nếu bạn chỉ cần cột cuối cùng, bạn có thể nối thêm | awk {'in $ 9'} Thú vị. Tôi cũng không nhận được fifo trong sản phẩm của mình. Fedora 12 và CentOS 5.3
ví dụ:

CentOS 5.2 và Ubuntu 9.04 trả lại cho tôi năm mươi, có thể là một sự thay đổi, nhưng bạn có chắc chắn có fifos không? Tôi sẽ grep cho nó đầu tiên và chắc chắn rằng nó ở đó, hơn là thử/
Kyle Brandt

Ngoài ra, tôi chỉ biết đùa, có vẻ như anh ta không muốn ồn ào, và có lẽ sẽ không có nhiều fifos.
Kyle Brandt

4
lsof / chỉ bao gồm các tệp trên hệ thống tập tin gốc. Nếu bạn có nhiều hệ thống tập tin được gắn kết, chúng sẽ không xuất hiện trong đầu ra. Tôi thấy cách tốt nhất là chỉ sử dụng grep.
James

9

Có thể có một công tắc, nhưng nếu bạn không lọc nó thông qua grep, bạn có thể làm sudo lsof | egrep 'REG|DIR', giả sử bằng "tệp vật lý", bạn có nghĩa là các tệp và thư mục thông thường.

Xem phần OUTPUT :: TYPE của trang man man lsofđể biết tất cả các loại có thể có trong cột đó.


24
Có thể có một chuyển đổi, nhưng trang này đọc giống như luận án phd của ai đó ... :)
Cawflands

1
Phải ... người đàn ông cực kỳ khó đọc ...; p)
Vladislav Rastrusny

+1 bình luận đó. :)
egorgry

trên một máy chủ vpn có đủ khách hàng, lsof sẽ không quay lại, do đó, greping không phải là một lựa chọn cho tôi
Ohad Cohen

@OhadCohen lsof sẽ trở lại nếu bạn hạn chế những gì nó đang tìm kiếm. Xem "FD" trong trang web (mem, cwd, pd, v.v.)
Michael Martinez

2

Đây là những gì tôi đã làm mà làm việc hoàn hảo cho tôi:

lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u

Các -F ntùy chọn để lsofsẽ gây ra nó để chỉ in ra tên của các tập tin mở. Mỗi dòng đầu ra có tên của một tệp đang mở sẽ bắt đầu bằng một ký tự n theo sau là tên . Các tệp thông thường sẽ luôn là tên tuyệt đối, đủ điều kiện của tệp. Các grep ^n/sẽ chỉ chọn những dòng với một tên bắt đầu với một /(có nghĩa là một, tên file đầy đủ trình độ tuyệt đối); do đó loại bỏ những thứ như cổng mở, ổ cắm, đường ống (như FIFO), v.v ... cut -c2-Sẽ loại bỏ ký tự đầu tiên n, chỉ, chỉ để lại tên tệp. Cuối cùng, sort -usẽ loại bỏ bất kỳ mục trùng lặp.

Một cảnh báo, điều này sẽ bao gồm các tệp không thường xuyên miễn là tên của chúng bắt đầu bằng a /. Ví dụ: tất cả các tệp bắt đầu bằng các mục sau đây sẽ được bao gồm:

  • / dev
  • / Proc
  • / sys

Và có thể có những người khác tùy thuộc vào hệ điều hành của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.