Як видалити файл з назвою "filen / ame" (з косою рисою) у файловій системі ext4 у налагодженнях?


26

Граючи з e2fsprogs debugfs, за зміною / випадковістю filen/ameбуло створено файл з назвою . Очевидно, що прямий нахил символу /служить спеціальним символом розділення в іменах шляхів.

Ще використовуючи, debugfsя хотів видалити файл з назвою filen/ame, але мав успіх, оскільки /символ не інтерпретується як частина імені файлу?

Чи дає налагодження спосіб видалення цього файлу, що містить косу рису? Якщо так, як?

Я використав:

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

який виводить:

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

Я намагався видалити filen/ameфайл:

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

але це не спрацьовувало і лише виробляло:

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

Окрім зміни вмісту вузла каталогу вручну, чи є спосіб видалити файл за допомогою debugfs?


Не filen\/ameвдалося уникнути нахилу вперед ( )?
JAB

17
+1 та поздоровлення. Вам вдалося знайти один з єдиних двох випадків "дивного символу в імені файлу", коли просто правильне котирування та / або уникнення символу в команді оболонки не вирішить проблему. (Інший був би нульовим байтом у назві файлу, хоча я підозрюю, що у більшості файлових систем це просто урізає ім’я.)
Ilmari Karonen

Відповіді:


33

Якщо ви хочете виправити і не просто випробовуєте debugfs, ви можете змусити fsck виконати роботу за вас. Позначте файлову систему як брудну та запустіть, fsck -yщоб змінити ім'я файлу:

$ 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
e2fsckє -fопція orce, яка призведе до повної перевірки "навіть якщо файлова система здається чистою".
Девід Фоерстер

3

Концепції роботи з fsck; якщо з якихось причин це не спрацювало, відповідь ls -i1супроводжується umountі потім clri.

Посилання: http://docstore.mik.ua/orelly/unix/upt/ch23_13.htm

Я фактично перевірив цей метод.


Якщо це Linux (як здається), варто зауважити, що clriце не окрема команда (як це є в деяких інших системах Unix), це всередині підкоманди debugfs.
панно

@hobbs: повинен зробити моє незвичне тоді. О зачекайте, nvm clri був просто відлунням "clri $ 2" | налагодження "$ 1"
Джошуа

Ваші вказівки вимагають запуску fsck у будь-якому випадку - це виправить проблему, а повідомлення Entry 'filen/ame' in / (2) has deleted/unused inode 12. Clear<y>?замість того, яке зазначено в іншій відповіді, - але виконання клірів - це додатковий крок. Здається, не існує способу вирішити це виключно з налагоджень.
Випадково832

@ Random832: Я мав fsck не виправити його самостійно в минулі століття. :(
Джошуа

-1

Якщо ви перемістите файл у каталог, ви можете видалити каталог із файлом у ньому.

mkdir foo 
mv filen* foo
rm -rf foo

1
Це буде працювати для будь-якого іншого незручного імені файлу, але воно не буде працювати для імені файлу, яке /в ньому є.
zwol
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.