Xóa thư mục hiện tại không ảnh hưởng đến tính toàn vẹn của hệ thống tệp hoặc tổ chức logic của nó. Ngăn chặn .
loại bỏ được thực hiện theo tiêu chuẩn POSIX được nêu trong rmdir(2)
trang hướng dẫn:
Nếu đối số đường dẫn đề cập đến một đường dẫn có thành phần cuối cùng là dấu chấm hoặc dấu chấm, thì rmdir () sẽ thất bại.
Một lý do có thể được tìm thấy trong rm
trang hướng dẫn:
Tiện ích rm bị cấm xóa dấu chấm và dấu chấm để tránh hậu quả của việc vô tình làm một việc như:
rm -r. *
Mặt khác, loại bỏ rõ ràng thư mục hiện tại (nghĩa là bằng cách nêu đường dẫn đầy đủ hoặc tương đối của nó) là một hoạt động được phép trong Unix, ít nhất là kể từ SVR3 vì nó bị cấm với phiên bản Unix 7 cho đến SVR2. Điều này rất giống với những gì xảy ra khi bạn xóa một tệp đang tích cực được đọc hoặc ghi vào. Các quá trình truy cập tệp xóa tiếp tục các hoạt động đọc và ghi của chúng giống như nếu không có gì xảy ra. Sau khi bạn đã loại bỏ một thư mục hiện tại quá trình, thư mục này không thể truy cập được nữa mặc dù đường dẫn của nó nhưng inode của nó vẫn hiện diện trên hệ thống tệp cho đến khi quá trình chết hoặc thay đổi thư mục riêng của nó.
Lưu ý rằng quá trình sẽ không thể sử dụng một đường dẫn liên quan đến thư mục hiện tại của nó để thay đổi cwd của nó (ví dụ cd ..
) vì không còn ..
mục nào trong thư mục hiện tại của nó.
Khi loại một ai đó rmdir .
, họ có thể mong đợi sự xâm nhập thư mục hiện hành phải được loại bỏ nhưng khi một thư mục được lấy ra (sử dụng đường đi của nó), ba mục thư mục đang thực sự loại bỏ, .
, ..
, và thư mục riêng của mình.
Chỉ xóa .
và không phải mục nhập thư mục của thư mục này sẽ tạo ra một thư mục không tuân thủ nhưng như đã nêu, nó bị cấm theo tiêu chuẩn.
Như @Emmanuel đã chỉ ra một cách đúng đắn, có một lý do thứ hai tại sao loại bỏ .
không được phép. Có ít nhất một HĐH tuân thủ POSIX (Mac OS X với HFS +), với những hạn chế mạnh mẽ, hỗ trợ tạo liên kết cứng đến các thư mục hiện có. Trong trường hợp như vậy, không có cách rõ ràng từ bên trong thư mục để biết liên kết cứng nào là dự kiến sẽ bị xóa.