Khôi phục tập lệnh đang chạy từ phiên cuối


35

Vì vậy, tôi đang sử dụng GNU Screen để quản lý nhiều tập lệnh / chương trình đang chạy. Việc ghép kênh & tháo rời là khá hữu ích.

Tôi đã xóa một tập lệnh khỏi đĩa và bây giờ tôi gặp một số khó khăn khi tìm bản sao lưu. Tuy nhiên, một trong các phiên cuối đã thực thi tập lệnh trước khi tệp bị xóa và nó vẫn tiếp tục hoạt động tốt.

Có cách nào để chiếm quyền điều khiển phiên cuối hiện đang chạy tập lệnh để khôi phục nội dung của tệp này không?


Câu trả lời:


61

tìm kiếm pid của kịch bản bằng cách sử dụng ps

ps -ef|grep script.sh
Fdo  8983  8463  0 12:28 pts/2    00:00:00 /bin/bash ./script.sh

kiểm tra /proc/$PID/fd/; cần có một liên kết bị hỏng đến tệp tập lệnh, nhưng cat sẽ hoạt động (trong khi tập lệnh đang chạy!):

cat /proc/8983/fd/255 
#!/bin/bash
# script contents!

chúc may mắn!


@mrc Tôi nghĩ rằng công việc đó, vì nội dung của các tệp, được tải trong bộ nhớ
c4f4t0r

Đề nghị tuyệt vời! Đây cũng là một cảnh báo rằng @fdo cần thiết lập thói quen sao lưu hợp lý, bởi vì lần sau anh ta có thể không may mắn như vậy.
Criggie

12
@ c4f4t0r Không có gì để làm với nó có được tải trong bộ nhớ hay không. Linux rõ ràng sẽ không xóa một tệp (inode) trong khi có các thẻ điều khiển mở - tệp vẫn còn trên đĩa, chiếm dung lượng. rmvà các công cụ khác hủy liên kết tệp, xóa liên kết từ tên tệp đến dữ liệu thực tế (được tham chiếu bởi inode), nhưng miễn là tham chiếu tồn tại (liên kết cứng hoặc xử lý mở), inode không bị xóa.
Bob

Chỉ tò mò ... làm thế nào bạn biết để kiểm tra fd 255? Hay đó chỉ là một ví dụ?
vườn

2
@gardenhead Đó là một ví dụ.
dùng253751
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.