Как удалить файл только для чтения 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 присутствует набор основных утилит и инструментов, позволяющих выполнять самые разнообразные действия с системными настройками и файлами, в том числе осуществлять удаление директорий. Таких утилит существует несколько и каждая будет максимально полезной в определенной ситуации.
Команда rmdir
Команда rm
После завершения удаления отобразится информация обо всех каталогах и отдельных объектах, ранее располагавшихся по указанному расположению.
Команда find
На нашем сайте уже есть материал с примерами использования find в операционных системах, разработанных на ядре Линукс. Конечно, там представлены только основные и самые полезные сведения. Ознакомиться с ним можно, перейдя по следующей ссылке, а сейчас мы предлагаем узнать, как этот инструмент работает при надобности удаления директорий.
На этом взаимодействие со стандартными консольными утилитами в Linux завершено. Как видите, их существует большое количество и каждая применима в определенных ситуациях. Если у вас есть желание ознакомиться с другими популярными командами, читайте отдельный наш материал по ссылке далее.
Способ 2: Утилита wipe
Если предыдущие инструменты встроены в командную оболочку, то утилиту wipe нужно будет самостоятельно установить их официального репозитория. Ее преимущество в том, что она позволяет безвозвратно удалить каталог без возможности его восстановления через специальный софт.
Если с работой в инструменте 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.
От пользователя 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 не может обойти эти атрибуты, чтобы удалить файл, атрибуты должны быть отключены в первую очередь.
Читайте также: