rm означает «remove», как следует из названия, команда rm используется для удаления файлов и каталогов в UNIX-подобной операционной системе. Если вы новичок в Linux, вы должны быть очень осторожны при запуске команды rm, потому что, как только вы удалите файлы, вы не сможете восстановить содержимое файлов и каталогов. Хотя есть некоторые инструменты и команды, с помощью которых можно восстановить удаленные файлы, но для этого вам нужны экспертные навыки.
В этом посте я продемонстрирую 10 примеров команд Linux rm. Ниже приведен основной синтаксис команды rm.
# rm <опции> {файлы}
Удаление файла
Давайте удалим файл с именем «linux.log»
$ rm linux.log
Удаление нескольких файлов одновременно.
Давайте предположим, что я хочу удалить четыре текстовых файла одновременно. Используйте приведенный ниже синтаксис.
$ rm {file1} {file2}] {file3} {file4}
$ rm file1.txt file2.txt file3.txt file4.txt
Интерактивное удаление файлов
Параметр ‘-i‘ спрашивает разрешение перед удалением, как показано ниже.
$ rm -i linuxstufff.log
rm: remove regular file ‘linuxstufff.log’? y
Удаление пустой директории
Используйте опцию «-d» для удаления пустой папки.
$ ls -R appdata/
appdata/:
$ rm -d appdata/
Вы также можете использовать команду ‘rmdir‘ для удаления пустых папок.
$ ls -R appdata/
appdata/:
$ rmdir appdata
Рекурсивное удаление директорий
Команде rm вместе параметром ‘-r‘ рекурсивно удалит все файлы и подкаталогов в родительской директории.
$ ls -lR dbstore/
dbstore/:
total 0
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 26 23:59 file1.log
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 26 23:59 file2.log
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 26 23:59 file3.log
drwxrwxr-x. 2 mordeniuss mordeniuss 6 Mar 26 23:59 service
dbstore/service:
total 0
$ rm -r dbstore/
Удаление файлов и подкаталогов интерактивно
Используйте опцию ‘-ri‘ в команде rm для интерактивного удаления файлов и подкаталогов.
$ ls -lR dbstore/
dbstore/:
total 0
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 27 00:02 file1.log
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 27 00:02 file2.log
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 27 00:02 file3.log
drwxrwxr-x. 2 mordeniuss mordeniuss 6 Mar 27 00:02 service
dbstore/service:
total 0
[mordeniuss@cloud ~]$ rm -ri dbstore/
rm: descend into directory ‘dbstore/’? y
rm: remove regular empty file ‘dbstore/file1.log’? y
rm: remove regular empty file ‘dbstore/file2.log’? y
rm: remove regular empty file ‘dbstore/file3.log’? y
rm: remove directory ‘dbstore/service’? y
rm: remove directory ‘dbstore/’? y
Принудительное удаление файлов
Параметр ‘-f‘ в команде rm принудительно удаляет файлы независимо от их прав доступа, а также игнорирует несуществующие файлы.
Давайте удалим защищенный от записи файл ‘tech.txt’
$ ls -l tech.txt
-r--r--r--. 1 mordeniuss mordeniuss 0 Mar 27 00:23 tech.txt
$ rm tech.txt
rm: remove write-protected regular empty file ‘tech.txt’?
Как мы видим выше, когда мы пытаемся удалить файл, защищенный от записи, с помощью команды rm без опции ‘-f‘, выходит предупреждение.
Теперь попробуйте удалить файл, используя опцию ‘-f‘.
$ rm -f tech.txt
Также попробуем удалить несуществующий файл.
$ rm -f nonexist.txt
Примечание: опция -f не будет работать для каталогов, защищенных от записи.
Давайте рассмотрим пример, каталог ‘home/home/mordeniuss/location/protected‘ защищен от записи, а файл ‘db_stuff‘ внутри этого каталога нет.
$ ls -ld /home/mordeniuss/location/
drwxrwxr-x. 2 root root 29 Mar 27 00:43 /home/mordeniuss/location/
$ ls -l /home/mordeniuss/location/db_stuff
-rw-rw-r--. 1 mordeniuss mordeniuss 17 Mar 27 00:43 /home/mordeniuss/location/db_stuff
$ rm -f /home/mordeniuss/location/db_stuff
rm: cannot remove ‘/home/mordeniuss/location/db_stuff’: Permission denied
Проверка при удалении более 3 файлов или рекурсивном удаление
Параметр ‘-I‘ в команде rm перед удалением более трех файлов или рекурсивным удалением запрашивает подтверждение.
Предположим, я хочу удалить все файлы журнала, которые начинаются с имени «app» в каталоге «linux_store».
$ ls -l linux_store/
total 0
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 27 01:07 app1.log
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 27 01:07 app2.log
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 27 01:07 app3.log
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 27 01:07 app4.log
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 27 01:07 app5.log
$ rm -I linux_store/app*
rm: remove 5 arguments? y
Регулярные выражения в команде rm
Мы можем использовать регулярные выражения в команде rm, некоторые примеры показаны ниже:
Давайте удалим 5 файлов журнала, начиная с log1 до log5 в каталоге ‘linux_store‘.
$ pwd
/home/mordeniuss/linux_store
$ ll
total 0
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 27 01:15 log1.txt
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 27 01:15 log2.txt
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 27 01:15 log3.txt
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 27 01:15 log4.txt
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 27 01:15 log5.txt
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 27 01:15 log6.txt
........................................
$rm -f log{1..5}.txt
Удалим все файлы в данной директории, которые заканчиваются на ‘.txt‘
$ rm -f *.txt
Удалим все файлы в текущем каталоге, которые имеют три символа в расширение.
$rm -f *.???
Удаление большого количества файлов
Если вы пытаетесь удалить большое количество файлов с помощью команды rm, вы получите сообщение об ошибке
‘Argument list too long‘ (Список аргументов слишком длинный)
В приведенном ниже примере я пытаюсь удалить все файлы (около 300001) каталога ‘/home/mordeniuss/linux_store‘ сразу.
$ ls -l | wc -l
300001
$ rm *.log
-bash: /bin/rm: Argument list too long
Чтобы решить эту проблему, используйте команду:
$ find ~/linux_store/ -type f -exec rm {} \;
Удаление файлов, начинающихся с дефиса (-)
Давайте предположим, что у нас есть файл с именем ‘-store‘ в нашем текущем каталоге, и мы хотим удалить этот файл.
$ ll
total 0
-rw-rw-r--. 1 mordeniuss mordeniuss 0 Mar 27 02:05 -store
$ rm -store
rm: invalid option -- 's'
Try 'rm --help' for more information.
[mordeniuss@cloud linux_store]$
Удалить этот файл можно с помощью команд ниже.
$ rm -- \ -store
ИЛИ
$ rm ./\ -store