lsof: CẢNH BÁO: không thể thống kê hệ thống tệp fuse.gvfsd-fuse


25

Chính xác thì chuyện gì đang xảy ra ở đây?

root@bob-p7-1298c:/# ls -l /tmp/report.csv && lsof | grep "report.csv"
-rw-r--r-- 1 mysql mysql 1430 Dec  4 12:34 /tmp/report.csv
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.

Bạn có nhận được cảnh báo này khi bạn chỉ phát hành lsof(không có |và grep) không?
Sree

Cảnh báo tương tự xảy ra theo một trong hai cách, nhưng chỉ lsofxuất ra một danh sách lớn các tệp đang mở. Tôi nghĩ đó là một vấn đề phụ. Tôi nghĩ rằng có thể tệp được giữ bởi một quy trình và đó có thể là lý do tại sao root không thể di chuyển tệp, nhưng điều đó dường như không xảy ra. Do đó sự nhầm lẫn.
jmunsch

1
Vâng, có vẻ như can't stat...là một vấn đề khác. Tôi giả sử vấn đề thực sự là No such file or directorylỗi mà bạn đang nhận được. Điều này nghe có vẻ ngu ngốc, nhưng vị trí / nhà / bob / Máy tính để bàn có tồn tại không?
Sree

Câu trả lời:


30

FUSE và quyền truy cập của nó

lsoftheo mặc định, kiểm tra tất cả các hệ thống tệp được gắn kết bao gồm FUSE - hệ thống tệp được triển khai trong không gian người dùng có quyền truy cập đặc biệt trong Linux.

Như bạn có thể thấy trong câu trả lời này trên Hỏi Ubuntu, hệ thống tệp GVFS được gắn (trường hợp đặc biệt của FUSE) thường chỉ có thể truy cập đối với người dùng đã gắn nó (chủ sở hữu gvfsd-fuse). Thậm chí rootkhông thể truy cập nó. Để ghi đè hạn chế này, có thể sử dụng các tùy chọn gắn kết allow_rootallow_other. Tùy chọn cũng phải được bật trong trình nền FUSE, ví dụ được mô tả trong câu trả lời này ... nhưng trong trường hợp của bạn, bạn không cần (và không nên) thay đổi quyền truy cập.

Không bao gồm các hệ thống tập tin từ lsof

Trong trường hợp của bạn lsofkhông cần kiểm tra các hệ thống tệp GVFS để bạn có thể loại trừ các stat()cuộc gọi trên chúng bằng -etùy chọn (hoặc bạn chỉ có thể bỏ qua cảnh báo):

lsof -e /run/user/1000/gvfs

Kiểm tra các tập tin nhất định bằng lsof

Bạn đang sử dụng lsofđể có được thông tin về tất cả các quy trình đang chạy trên hệ thống của mình và chỉ sau đó bạn mới lọc được đầu ra hoàn chỉnh bằng cách sử dụng grep. Nếu bạn muốn kiểm tra chỉ một số tệp nhất định và các quy trình liên quan, hãy sử dụng -ftùy chọn không có giá trị trực tiếp theo sau đó chỉ định danh sách các tệp sau dấu phân cách "kết thúc tùy chọn" --. Điều này sẽ nhanh hơn đáng kể.

lsof -e /run/user/1000/gvfs -f -- /tmp/report.csv

Giải pháp chung

Để loại trừ tất cả các hệ thống tệp được gắn mà stat()không thành công, bạn có thể chạy một cái gì đó như thế này (trong bash):

x=(); for a in $(mount | cut -d' ' -f3); do test -e "$a" || x+=("-e$a"); done
lsof "${x[@]}" -f -- /tmp/report.csv

Hoặc để chắc chắn sử dụng stat()( test -ecó thể được thực hiện theo một cách khác):

x=(); for a in $(mount | cut -d' ' -f3); do stat --printf= "$a" 2>/dev/null || x+=("-e$a"); done

11

lsofluôn cố gắng để có được một số thông tin cơ bản về tất cả các hệ thống tệp, ngay cả khi các đối số xảy ra ngụ ý rằng sẽ không có kết quả nào đến từ một hệ thống tệp cụ thể. Nếu nó không thể truy cập vào một hệ thống tập tin (cụ thể, để gọi stattại điểm gắn kết của nó, như thông báo nói), nó sẽ phàn nàn.

Là root, thông thường bạn sẽ có quyền truy cập vào các hệ thống tập tin. Tuy nhiên, do hoạt động bên trong của FUSE , root không tự động có tất cả các quyền trên hệ thống tập tin FUSE. Đây không phải là một tính năng bảo mật (root có thể trở thành người dùng sở hữu hệ thống tập tin và có quyền truy cập theo cách đó), đó là một hạn chế kỹ thuật.

GVFS-FUSE là giao diện FUSE cho GVFS , đây là cơ chế cho phép các ứng dụng Gnome truy cập các hệ thống tệp ảo do các trình cắm Gnome triển khai: GVFS cấp cho các ứng dụng không phải Gnome truy cập vào các hệ thống tệp ảo này thông qua giao diện hệ thống tệp thông thường.

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.