Как удалить файл только для чтения linux

Обновлено: 07.07.2024

Если я создаю файл, а затем изменяю его права доступа 444 (только для чтения), как же его rm можно удалить?

Если я сделаю это:

. rm спросит, хочу ли я удалить защищенный от записи файл test.txt . Я бы ожидал, что rm не смогу удалить такой файл и что мне придется сделать chmod +w test.txt сначала. Если я это сделаю, rm -f test.txt то rm удаляю файл, даже не спрашивая, даже если он доступен только для чтения.

Кто-нибудь может уточнить? Я использую Ubuntu 12.04 / bash.

Пояснение: я запускаю эти команды как обычный пользователь, а не как root.

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

Вот ссылка, которая объясняет модель разрешений более четко, чем я когда-либо мог:

Любая попытка доступа к данным файла требует разрешения на чтение. Любая попытка изменить данные файла требует разрешения на запись. Любая попытка выполнить файл (программу или скрипт) требует разрешения на выполнение .

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

Разрешение на выполнение требуется для каталога, чтобы иметь возможность CD в него (то есть, чтобы сделать некоторый каталог вашим текущим рабочим каталогом).

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

Как удалить каталог Linux

В операционных системах на базе ядра Linux обычно хранится большое количество пустых и непустых директорий. Некоторые из них занимают достаточное большое количество места на накопителе, а также часто становятся ненужными. В таком случае правильным вариантом будет их удаление. Способов выполнения очистки существует несколько, каждый из них применим в определенной ситуации. Давайте рассмотрим все доступные методы более детально, а вы выберете наиболее подходящий, исходя из своих потребностей.

Удаляем каталоги в Linux

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

  1. Откройте файловый менеджер и перейдите в место хранения папки.

Переход к каталогу через файловый менеджер в Linux

Переход к свойствам каталога через файловый менеджер в Linux

Узнать родительскую папку каталога в операционной системе Linux

Запуск Терминала для удаления папок в Linux

Переход по определенному расположению в Терминале Linux

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

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

Использование команды rmdir для удаления пустого каталога в Linux

Команда rmdir

Использование команды rmdir для удаления пустого каталога в Linux

Использование команды rmdir для удаления с указанием полного пути к папке в Linux

Команда rm

Использование команды rm с рекурсивным аргументом для удаления папки в Linux

Использование команды rm для рекурсивного удаления с отображением файлов в Linux

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

Отображение удаленных файлов при команде rm в Linux

Команда find

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

Использование команды find для поиска и удаления папки по названию в Linux

Успешное удаление папки по названию через find в операционной системе Linux

Поиск и удаление пустой папки через команду find в Linux

Список удаленных пустых папок с помощью find в Linux

Поиск пустых папок для удаления в определенном расположении через find в Linux

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

Способ 2: Утилита wipe

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

Установка программы wipe в Linux через терминал

Ввод пароля для установки программы wipe в терминале Linux

Добавление пакетов программы wipe для удаления папок в Linux

Действие команды wipe в Linux

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

Теперь вы знакомы с терминальными командами, которые позволяют удалять пустые каталоги или непустые в ОС, разработанных на Linux. Как можно заметить, каждый представленный инструмент работает по-разному, поэтому и будет оптимальным в различных ситуациях. Перед запуском инструментов настоятельно рекомендуем проверять правильность указанного пути и названий папок, чтобы не возникло ошибок или случайных удалений.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

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

В этой инструкции мы рассмотрим удаление файлов. Это типичная и очень простая процедура, выполнять которую должен уметь любой пользователь. Здесь вы узнаете, как удалить файл в Linux через терминал и какие команды для этого понадобятся. Статья будет актуальной для любого дистрибутива Linux, например, Ubuntu Linux, Debian и т. д.

Удаление файлов с помощью rm

Для того чтобы удалить файл в Linux через терминал необходимо использовать команду « rm » (от английского «remove»). Данная команда удаляет все указанные ей файлы, но по умолчанию не удаляет каталоги. Чтобы позволить команде « rm » удалять каталоги нужно добавить опцию « -r » или « -R ». Более подробно об этом во второй половине статьи.

Также нужно отметить, что команда « rm » не выполняет физическое удаление данных, вместо этого указанные файлы просто удаляются из файловой системы, а занимаемое ими место маркируется как свободное. Это означает, что после удаления данные остаются на диске и пока они не будут перезаписаны другими данными, их можно будет восстановить с помощью специальных программ. Для физического удаления данных с перезаписью диска следует использовать команду « shred ».

В общем случае для удаления файла в Linux через терминал достаточно просто ввести в терминал « rm » и указать имя документа. Например, для того чтобы удалить « file1.txt » из текущего каталога нужно выполнить вот такую команду:

удаление файла

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

удаление файла полный путь

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

удаление нескольких файлов

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

удаление файлов по маске

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

удаление всех файлов по маске

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

удаление файлов в папке по маске

Главное, соблюдать осторожность, так как при использовании масок можно удалить что-то лишнее.

Синтаксис и опции команды rm

Команда « rm » имеет множество опций, что позволяет очень тонко управлять процессом удаления файлов. Вы можете изучить все доступные опции если введете в терминал Linux команду « man rm ». Здесь же мы будем рассматривать самые простые и часто используемые опции.

