rm
đệ quy chỉ hoạt động trở xuống đúng?
rm -r x y
sẽ xóa x
và y
mọi thứ bên trong chúng (nếu chúng là thư mục), nhưng không phải cha mẹ của chúng hoặc bất cứ thứ gì bên ngoài chúng.
Đang chạy: sudo rm -R *.QTFS
sẽ xóa tất cả các tệp * .QTFS trong thư mục hiện tại và các tệp con của nó, đúng không?
Không. Nó sẽ xóa tất cả các tệp có tên *.QTFS
, mọi tệp đệ quy bên trong các thư mục được gọi *.QTFS
và chính các thư mục đó. Nếu bạn muốn hành vi xóa khác, sử dụng find -delete
.
thư mục hiện tại như được hiển thị bởi ls -lha
cũng chứa .
và ..
các liên kết vì thiếu một từ tốt hơn, vậy tại sao đệ quy không theo những từ này trở lên trong cây thư mục? Có giới hạn nhân tạo trên ứng dụng rm hay không .
và ..
có thật không?
Đó là một giới hạn nhân tạo của rm
.
Tuy nhiên, đó không thực sự là giả tạo - đó là cách duy nhất nó có thể hoạt động. Nếu rm
theo các ..
liên kết cha , mọi thứ rm -r
sẽ xóa mọi tệp trên hệ thống, bằng cách làm theo tất cả các ..
liên kết trở lại /
. rm
nhìn thấy ..
và .
các mục trong mỗi thư mục khi nó liệt kê nội dung và bỏ qua chúng vì lý do đó.
Trên thực tế, bạn có thể thử nó. Chạy rm -r .
và hầu hết các rm
triển khai sẽ từ chối hành động, báo cáo lỗi rõ ràng:
$ rm -r .
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
(thông báo đó là từ GNUrm
; những người khác cũng tương tự). Khi nó gặp các mục này một cách ngầm định, thay vì các đối số rõ ràng, nó chỉ bỏ qua chúng và tiếp tục. Hành vi đó được yêu cầu bởi POSIX . Trong GNU rm
và nhiều BSD, nó được cung cấp tự động bởi fts_read
họ các hàm phân cấp-truyền tải.
hoặc .
và ..
không phải là điều thật không?
.
và ..
là chung mục thư mục thật, mặc dù đó là hệ thống tập tin cụ thể. Chúng hầu như sẽ luôn được trình bày như thể chúng là các mục thực sự cho tất cả mã người dùng, bất kể. Nhiều phần mềm (không chỉ rm
) trong trường hợp đặc biệt hành vi của họ để bắt hoặc ngăn chặn đệ quy chạy trốn hoặc không mong muốn.