Удаление файлов и директорий в GNU/Linux

Поразительно, но даже некоторые весьма опытные линуксоиды достаточно поверхностно знакомы с удалением элементов файловой системы в GNU/Linux. Это объясняется высокой популярностью графических окружений и, как следствие, «самопереучиванием» под них даже теми пользователями, кто, казалось бы, сидит на UNIX-подобных ОС еще с деда-прадеда. 🙂 Однако я все-таки собираюсь напомнить вам, — а заодно и себе, — как безопасно удалять файлы и каталоги в GNU/Linux с помощью командной строки.

В современных дистрибутивах GNU/Linux за удаление файлов и директорий в режиме командной строки (CLI) отвечают команды «rm» и «rmdir».

Как в GNU/Linux удалять файлы?

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

touch newfile.txt

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

Файл создан!

А теперь давайте-ка его удалим! Для этого воспользуйтесь командой:

rm newfile.txt
Файл удален!

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

rm ~/newfile.txt

Обратите внимание! Символ «~» в UNIX-подобных системах — к коим, само собой, относится и GNU Linux — часто означает домашний каталог активного пользователя. Если же нам нужно удалить этот же файл, однако от имени другого пользователя (например, в сессии терминала от root), то путь будет выглядить так: «/home/username/newfile.txt», где «username» — имя соотвествующего пользователя в системе.

Если файл, который вы собираетесь удалить, защищен от записи, то перед удалением вас попросят подтвердить действие.

Подтверждение удаления защищенного файла

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

cd ~ && touch test1.txt test2.txt test3.txt

Команда создаст в вашей домашней директории файлы «test1.txt», «test2.txt» и «test3.txt» соответственно.

Вот они, наши файлы…

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

rm test1.txt test2.txt test3.txt

Это удалит все три только что созданных файла.

Как не бывало!

Команда «rm», как и большинство консольных утилит GNU/Linux, поддерживает использование параметра (опции, ключа — названий много). Скажем, для того, чтобы в предыдущем примере нас всякий раз просили подтвердить удаление каждого из этих трех файлов, нужно прибегнуть к одному из параметров:

rm -i test1.txt test2.txt test3.txt

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

Удаление с подтверждением

Можно и наоборот — сделать так, чтобы система не спрашивала нас, удалять ли защищенные от изменения файлы. Для эксперимента создадим в домашней директории файл «nodelete.txt» и сразу защитим его от записи. Откройте сессию терминала и выполните:

touch nodelete.txt && sudo chmod 444 nodelete.txt

Первая команда создаст файл, а вторая — та, что после разделителя — ограничит права на его использование только чтением (кстати, детальнее про возможности отличной команды «chmod», предназначенной для смены прав доступа к файлам и папкам, вы можете прочесть здесь).

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

Перипетии с файлом «nodelete.txt»

Кстати, если вы хотите удалить, например, все файлы с расширением «.txt» в некоем каталоге — пререйдите в него и выполните команду:

rm *.txt

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

Эта возможность может быть вам очень полезна

Как в GNU/Linux удалять директории?

Для удаления директорий, как уже говорилось, используется команда «rmdir». В то же время, удалить каталог — как пустой, так и с каким-либо содержанием — может «rm» с правильным параметром. Более того, «rm» выглядит даже практичнее, чем «rmdir», но ради справедливости я покажу вам оба способа.

Итак, для начала давайте создадим три директории:

cd ~ && mkdir Hello1 Hello2 Hello3

Первая команда изменит рабочий каталог сессии терминала на домашний, а вторая — создаст в нем директории «Hello1», «Hello2» и «Hello3».

Моя домашняя директория с только что созданными «Hello1», «Hello2», «Hello3»

Предлагаю для чистоты эксперимента что-то положить в один из них. Например, в «Hello2»:

touch ~/Hello2/somefile.txt

Теперь в директории «Hello2» имеется файл «somefile.txt».

Проверяем, находимся ли мы все еще в домашнем каталоге:

pwd
Последняя команда вывела на экран адрес рабочего каталога

Если по какой-то причине нет, переходим в него (выполнив команду «cd» без любых дополнительных параметров или же с «~») и удаляем первую созданную директорию с помощью «rmdir»:

rmdir Hello1

Каталог был пуст, поэтому удалится, ничего не переспросив. Но уже в случае с «Hello2» возникнут проблемы: в нем лежит файл! Команда «rmdir» не сможет выполнить поставленной задачи:

rmdir Hello2
Не получается удалить, так как каталог не пуст

В таком случае пригодится уже знакомая нам утилита «rm» с параметром «-r». Она может удалять каталоги, причем по нескольку вместе — так, как в случае с файлами, — и директории с содержимым для нее — не помеха. Давайте-ка удалим «Hello2», прибегнув к этим инструментам:

Очень просто!

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

touch Hello3/test.txt && sudo chmod 444 Hello3/test.txt
Как видим, файл создался и от изменений он защищен

Убедившись, что рабочим каталогом сессии терминала все еще является домашний, следующей командой попробуйте удалить директорию «Hello3» вместе с файлом «test.txt», доступным нам только для чтения:

rm -r Hello3

Система, попросив подтверждения, удалит «Hello3» вместе с содержимым. Если вы не хотите подтверждать действие, можете скомбинировать уже знакомые параметры:

rm -rf Hello3

Или так:

rm -r -f Hello3
Каталог легко удалился, даже не «тявкнув»

Напоследок…

GNU/Linux — очень умная операционная система. Она активно использует идеи многопользовательской среды и разделения прав, характерные для UNIX, поэтому у вас никогда не получится удалить чей-то чужой файл. Исключение — использование прав администратора (как в виде утилиты «sudo», так и непосредственно от root’а): тогда вы сможете делать в системе все, что заблагорассудится.