Синтаксис команды « rm » выглядит следующим образом:

Разберем основные опции команды rm:

Теперь разберем некоторые опции, которые часто используются при удалении файлов в Linux через терминал. Например, очень часто возникает необходимость удалить папку вместе с всем содержимым. Для этого нужно использовать опцию «-r», которая включает рекурсивный обход папок. Например, для того чтобы удалить папку «folder1» и все ее содержимое нужно выполнить:

рекурсивное удаление файлов

Если права доступа к файлу разрешают только чтение, то в терминале Linux появится запрос подтверждения, и чтобы продолжить вам нужно будет ввести букву « y » (от англ. «yes»).

удаление файлов с подтверждением

Чтобы избежать такой ситуации и удалять все файлы без предупреждения нужно использовать опцию « -f ». Например:

удаление файлов без подтверждения

Не редко возникает необходимость удалить папку вместе со всеми файлами и без запросов на подтверждение. В этом случае нужно комбинировать опции « -r » и « -f ». В результате команда выглядит вот так:

рекурсивное удаление файлов без подтверждения

Если вы, наоборот, хотите каждый раз получать запрос подтверждения, то команду « rm » нужно выполнять с опцией « -i ». Например, для того чтобы удалить все файлы в текущем каталоге с запросом подтверждения нужно выполнить:

удаление файлов с подтверждением

Также бывает полезной опция « -v ». При ее использовании в терминале будет появляться подробная информация о выполняемых действиях. Например, для того чтобы удалить все файлы в текущем каталоге и вывести информацию в терминал нужно выполнить:

удаление файлов с выводом информации

Естественно все эти опции можно комбинировать, в зависимости от ваших задач.

Поиск и удаление файлов с помощью find

Также нужно отметить, что существуют и альтернативные способы удаления файлов. Например, вы можете использовать команду поиска « find ». Команда « find » будет полезна в тех случаях, когда вам нужно удалить определенные файлы в целом ряде папок.

Например, для того чтобы найти и удалить все txt-файлы в текущей и во всех вложенных папках можно выполнить вот такую команду:

удаление файлов с помощью поиска

Чтобы узнать больше об использовании « find » введите в терминал команду « man find ».

У меня есть справочник экзамен с 2 файлами в нем. Мне нужно удалить файлы, но в разрешении отказано. Даже rm -rf команда не может удалить эти файлы. Я вошел в систему как пользователь root.

введите описание изображения здесь

(1) Пожалуйста, отправьте текст из Терминала как текст, если это возможно. В идеале, скопируйте и вставьте его. Если у вас нет способа записать текст, кроме как вручную переписать его, то сделайте это, но сообщите, что вы это делаете, и включите снимок экрана, чтобы мы могли дважды проверить ваш набор текста. (2) Если у вас есть вопросы о разрешениях, пожалуйста, всегда ли ls -la , таким образом , мы можем видеть разрешения на . (директории).

От пользователя root проверьте атрибуты файлов

если вы заметили i (неизменяемый) или a (только для добавления), удалите эти атрибуты:

Вау, это было сложно. Спасибо за размещение этого решения; Я был в конце моего ума. Я был почти уверен, что это как-то связано с моей унисон-синхронизацией; он был оставлен в «неизвестном» состоянии (по многим причинам), и это означало, что те каталоги, которые я не мог удалить, были установлены (по принципу unison) только для добавления (это типично для unison). Но я понятия не имел, как просмотреть / сбросить этот режим только для добавления! Вы были спасателем; Я надеюсь, что оригинальный постер также решил их проблему.

Наиболее распространенная причина для rm жалоб на то, что у вас нет разрешения на удаление файла, заключается в том, что права доступа к каталогу запрещают вам удалять файл. Чтобы удалить файл, вам нужно разрешение на запись в каталог. Права доступа к файлу не имеют значения ( rm без -f запроса подтверждения перед удалением файла только для чтения, но это только подтверждение, а не ограничение). В некоторых вариантах Unix, таких как OSX (но не в Linux), ACL для файла может предотвратить его удаление; ls -l будет отображаться @ в конце поля разрешений, если в файле есть запись ACL.

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

Вывод из ls -l показывает . в конце столбца разрешений. Это указывает на то, что файл имеет контекст безопасности SELinux. В отличие от базовых разрешений и ACL, контекст безопасности SELinux для файла может контролировать, кому разрешено его удалять. Более того, SELinux не всегда можно обойти с помощью root (возможно, чтобы процесс выполнялся с идентификатором пользователя 0, но с такими же правами, которые выбрал разработчик политики SELinux). Чтобы увидеть, что позволяет делать контекст SELinux, запустите ls -lZ . exam_a .

Еще одна вещь, которая может помешать удалению файла, это если он или каталог, в котором он находится, имеет атрибут « только для добавления» или неизменный атрибут Linux . Запустите lsattr -d . exam_a для просмотра атрибутов Linux. Если атрибут a or i включен, вам нужно удалить его ( chattr -a -i . exam_a ), чтобы удалить файл; это может сделать только root. Root не может обойти эти атрибуты, чтобы удалить файл, атрибуты должны быть отключены в первую очередь.

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