Làm thế nào tôi có thể đọc một tập tin sh trong khi nó đang làm việc nhưng bị xóa?


20

Trong một cuộc phỏng vấn họ đã hỏi tôi câu hỏi này.

Có một tệp sh đã chạy, nhưng nó đã bị xóa kể từ khi bắt đầu thực thi.

Họ muốn tôi tìm quy trình và đọc tệp.

Tôi quản lý để tìm quá trình với

ps -ef | grep test.sh

và cố gắng đọc nó bằng cách sử dụng

cat /proc/PID/cmdline test.sh

nhưng nó nói

no such file or directory

Tôi không biết mình nên làm gì tiếp theo nên phải bỏ qua chuyện này.

Có thể đó là một câu hỏi dễ nhưng đó thực sự là một câu hỏi hay cho tôi và tôi thực sự muốn biết câu trả lời. Các bạn có thể giúp đỡ?

Câu trả lời:


24
tail -c +0 -f /proc/{pid}/fd/{fd} > /tmp/file

trong đó {pid} là id của quy trình của bạn và /tmp/filesẽ có nội dung của nó. Sử dụng một vị trí và tên khác nếu bạn muốn giữ nó.

  • {pid} là id của quy trình.
  • {fd} là mô tả tập tin. lsofnên hiển thị fd. lsofcó khả năng cũng sẽ hiển thị "đã xóa" trên dòng để bạn cũng có thể greplàm điều đó. lsof -nP +L1sẽ liệt kê tất cả các tệp có ít hơn 1 liên kết, một tệp bị xóa sẽ có 0. Thêm một | grep {pid}để tìm kiếm chỉ số PID của bạn.
  • từ món tráng miệng: lsof -p 22664 | sed -E '$!d;s/.*\s([0-9]+)[a-z]\s.*/\1/'để chỉ lấy fd.
  • từ ý kiến: bạn có thể sử dụng less, cathoặc cpquá. Tôi lớn lên trên tail:)

"Tôi lớn lên trên đuôi!" Một cái nhìn sâu sắc có giá trị cho bất cứ ai phải làm bất cứ điều gì với * x.
Sri
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.