Làm cách nào để xóa một tệp có tên là filen filen / ame ((dấu gạch chéo) trên hệ thống tệp ext4 trong debugfs?


26

Chơi với e2fspross debugfs, do thay đổi / tình cờ, một tệp có tên filen/ameđã được tạo. Rõ ràng là ký tự gạch chéo phía trước /đóng vai trò là ký tự phân cách đặc biệt trong tên đường dẫn.

Vẫn đang sử dụng debugfsTôi muốn xóa tệp có tên filen/ame, nhưng tôi đã không thành công, vì /ký tự không được hiểu là một phần của tên tệp?

Có gỡ lỗi cung cấp một cách để loại bỏ tệp này có chứa dấu gạch chéo? Nếu vậy thì thế nào?

Tôi đã sử dụng:

cd /tmp
echo "content" > contentfile
dd if=/dev/zero of=/tmp/ext4fs bs=1M count=50
mkfs.ext4 /tmp/ext4fs
debugfs -w -R "write /tmp/contentfile filen/ame" /tmp/ext4fs
debugfs -w -R "ls" /tmp/ext4fs

đầu ra nào:

debugfs 1.43.4 (31-Jan-2017)
 2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen/ame

Tôi đã thử cách sau để xóa filen/ametệp:

debugfs -w -R "rm filen/ame" /tmp/ext4fs

nhưng điều này không hoạt động và chỉ được sản xuất:

debugfs 1.43.4 (31-Jan-2017)
rm: File not found by ext2_lookup while trying to resolve filename

Ngoài việc thay đổi nội dung của nút thư mục theo cách thủ công, có cách nào để xóa tệp bằng cách sử dụng debugfskhông?


Liệu thoát khỏi forwardslash ( filen\/ame) không hoạt động?
JAB

17
+1 và xin chúc mừng. Bạn đã quản lý để tìm một trong hai trường hợp duy nhất của "ký tự lạ trong tên tệp" khi chỉ trích dẫn chính xác và / hoặc thoát ký tự trong lệnh shell sẽ không giải quyết được vấn đề. (Cái còn lại sẽ là một byte rỗng trong tên tệp, mặc dù tôi nghi ngờ rằng, trên hầu hết các hệ thống tệp, nó sẽ cắt bớt tên đó.)
Ilmari Karonen

Câu trả lời:


33

Nếu bạn muốn sửa lỗi và không chỉ thử debugfs, bạn có thể yêu cầu fsck thực hiện công việc cho bạn. Đánh dấu hệ thống tập tin là bẩn và chạy fsck -yđể thay đổi tên tệp:

$ debugfs -w -R "dirty" /tmp/ext4fs
$ fsck -y /tmp/ext4fs
 ...
/tmp/ext4fs was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Entry 'filen/ame' in / (2) has illegal characters in its name.
Fix? yes
 ...
$ debugfs -w -R "ls" /tmp/ext4fs
2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen.ame   

3
e2fsckcó một -ftùy chọn orce sẽ dẫn đến một kiểm tra đầy đủ ngay cả khi hệ thống tập tin có vẻ sạch sẽ.
David Foerster

3

Các điều khoản về fsck làm việc; nếu vì lý do nào đó nó không hoạt động thì câu trả lời được ls -i1theo sau umountvà sau đó clri.

Tham chiếu: http://docstore.mik.ua/orelly/unix/upt/ch23_13.htm

Tôi đã thực sự thử nghiệm phương pháp này.


Nếu đây là Linux (có vẻ như vậy), đáng chú ý đó clrikhông phải là một lệnh riêng biệt (như trên một số hệ thống Unix khác), đó là một tiểu ban bên trong debugfs.
hobbs 20/03/2017

@hobbs: phải làm cho tôi khác thường rồi. Đợi đã, nvm clri chỉ là tiếng vang "clri $ 2" | gỡ lỗi "$ 1"
Joshua

Hướng dẫn của bạn yêu cầu chạy fsck bằng mọi cách - sẽ khắc phục sự cố, với thông báo Entry 'filen/ame' in / (2) has deleted/unused inode 12. Clear<y>?thay vì thông báo trong câu trả lời khác - nhưng thực hiện clri là một bước bổ sung. Dường như không có cách nào để giải quyết vấn đề này hoàn toàn từ bên trong gỡ lỗi.
Random832

@ Random832: Tôi đã có fsck không sửa nó trong thời gian qua. :(
Joshua

-1

Nếu bạn di chuyển tệp vào một thư mục, thì bạn có thể xóa thư mục chứa tệp trong đó.

mkdir foo 
mv filen* foo
rm -rf foo

1
Điều này sẽ làm việc cho bất kỳ tên tệp khó xử nào khác , nhưng nó sẽ không hoạt động cho một tên tệp có /trong đó.
zwol
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.