2009-07-24 26 views
6

Tôi có một tệp đã bị xóa, nhưng vẫn được giữ mở chương trình của tôi. Tôi tìm thấy số inode bằng cách sử dụng lsof. Làm thế nào tôi có thể tạo một liên kết cứng trở lại inode đó?Liên kết đến một mã số cụ thể

Bất kỳ mã nào đều hữu ích, nhưng Perl sẽ tiện dụng.

Trả lời

10

Copy từ/proc/pid/fd/tập tin mô tả

Sử dụng lsof để tìm pid và mô tả tập tin.

+1

Tôi chỉ cần chạy thử nghiệm nhỏ của riêng tôi và điều này không hiệu quả, nhưng tôi không hiểu tại sao! Đó là các liên kết tượng trưng đến tập tin thực tế, và một liên kết tượng trưng truy cập tệp thông qua tên tệp của nó, đúng không? – Thomas

+1

Bạn không thể liên kết cứng đến mục nhập trong/proc, bởi vì các liên kết cứng phải nằm trên cùng một hệ thống tệp (nghĩa là liên kết của bạn phải nằm trong/proc). Việc sao chép sẽ ổn. – mark4o

+1

mark: ghi chú, cảm ơn. Thomas: chúng không phải là các liên kết tượng trưng thực sự, chúng trông giống như chúng. Google cho proc_register_dynamic để biết thêm thông tin. – moonshadow

1

trên EXT hệ thống tập tin mà bạn có thể sử dụng debugfs lệnh để tái tạo liên kết như:

debugfs -w /dev/mapper/vg0-root -R 'link <16> myfile' 

nào sẽ tạo ra một "tập tin" tên myfile và trỏ đến inode 16.

+1

Câu trả lời cho câu hỏi. Cảm ơn bạn! Chỉ có một vấn đề. Lệnh 'link' không tăng số tham chiếu của inode. Vì vậy, trên thực tế, tệp có thể bị mất ngay sau khi chương trình đóng bộ mô tả tệp và số lượng tham chiếu của inode giảm xuống 0. Thật không may tôi không biết một cách đáng tin cậy đơn giản làm thế nào để thay đổi số tham chiếu của inode. --- Ngoài ra một câu trả lời hoàn chỉnh sẽ hiển thị như thế nào để có được số inode: 'stat -L/proc/PID/fd/FILE_DESCRIPTOR' (hoặc' ls -Li'). – pabouk

Các vấn đề liên quan