2013-11-20 18 views
41

Giả sử tôi có thiết bị đầu cuối mở và thông qua thiết bị đầu cuối đó, tôi có cd 'được chỉnh sửa đối với một số thư mục. Thông qua một thiết bị đầu cuối khác, tôi xóa thư mục đó và khôi phục lại nó từ một bản sao lưu giống hệt nhau. Khi tôi cố gắng vim một tệp từ thiết bị đầu cuối đầu tiên, trong cùng một thư mục, tại sao tôi gặp lỗi về một tệp xử lý cũ? Nó có nghĩa là gì? (Trên một mặt lưu ý, tôi thấy rằng có thể bỏ qua vấn đề này thông qua cd $(pwd).)'Xử lý tệp cũ' trong Linux có nghĩa là gì?

+13

73.000 lượt xem, 29 phiếu bầu, nhưng câu hỏi này đã bị đóng. Đề ra? Rõ ràng là không. Tôi đã gặp vấn đề này với tư cách là một nhà phát triển phần mềm, không phải là một siêu người dùng. –

+0

@TobiasGassmann Tôi nghĩ bởi vì nó không phải là một câu hỏi về bản thân lập trình. Giống như nếu ai đó hỏi một câu hỏi về lý do tại sao đăng nhập Unix từ xa của họ đôi khi ngắt kết nối sau một thời gian không hoạt động (trong khi họ đang phát triển phần mềm), đó cũng sẽ là chủ đề cho [SO]. – dg99

+1

@TobiasGassmann Được thăng hạng, nhưng sự thật được bảo rằng tôi không thể quan tâm ít hơn. Trong khi bạn có thể gặp lỗi này trong nhiều trường hợp (mã hóa hay không), lý do của tôi ở đây chỉ là để thỏa mãn sự tò mò của tôi về một kịch bản nơi làm việc định kỳ. Tôi rất vui nếu nó đã được sử dụng cho bạn, nhưng tôi sẽ không làm phiền mở lại này. –

Trả lời

46

Khi thư mục bị xóa, inode cho thư mục đó (và inodes cho nội dung của nó) được tái chế. Con trỏ mà shell của bạn có inode của thư mục đó (và các inode của nội dung) bây giờ không còn hợp lệ nữa. Khi thư mục được khôi phục từ bản sao lưu, các inode cũ là không (nhất thiết) được sử dụng lại; thư mục và nội dung của nó được lưu trữ trên các inode ngẫu nhiên. Điều duy nhất vẫn giữ nguyên là thư mục parent reuses cùng tên cho thư mục được khôi phục (vì bạn đã nói với nó).

Bây giờ nếu bạn cố gắng truy cập nội dung của thư mục mà vỏ gốc của bạn vẫn trỏ đến, nó sẽ truyền yêu cầu đó tới hệ thống tệp như yêu cầu cho inode gốc, đã được tái chế (và thậm chí có thể đang sử dụng cho một thứ hoàn toàn khác). Vì vậy, bạn nhận được thông báo stale file handle vì bạn đã yêu cầu một số dữ liệu không tồn tại.

Khi bạn thực hiện thao tác cd, vỏ sẽ xác định lại vị trí inode của bất kỳ đích nào bạn cung cấp cho nó. Bây giờ vỏ của bạn biết inode mới cho thư mục (và các inode mới cho nội dung của nó), các yêu cầu trong tương lai cho nội dung của nó sẽ hợp lệ.

+0

Ah, vì vậy đây chỉ là cách xử lý các con trỏ inode không hợp lệ/null? –

+0

Có. Tôi không biết đủ về các chi tiết để biết điều gì sẽ xảy ra nếu, ví dụ, bạn đã thử tham chiếu một inode đã được tái chế để chỉ vào một thứ khác. Bạn vẫn sẽ có được một tập tin cũ xử lý? Hoặc bạn sẽ nhận được dữ liệu không mong muốn? – dg99

+0

Tôi không nghĩ rằng hệ thống sẽ sử dụng lại nó vì ai đó thực sự đang sử dụng I-node đó bằng cách sử dụng nó làm thư mục hiện tại. –

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