Xóa tệp trên Linux bằng số inode


14

Nếu bạn tạo một tệp trên UNIX / Linux bằng các ký tự đặc biệt, chẳng hạn như touch \"la*, bạn không thể xóa tệp đó bằng rm "la*. Bạn phải sử dụng số inode (bạn có thể nếu bạn thêm tên \trước tên, tôi biết, nhưng bạn phải đoán là người dùng đã sử dụng nó trong việc tạo tệp).

Tôi đã kiểm tra trang web cho rm, nhưng không đề cập đến số inode. Làm rm inodenumberkhông làm việc một trong hai.

Lệnh cho việc này là gì?

Câu trả lời:


23

Một số phương pháp khác bao gồm:

thoát khỏi những ký tự đặc biệt:

[~] $ rm \ "la \ *

sử dụng lệnh find và chỉ tìm kiếm thư mục hiện tại. Lệnh find có thể tìm kiếm các số inode và có một -deletecông tắc tiện dụng :

[~] $ ls -i
7404301 "la *

[~] $ tìm. -maxdepth 1 -type f -inum 7404301
./"la*

[~] $ tìm. -maxdepth 1 -type f -inum 7404301 -delete
[~] $ ls -i
[~] $

Heh, sử dụng find chắc chắn sẽ dễ dàng hơn đề xuất của tôi, tôi chưa bao giờ nhận thấy -inum :)

Find có rất nhiều công tắc tuyệt vời để khám phá, đó là công cụ dao quân đội của tôi khá trung thực :)
John T

t: ồ đúng vậy
akira

Solaris không có tùy chọn "-delete" của "-maxdepth".
guthrie

Bạn nên giới hạn tìm kiếm với -xdevtùy chọn vì các hệ thống tệp được gắn khác cũng có thể có các tệp không liên quan với cùng số inode.
Jonas Berlin

5

Có lẽ tôi đang thiếu một cái gì đó, nhưng ...

rm '"la*'

Dù sao, tên tệp không có inodes, tập tin nào. Cố gắng xóa một tệp mà không xóa tất cả tên tệp trỏ đến nó sẽ làm hỏng hệ thống tệp của bạn.


tốt, điều này sẽ chỉ hoạt động cho thư mục hiện tại, nhưng nó thực sự là một nguyên nhân hợp lệ cho mối quan tâm. Thật ngu ngốc khi tôi bỏ lỡ điều đó. Vẫn không xóa các tập tin mặc dù.
KdgDev

3
Dĩ nhiên là không. Tệp chỉ bị xóa khi không còn tên tệp nào trỏ đến nó và không có quá trình giữ nó mở.
Ignacio Vazquez-Abrams

5

Nếu bạn thực sự muốn làm điều này - và trường hợp sử dụng của bạn không thực sự giống như bạn cần, bạn có thể thử các công cụ gỡ lỗi hệ thống tệp. Nếu bạn sẵn sàng để mất tất cả, đó là.

Ví dụ, đối với ext2 / 3/4, debugfslệnh có tùy chọn "kill_file" dường như mất một nút. Như đã đề cập trong các phản hồi khác, điều này sẽ làm hỏng hệ thống tệp của bạn, vì sẽ có các mục thư mục trỏ đến một tệp không tồn tại. Chạy fscksau đó có thể có thể sửa chữa điều này. Bạn không thể làm điều này trên một hệ thống tệp được gắn kết.

Nhưng tôi thực sự khuyên bạn chỉ nên sử dụng thoát / trích dẫn thích hợp và xóa các tệp đó bằng rmlệnh thông thường như được đề cập trong phản hồi trước đó - và sử dụng rm -iđể đảm bảo an toàn hơn khi xử lý tên tệp có chứa các ký tự hình cầu như *


1

Mặc dù tôi thực sự khuyên bạn nên sử dụng phương pháp "thoát các ký tự đặc biệt", luôn có clrilệnh khi bạn thực sự muốn tham nhũng hệ thống tập tin có thể sửa chữa.


2
Cần lưu ý rằng clrithường chỉ xuất hiện trên các hệ thống Oracle (ví dụ SunOS).
can-ned_food


1

Thử thách tôi gặp phải là xóa tên tệp bắt đầu bằng dấu gạch ngang - rm luôn muốn diễn giải nó thành tên máy chủ. Tôi đã giải quyết điều này bằng cách sử dụng:

rm ./-g4xxx
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.