Ошибка удаления файла linux

Обновлено: 07.07.2024

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

В качестве shell-оболочки рассмотрим bash, как самую используемую. А в качестве операции над файлами рассмотрим удаление, как самую деструктивную.

Ситуации могут быть разными. В текущей директории могут быть файлы, которые нужно удалить вместе с теми, которые нужно оставить. Имена у них могут быть самыми разными. Причем первые от последних могут отличаться только одним каким-нибудь заковыристым символом.

В названии файла есть служебный символ bash

Самый простой случай. Для удаления файлов, содержащих в своем названии служебные символы вроде пробелов, кавычек, двойных кавычек, звездочек, обратные кавычки и др. можно заэкранировать обратным слешем или использовать одинарные кавычки:


С помощью одинарных кавычек нельзя удалить файл, в названии которого есть одинарная кавычка, даже заэкранировав ее.

С полным списком служебных символов и механизмом экранирования в bash можно ознакомиться в man bash. Раздел QUOTING.

Имя файла начинается с дефиса

Удалить файл, начинающийся с дефиса простым экранированием не получится, и команда rm будет воспринимать дефис, как начало своего аргумента. Решить проблему довольно просто:

Удаляем по wildcard

Если удаление файлов попадает под wildcard-маску, то можно удалить всю группу файлов:

Файлы с управляющим символом в названии

В названии файла может встречаться управляющий ASCII-символ, такой как перевод строки (\n), табуляция (\t), backspace (\b). Это символы с ASCII-кодами менее 0x20, а также символы DELETE и ESC. Для удаления таких файлов подходит конструкция:


Другим способом удаления таких файлов являяется ввод управляющего символа с клавиатуры. Для этого нужно воспользоваться комбинацией клавиш, которая экранирует следующий введенный символ, тем самым запрещая системе обрабатывать его. Как правило, эта комбинация CTRL+V. Точно убедиться в этом можно с помощью команды stty -a, посмотрев на параметр lnext. Удалим файл, содержащий символ ESC:

Удаление файлов с символами utf8

Если имя файла содержит символ в кодировке utf8, который мы не можем набрать на клавиатуре, то удалить такой файл можно выделением его мышкой, копированием в буфер обмена и последующей вставкой на ввод команды rm. Главное условие состоит в том, что наш терминал должен работать в кодировке utf8. Кодировка выставляется в настройках терминала. Будь то xterm, putty или брутальный linux tty.

Перекодировка имени файла

Подозревая, что имя файла находится в кодировке, отличной от кодировки терминала, мы можем выполнить перекодирование всех файлов в текущей директории. В результате файлы с битой кодировкой будут перекодированы, а файлы с ascii-символами изменений не претерпят. Существенный плюс этого способа – приведение всех файлов в читабельный вид.


Как видно, чтобы осуществить правильное перекодирование нужно знать две кодировки: предполагаемую кодировку файла и кодировку нашего терминала. Наиболее трудно распознать предполагаемую кодировку файла по непонятным символам. Есть замечательная табличка

Также можно воспользоваться сторонними программами, которые попытаются распознать кодировку автоматически. Например, онлайн-декодер Лебедева.

Если вы встретили такие символы в примонтированном media-носителе или смонтированном разделе Windows, не спешите ничего перекодировать. Возможно, вы просто указали неправильные опции монтирования.

Автокомплит

В случае, если в директории название требуемого файла начинается уникально, и это название можно однозначно сформировать автокомплитом, то это довольно простой способ удалить файл:

Удаляем файл через меню выбора

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

Удаление по номеру inode

Удалить файл можно по его номеру inode. Номер inode уникально идентифицирует файл в файловой системе. Узнать номер inode можно с помощью команды ls, а удалить – с помощью find. Недостаток этого способа, такой же, как у предыдущего. Неудобно, в случае большого числа файлов.

Удаление по hex-коду

И нельзя не упомянуть один суровый метод. Удаление по hex-кодам. Суть такова: мы узнаем hex-коды всех байтов в имени файла, а затем удаляем файл, указывая вместо имени hex-коды.

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

В домашнем каталоге есть файл: **.doc Фменеджер говорит что весит он 3,6 Мб. но удалять отказывается от простого пользователя. говорит файла такого нет. из под рута таже история. говорит нет файла и все тут! ФС - ext3 ОС openSUSE11.2 КДЕ4

