Các liên kết tượng trưng là phổ biến trên Linux, nhưng chúng không tồn tại ở bất kỳ nơi nào khác (ngoại trừ Cygwin mô phỏng chúng). cũng tồn tại trên AIX và Solaris, nhưng chúng không phải là liên kết tượng trưng. Có thể, để có được thông tin về các tập tin đang mở, hãy cài đặt ./proc/PID/fd/NUM
/proc/PID/fd/NUM
lsof
Liên kết với /proc/PID/fd
Trong Linux, là một liên kết tượng trưng hơi kỳ diệu đến tệp mà quy trình với ID PID đã mở trên bộ mô tả tệp NUM . Liên kết này là ma thuật trong đó, ví dụ, nó có thể được sử dụng để truy cập tệp ngay cả khi tệp bị xóa. Liên kết sẽ theo dõi các tập tin thông qua đổi tên, quá. là một liên kết tượng trưng ma thuật chỉ ra nơi mà PID là quá trình truy cập vào liên kết./proc/PID/fd/NUM
/proc/self
/proc/PID
Tính năng này có mặt trên hầu hết tất cả các hệ thống Linux. Nó được trình điều khiển cung cấp cho hệ thống tập tin Proc , là tùy chọn về mặt kỹ thuật nhưng được sử dụng cho rất nhiều thứ (bao gồm cả việc thực hiện ps
- nó đọc từ đó) mà gần như không bao giờ bị bỏ rơi ngay cả trên các hệ thống nhúng./proc/PID
Cygwin
Cygwin mô phỏng Linux (cho các quy trình Cygwin) và ./proc/PID/fd/NUM
/proc/self
Solaris (kể từ phiên bản 2.6), AIX
Có các mục cho mỗi mô tả tệp, nhưng chúng xuất hiện cùng loại với tệp đã mở, vì vậy chúng không cung cấp thông tin về đường dẫn của tệp. Tuy nhiên, họ báo cáo cùng một thông tin như sẽ báo cáo cho quá trình mở tệp, vì vậy có thể xác định hệ thống tệp nào được đặt và số inode của nó. Các thư mục xuất hiện dưới dạng các liên kết tượng trưng, tuy nhiên chúng là các liên kết ma thuật chỉ có thể được theo dõi và trả về một chuỗi trống./proc/PID/fd
stat
fstat
readlink
Trong AIX, procfiles
lệnh hiển thị một số thông tin về các tệp đang mở của một quy trình. Trong Solaris, pfiles
lệnh hiển thị một số thông tin về các tệp đang mở của một quy trình. Điều này không bao gồm đường dẫn đến tệp (trên Solaris, kể từ Solaris 10, xem bên dưới).
Ngoài ra , các phiên bản Solaris hiện đại có chứa các liên kết tượng trưng tương tự như các liên kết tượng trưng của Linux . Các thông tin chỉ huy chương trình về một quá trình là tập tin mở, bao gồm cả đường dẫn./proc/PID/fd/NUM
/proc/PID/path/NUM
/proc/PID/fd/NUM
pfiles
/proc/PID/fd
là một tệp văn bản chứa một bản ghi (dòng) cho mỗi bộ mô tả tệp được mở theo quy trình. Tên tập tin không được theo dõi ở đó.
/proc/PID/
là một thư mục, nhưng nó không chứa bất kỳ thông tin nào về mô tả tập tin.
Thông báo với /proc
nhưng không có quyền truy cập trực tiếp vào mô tả tệp
(Lưu ý: đôi khi có thể lấy thông tin về các tệp đang mở của một quy trình bằng cách xem qua hình ảnh bộ nhớ của nó có thể truy cập được /proc
. Tôi không tính đó là truy cập trực tiếp của Drake .)
Thông báo nơi là một tập tin/proc/PID
Hệ thống tập tin Proc tự khởi động trong phiên bản UNIX 8, nhưng với cấu trúc khác, và đã trải qua Kế hoạch 9 và quay lại một số thông báo. Tôi nghĩ rằng tất cả các hệ điều hành /proc
có một mục nhập cho mỗi PID, nhưng trên nhiều hệ thống, đó là một tệp thông thường, không phải là một thư mục. Các hệ thống sau đây cần được đọc với :/proc/PID
ioctl
- Solaris lên tới 2,5
- OSF / 1 hiện được gọi là Tru64
- IRIX (?)
- SCO (?)
MINIX 3 có một máy chủ Procfs cung cấp một số thành phần giống như Linux bao gồm các thư mục. Tuy nhiên điều này không có ./proc/PID/
/proc/PID/fd
FreeBSD có các thư mục, nhưng họ không cung cấp thông tin về các mô tả tệp mở. (Tuy nhiên , tương tự như của Linux , cho phép truy cập vào tệp thực thi thông qua một liên kết tượng trưng.)/proc/PID/
/proc/PID/file
/proc/PID/exe
Procfs của FreeBSD không được chấp nhận .
Đoàn kết mà không /proc
- HP-UX
- OpenBSD
- NetBSD
- Mac OS X
Thông tin mô tả tập tin thông qua các kênh khác
Các fuser
danh sách lệnh các quá trình có một tập tin mở nhất định, hoặc một tập tin mở trên quy định điểm lắp. Lệnh này là tiêu chuẩn (có sẵn trên tất cả các hệ thống XSI -compliant, tức là POSIX với Tiện ích mở rộng giao diện hệ thống X / Open).
Bạn không thể đi từ một quá trình để đặt tên với tiện ích này.
Lsof là viết tắt của danh sách các tập tin mở. Nó là một công cụ của bên thứ ba , có sẵn (nhưng thường không phải là một phần của cài đặt mặc định) cho hầu hết các biến thể unix. Có được thông tin về các tệp đang mở rất phụ thuộc vào hệ thống, vì phân tích ở trên có thể khiến bạn nghi ngờ. Trình bảo trì lsof đã thực hiện công việc kết hợp tất cả trong một giao diện duy nhất.
Bạn có thể đọc FAQ để xem những loại khó khăn mà lsof phải đối mặt. Trên hầu hết các thông báo, việc lấy thông tin về tên của các tệp đang mở đòi hỏi phải phân tích cấu trúc dữ liệu kernel. Trích dẫn từ FAQ 3,3 Tại sao không báo cáo tên đường dẫn đầy đủ?
Lsof không thể có được các thành phần tên đường dẫn từ bộ đệm tên hạt nhân của các phương ngữ sau:
Chỉ nhân Linux ghi lại tên đường dẫn đầy đủ trong các cấu trúc mà nó duy trì về các tệp đang mở; thay vào đó, hầu hết các hạt nhân chuyển đổi tên đường dẫn thành các chuỗi nhân đôi số thiết bị và nút và sử dụng chúng cho các tham chiếu tệp tiếp theo sau khi các tệp đã được mở.
Nếu bạn cần phân tích thông tin từ lsof
đầu ra, hãy chắc chắn sử dụng -F
chế độ (một trường trên mỗi dòng), tốt nhất là -F0
chế độ (các trường được phân tách bằng null). Để có được thông tin về một bộ mô tả tệp cụ thể của một quy trình cụ thể, hãy sử dụng -a
tùy chọn với và , vd .-p PID
-d NUM
lsof -a -p 123 -d 0 -F0n
/dev/fd/NUM
cho các mô tả tập tin của quá trình hiện tại
Nhiều biến thể unix cung cấp một cách để một quá trình truy cập các tệp đang mở của nó thông qua tên tệp: mở tương đương với gọi điện . Các tên này hữu ích khi một chương trình muốn một tên tệp nhưng bạn muốn truyền một tệp đã mở (ví dụ: ống hoặc ổ cắm); ví dụ các shell thực hiện thay thế quá trình sử dụng chúng nếu có (sử dụng một đường ống có tên tạm thời nếu không có sẵn)./dev/fd/NUM
dup(NUM)
/dev/fd
Ở đâu /dev/fd
tồn tại, cũng thường có (luôn luôn?) Từ đồng nghĩa (đôi khi là liên kết tượng trưng, đôi khi là liên kết cứng, đôi khi là các tệp ma thuật có thuộc tính tương đương) /dev/stdin
= /dev/fd/0
, /dev/stdout
= /dev/fd/1
, /dev/stderr
= /dev/fd/2
.
- Trong Linux,
/dev/fd
là một liên kết tượng trưng đến /proc/self/fd
.
- Trong hầu hết các thông báo ( IRIX , OpenBSD , NetBSD , SCO, Solaris , Hoài ), các mục trong
/dev/fd
là các thiết bị ký tự. Chúng thường xuất hiện cho dù bộ mô tả tệp có mở hay không và các mục nhập có thể không có sẵn cho các bộ mô tả tệp trên một số nhất định.
- Trong FreeBSD và OSX, hệ thống tập tin fdescfs cung cấp một
/dev/fd
thư mục động theo các mô tả mở của quy trình gọi. Một tĩnh /dev/fd
có sẵn /dev/fd
là không được gắn kết.
- Theo OSF / 1 (Tru64),
/dev/fd
được cung cấp qua fdfs .
- Không có
/dev/fd
trên AIX hoặc HP-UX.
pfiles
lệnh hiển thị đường dẫn mô tả tệp. Nó lấy thông tin này từ/proc/<pid>/path
thư mục mà bạn cũng có thể đề cập. Xem docs.oracle.com/cd/E19253-01/817-0547/esxiq/index.html