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ý)?
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ý)?
Câu trả lời:
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.
/
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 đó.
Đâ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 n
tùy chọn để lsof
sẽ 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 -u
sẽ 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:
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.