Подскажите в чем может быть дело? Как побороть этот файл? Просто он уже достал, ему уже 2 года. судя по данным из файлменеджера.

С какими опциями примонтирован раздел?(вывод mount) Какие права у файла?(вывод ls -l) Какая общая ситуация по фс в системе?(вывод df) Как удаляете? Пробовали удалять по номеру инода? UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code. наберите в консоли ls -l в этом каталоге.
вывод скопируйте суда.

Скоро придёт
Осень

Не удаля еться файл! Даже из под рута!

Коллега, исправьте.
Позорище же какое.

Скоро придёт
Осень

/**.doc"
Только кавычки обязательно. Или
rm

в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик

тогда будет спрашивать, какой файл удалять. есть ещё mc

Stasroot1
а причём тут рут?!
у вас ошибка разве "нет доступа"?
да даже если и эта - если вы чего-то не понимаете, то "от рута", вы всё равно ничего не поймёте, а просто завалите всю систему.

Скоро придёт
Осень

Не удаля еться файл! Даже из под рута!

Коллега, исправьте.
Позорище же какое.


Спасибо за указание ошибки, да еще и в названии темы! Исправил! (блин постоянно делаю ошибки с этим мягким знаком! Хотя знаю как проверить! :-) )

Всем спасибо за подсказки, после обеда все посмотрю и выводы сюда напишу. Спасибо за помощь.

наберите в консоли ls -l в этом каталоге.
вывод скопируйте суда.

Вот вывод относительно одного файла который меня интересует:

С какими опциями примонтирован раздел?(вывод mount) Какие права у файла?(вывод ls -l) Какая общая ситуация по фс в системе?(вывод df) Как удаляете? Пробовали удалять по номеру инода?
mount У меня для этих целей в bashrc прописана функция lsn, которая выводит файлы пронумерованными, и кроме того, прописывает их в переменные LS1, LS2, .
После чего файл с крякозябрами переименовывается так:
mv "$LS25" "normal_name"

тогда будет спрашивать, какой файл удалять. есть ещё mc

Stasroot1
а причём тут рут?!
у вас ошибка разве "нет доступа"?
да даже если и эта - если вы чего-то не понимаете, то "от рута", вы всё равно ничего не поймёте, а просто завалите всю систему.


Так объясните мне каким образом удаляя файл из под рута, файл который лежит в пользовательской директории можно завалить систему? Вроде как вордовские документы не являются системными и соответственно систему завалит не получится. поправьте в чем мои мысли неправильны если я ошибаюсь.

Возможно данный файл сначала стоит переименовать, а затем удалить. Возможно данный файл сначала стоит переименовать, а затем удалить.

Пробовал уже. Вот что получается: Файл или папка /home/stas/Загрузки/��.doc не существует.

Как я понимаю, если файл отсутствует то его нельзя удалить переименовать переместить.

Вариант со скриптом интересный, но пока не очень понятно что куда прописывать?

Так что вопрос переходит из области практического в область теоретическую.

Так объясните мне каким образом удаляя файл из под рута, файл который лежит в пользовательской директории можно завалить систему? Вроде как вордовские документы не являются системными и соответственно систему завалит не получится. поправьте в чем мои мысли неправильны если я ошибаюсь.

А потом набрал rm -rvf etc, что-бы стереть эту чужую папку. Вот только по инерции, случайно, я набрал /etc. К счастью, у меня был бекап и с того компьютера тоже
А у вас - есть?

Так что вопрос переходит из области практического в область теоретическую. $ ls -il итого 38124 24639 -rw-r--r-- 1 ftp ftp 104 2010-03-23 17:17 ?.txt 1558228 drwxr-xr-x 2 ftp ftp 4096 2010-03-23 17:16 . \ . / 1558227 drwxr-xr-x 2 ftp ftp 4096 2010-03-23 17:16 . \ . / 24640 -rw-r--r-- 1 ftp ftp 139559 2010-03-23 17:17 . fpl 1558226 drwxr-xr-x 3 ftp ftp 4096 2010-03-23 17:16 . / 1558221 drwxr-xr-x 5 ftp ftp 4096 2010-03-23 17:17 Bluetooth/ 1558225 drwxr-xr-x 2 ftp ftp 4096 2010-03-23 17:16 Youcam/ 24638 -rw-r--r-- 1 ftp ftp 38818792 2010-03-23 17:17 setuprus.exe

Скоро придёт
Осень

Да у меня есть копия и как правило я ее делаю перед тем как что то серьезное делать и предполагаю что возможно случайно или по незнанию поврежу ее работоспособность.

Но согласитесь в моем случае даже из под рута систему я не убъю так как действую в конкретной папке и в случае если долго бездействует то или иное приложение с правами рут которое дабы не нашалить я его закрываю.

За метод с инодами спасибо. Новое для меня. Но понятное.

Но согласитесь в моем случае даже из под рута систему я не убъю так как действую в конкретной папке и в случае если долго бездействует то или иное приложение с правами рут которое дабы не нашалить я его закрываю.
ага. я тоже действовал "в папке". И конкретно убил все конфиги сразу во всей системе. Случайно слеш поставил. Ага. Руки. Но это реальный случай. У вас ещё и не такое будет

Скоро придёт
Осень

Но согласитесь в моем случае даже из под рута систему я не убъю так как действую в конкретной папке и в случае если долго бездействует то или иное приложение с правами рут которое дабы не нашалить я его закрываю.
ага. я тоже действовал "в папке". И конкретно убил все конфиги сразу во всей системе. Случайно слеш поставил. Ага. Руки. Но это реальный случай. У вас ещё и не такое будет

Будет конешно разное, но я пользуюсь Linux не первый день и поэтому глупые ошибки маловероятны. да, что то подобное натворить я мог когда только первые разы ставил и настраивал систему. сейчас все летает и работает на уверенную четверку, и ничего особо правит редактировать не особо нужно. :-) А в особо глубокие места не лезу стараюсь, так как времени на это реально нет. За предупреждение спасибо, да под рутом надо поменьше копаться по ФС ОС.

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

Функциональность, которую вы собираетесь использовать, - это то, для чего было разработано приложение WingPanel. Вы можете установить его из PPA, добавив ppa: ripps818 / wingpanel в источники программного обеспечения вашей системы.

Глядя на ваши скриншоты, я вижу, что у вас установлена ​​группа root. Я бы попробовал использовать chown и посмотреть, решит ли это проблему.

Замена [username] на ваше имя пользователя.

Вы получите пару ошибок.

example

покажи нам терминал . сделай ll | grep panorama и покажи нам это; добавьте его в свой вопрос .

Я предлагаю сделать как root rm -f panorama.jpg .

в человеке Р.М. я нашел это:

Я знаю, что это старый файл, но у меня была та же проблема, что и у вас, только с папкой, а не с файлом. Ни один из предложенных здесь методов не сработал.

Мне удалось решить проблему, создав папку в том же положении и с тем же именем, что и я, которую я не мог удалить. Папка была создана правильно и «заменила» несуществующую. Затем я просто удалил новую папку, и проблема исчезла. Просто так.

У меня была такая же проблема. Это была проблема в индексных записях раздела. Я решил это, запустив Windows, если у вас двойная загрузка, или вставьте live CD Windows XP или Windows 7, а затем выполните следующие действия:

  1. Поиск КОМАНДЫ ПОДСКАЖИТЕ, что: cmd верно -click -> Запуск от имени администратора.
  2. chkdsk /f/x D: (где D - буква вашего диска).
  3. Нажмите Y, если он запрашивает Y / N
  4. Проверьте диск на наличие файла, который вы хотите удалить. Может быть, он удален или вы можете удалить его.

Непечатные символы в именах файлов могут вызывать такие проблемы, как пробел. Попробуйте интерактивную опцию rm и скажите 'Y' файлу, который вы хотите удалить "
rm -i" * pan * "Обратите внимание на использование * s для сопоставления любым (даже не печатным) символам .
Может быть, был удален inode, но не запись в каталоге. Попробуйте ls -i, чтобы увидеть inode. Fsck файловая система, чтобы решить эту проблему.

Предупреждение: для использования этих инструкций потребуется debugfs . Они могут вызвать потерю данных.

Они адаптированы к исходной проблеме и могут быть точными или неточными для любых будущих посетителей этой страницы. Любая потеря данных может быть непоправимой или даже усугублена fsck .

Это может быть потерянный инод. Пожалуйста, запустите ls -li , чтобы получить список номеров инодов, затем вы можете попытаться сбросить указанный инод. Например, если ваш ls -li выглядит следующим образом:

, то номер индекса равен 4980758, как показано в списке в качестве первого столбца.

Затем вы можете попытаться сбросить индекс. Пожалуйста, прочитайте весь пост, прежде чем делать что-нибудь .

Запустите debugfs от имени пользователя root:

и введите команду open /dev/sda1 с правильным блочным устройством для вашего раздела.

Затем дайте команду, чтобы сбросить индекс, номер которого вы получили ранее:

, используя < и > вокруг номера индекса.

Если он читает какой-то случайный текст, закройте терминал и откройте его снова. Запустите debugfs еще раз и снова введите команду open .

Теперь вы можете попробовать удалить файл. Это может привести к серьезному повреждению файловой системы.

Обратите внимание, что это можно сделать, даже если выяснится, что в файле никогда не было inode. Попробуйте команды по одной в порядке, указанном выше. Выйдите из debugfs и проверьте, существует ли файл. Если нет, начните снова, но следуйте следующей инструкции.

После очередного обновления ядра или компонентов linux mint cinnamon 20.1 «Ulyssa» при выделенном файле или папке в контактно-зависимом меню стали неактивны опции - Удалить и Удалить в корзину. Посоветуйте, пжлста, как решить проблему.

Ulyssa в смысле Илюша?


А какие именно файлы ты пытаешься удалить и не выходит? Покажи скриншот. Тут его нельзя выкладывать, на imgur залей, а сюда ссылку.

Vsevolod-linuxoid ★★★★★ ( 24.01.21 21:25:24 )
Последнее исправление: Vsevolod-linuxoid 24.01.21 21:54:33 (всего исправлений: 2)

Все версии минта традиционно имеют женские имена. Что в данном случае имели в виду авторы и для меня загадка.


Я вижу 3 возможные причины проблемы:

  • ФС перешла в ro
  • Слетели права на файлы
  • Поломка GUI

И я не могу дать совет, как починить, пока не пойму, что именно чинить.

    По поводу первого пункта — покажи вывод

, и так же попробуй создать и удалить файл из терминала Vsevolod-linuxoid ★★★★★ ( 24.01.21 21:46:06 )
Последнее исправление: Vsevolod-linuxoid 24.01.21 21:54:00 (всего исправлений: 1)



conceptual — не жди готового решения. Причин аварии несколько, и никто не поможет тебе починить, пока не будет ясно, что сломалось.

Отвечай на вопросы, что тебе задают. Если непонятен сам вопрос — уточняй. Если не понимаешь, что делать для получения необходимой информации — тоже уточняй. Вообще не стесняйся вопросов.

Сообщай любой результат, что получишь — мы не телепаты. Отрицательный результат — тоже результат. Если совет не помог, об этом тоже надо написать! Если команда ничего не выводит, это тоже ответ.

Да, спасибо. Я не молчу - пробую все варианты. Скриншот на imgur залить не получилось (проблема с почтой). Не удаляются абсолютно все личные файлы и папки. Поэтому совет 1 и 2 не актуальны. Если выделить левой кнопкой мышки файл или папку и сразу нажать правую кнопку, то появиться т.н. контексно-зависимое меню и там в списке есть опции - Удалить и Удалить в корзину. Так вот они не активны. Совет 3 не дал результатов. И вообще идея удалять файлы и папки через терминал - не очень хорошая идея.

Сорри. А как вообще радикально решить эти проблемы:

Я вижу 3 возможные причины проблемы:


1, 2 и 3 это не советы. Это диагностические процедуры. Они не чинят проблему, они проверят, есть ли она и в чём состоит.

Vsevolod-linuxoid ★★★★★ ( 24.01.21 22:06:34 )
Последнее исправление: Vsevolod-linuxoid 24.01.21 22:07:48 (всего исправлений: 1)


Для начала пришли эти выводы терминала. Это не советы, а диагностика. Советы будут после того, как станет понятно, что чиним.

Читайте также: