Удалите файл в Linux, используя номер индекса

22130
KdgDev

Если вы создаете файл в UNIX / Linux со специальными символами, например touch \"la*, вы не можете удалить его с помощью rm "la*. Вы должны использовать номер инода (вы можете, если вы добавите имя \перед именем, я знаю, но вам, как пользователю, нужно угадать, что оно использовалось при создании файла).

Я проверил man-страницу для rm, но там нет упоминания номера инода. Делать rm inodenumberтоже не получается.

Какая команда для этого?

12

5 ответов на вопрос

21
John T

Некоторые другие методы включают в себя:

избегая специальных символов:

[~] $ rm \ "la \ *

используйте команду find и ищите только текущий каталог. Команда find может искать номера инодов и имеет удобный -deleteпереключатель:

[~] $ ls -i 7404301 "ла *  [~] $ найти. -maxdepth 1-type f -inum 7404301 ./"la*  [~] $ найти. -maxdepth 1-type f -inum 7404301 -delete [~] $ ls -i [~] $
Хех, использовать find было бы проще, чем мое предложение, я бы никогда не заметил -inum :) wrt 14 лет назад 0
У Find есть много замечательных переключателей, которые нужно изучить, это мой швейцарский инструмент для армейского ножа, если честно :) John T 14 лет назад 0
т: о, так верно. akira 14 лет назад 0
У Solaris нет опций "-delete" из "-maxdepth". guthrie 10 лет назад 0
Вам следует ограничить поиск с помощью опции `-xdev`, поскольку другие смонтированные файловые системы могут также иметь несвязанные файлы с тем же номером инода. Jonas Berlin 6 лет назад 0
6
Ignacio Vazquez-Abrams

Может быть, я что-то упустил, но ...

rm '"la*' 

В любом случае, имена файлов не имеют inode, а файлы имеют. Попытка удалить файл без удаления всех имен файлов, которые указывают на него, повредит вашу файловую систему.

ну, это будет работать только для текущего каталога, но это действительно веская причина для беспокойства. Глупо, что я это пропустил. Тем не менее, не удаляет файл, хотя. KdgDev 14 лет назад 0
Конечно, нет. Файл удаляется только в том случае, если на него больше не указано имя файла и нет процессов, удерживающих его открытым. Ignacio Vazquez-Abrams 14 лет назад 3
5
wrt

Если вы действительно хотите это сделать - и ваш вариант использования на самом деле не выглядит так, как вам нужно, вы можете попробовать инструменты отладки файловой системы. Если вы готовы потерять все, то есть.

Например, для ext2 / 3/4 debugfsкоманда имеет опцию kill_file, которая, кажется, принимает индекс. Как уже упоминалось в других ответах, это будет повредить вашу файловую систему, как будет записей каталога, указывающих на несуществующий файл. Запуск fsckпосле может быть в состоянии исправить это. Вряд ли вы можете сделать это в смонтированной файловой системе.

Но я настоятельно рекомендую вам просто использовать соответствующее экранирование / цитирование и удалять такие файлы с помощью обычной rmкоманды, как было упомянуто в предыдущем ответе, - и использовать rm -iдля дополнительной безопасности при работе с именами файлов, содержащими такие символы как *

1
mpez0

Несмотря на то, что я настоятельно рекомендую подход «экранировать специальные символы», всегда есть clriкоманда, когда вы действительно хотите исправить повреждения файловой системы.

Следует отметить, что clri обычно присутствует только в системах Oracle (например, SunOS). can-ned_food 7 лет назад 1
0
Anthony V Edwards

Проблема, с которой я столкнулся, заключалась в удалении имени файла, начинающегося с дефиса - rm всегда хочет интерпретировать его как имя хоста. Я решил это с помощью:

rm ./-g4xxx 

Похожие вопросы