На моем рабочем компьютере имеются двое пользователей — bohdan (я) и dara (моя невеста). На скриншоте ниже вы можете увидеть, как я, открыв сессию терминала собственным пользователем, переключился на пользователя своей девушки с помощью «su» и введения ее пароля (ох, надеюсь, она об этом не узнает!). Потом я перешел в ее домашний каталог — открытая сессия терминала все еще находилась в моей домашней директории, как вы можете видеть, — и убедился в успешности предыдущей команды с помощью «pwd». Далее я создал файл «file.txt» и тут же, прибегнув к «sudo», ограничил доступ к нему. Напомню, все это происходило под пользователем dara.

Берегите свои пароли!

Следующим шагом я вывел на экран содержимое каталога с некоторыми параметрами, однако в то же время совершил точный поиск с помощью «grep», дабы не показывать вам всего содержимое домашней директории моей девушки. Файл создался, как видим, и права у него — только на чтение, причем для всех.

Наигравшись, я вышел из сеанса пользователя dara командой «exit» и тут же оказался опять в сеансе командной строки собственного пользователя — bohdan. Уже от собственного имени я убедился, что я — это я (команда «whoami»), затем попробовал удалить файл «file.txt», причем, как видите, с параметрами «-r» и «-f». Естественно, система тут же выдала отказ в доступе: не трожь чужое! Я не сдался и повторил предыдущую команду, но через «sudo», то есть воспользовавшись административными привилегиями.

Последняя команда — опять же, выведение на экран содержимого домашней директории моей девушки с использованием «grep». Искал все тот же «file.txt». Не нашел.

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

Автор: root
Изображения: скриншоты автора, из открытых источников

Автор публикации

не в сети 1 час

root

0
Адміністратор сайту «LinuxTheBest»
Комментарии: 235Публикации: 66Регистрация: 11-01-2019
Если Вам понравилась статья, то поделитесь ею в соц.сетях:

12
Отправить ответ

 
avatar
 
smilegrinwinkmrgreenneutraltwistedarrowshockunamusedcooleviloopsrazzrollcryeeklolmadsadexclamationquestionideahmmbegwhewchucklesillyenvyshutmouth
Фото и картинки
 
 
 
Другие файлы
 
 
 
5 Темы
7 Ответов
5 Комментаторов
 
Самый обсуждаемый
Горячие комментарии
7 Авторы комментариев
BookMaxyuriy_chijikovkuchera066Book Последние авторы комментариев
Book
Участник

Что уж тут душой кривить-то? Применительно к сайту можно сказать – “Бобик сдох”.

yuriy_chijikov
Участник

Когда-то я писал, что сайт загибается….Новости – раз в месяц! И сайт живет за счет наработок старого владельца! Меня обливали грязью и унаваживали! А новый хозяин говорил – плати нам зарплату и мы новости будем выдавать! Это вообще – дичь! Зачем автор ввязался в то, что вытянуть не может?! Я себя даже предлагал в модераторы, уж я-то все новости бы отслеживал, так, как сижу дома за ПК сутками! Но –… Читать далее »

Max
Редактор

мы вам в личку писали предложение стать модератором. вы проигнорировали.

Book
Участник

“Это объясняется высокой популярностью графических окружений”
И что в этом плохого? Зачем приплетать терминал туда, где можно обойтись двумя кликами кнопок мышки?
В любом деле меру нужно знать.

kuchera066
Участник

Из всех знакомых мне графических пакетных менеджеров и всяческих магазинов ПО используемых в deb,rpm,arch системах единственный более менее “внятный” это дебианский синаптик. Все остальные время от времени выдают ошибки, что-то типа “невозможно, неудалось”, и приходится открывать терминал и смотреть подробный “выхлоп” почему? Поэтому я всегда администрирование системы стараюсь делать в терминале чтобы избавиться от лишней “головной боли” впоследствии. Хотя согласен в любом деле меру нужно знать и очистить корзину, удалить… Читать далее »

SemenoFF
Участник

підкажіть, як видалити тільки файли в теці, а саму теку не чіпати?
маскою:
rm ~/test/*.*
?

kuchera066
Участник

Вспомнилось сразу как меня когда-то “научили” на форумах легендарной команде “rm -rf /”. Надолго запомнил ))).

newbie
Участник
newbie

man -ы надо читать, а не по форумам шарить. делаешь в консоли такую команду: dpkg -L coreutils это если у вас Debian или Ubuntu… команда выхлопнет состав пакета coreutils – основополагающие низкоуровневые консольные инструменты на все случаи жизни, в конце перечня man -ы почти к каждой программе в пакете. вот что надо читать. а вы по форумам да сомнительным сайтам шаритесь, друг у друга подсматриваете да тырите, сами ничему научиться… Читать далее »

kuchera066
Участник

Как раз для этого я и написал свой пост, чтобы люди понимали, что команды help, man, systemctl, journalctl, check(fedora) и официальная документация иногда полезнее любых форумов. Свою историю я выдумал, кто в здравом уме будет удалять корень? (разве только человек впервые увидевший линукс) и ожидал больше дизлайков и ответов. Но к сожалению мало кого интересует терминал и статьи о нем. Насчет лайки/дизлайки у меня тоже складывается мнение, что сайт и… Читать далее »

Book
Участник

“лайки/дизлайки здесь живут своей жизнью”
А разве они кому-то интересны? Нужно обсуждать, спорить, убеждать, а не тупо ставить + или -. Чем-то напоминает детсадовскую песочницу…

kuchera066
Участник

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

Авторизация
*
*
 
Регистрация
*
*
*
*
 
Генерация пароля