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

Псевдоним в Unix/Linux – это ярлык, который позволяет создавать собственные команды или изменять поведение существующих команд. Используя команду alias, вы можете сократить длинную команду или добавить опции к командам по умолчанию, сделав их использование более простым или безопасным.

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

В этом кратком руководстве мы узнаем, почему псевдонимы rmrm -i – это плохая практика, на практическом примере. Мы также узнаем о лучших практиках и более безопасных альтернативах псевдонима rm в Linux.

Почему некоторые люди называют rm и rm -i

Когда вы используете команду rm в системе Unix/Linux, она удаляет файлы немедленно и навсегда. Это мощная команда, которую нужно использовать осторожно, чтобы случайно не удалить важные файлы.

Некоторые люди создают псевдоним для rm, например alias rm="rm -i", чтобы сделать ее более безопасной. Этот псевдоним изменяет команду rm, чтобы всегда запрашивать подтверждение перед удалением.

Давайте я покажу вам пример, чтобы вы могли лучше понять его.

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

rm important-file.txt

Эта команда немедленно удалит important-file.txt, не спрашивая, уверены ли вы. Это быстро, но рискованно, если вы сделаете опечатку или передумаете.

Пример rm с псевдонимом ( rm -i ):

rm important-file.txt

С псевдонимом эта команда теперь спрашивает: «Удалить обычный файл „important-file.txt“?». Вы должны набрать y (да), чтобы удалить его, или n (нет), чтобы отменить. Это кажется более безопасным, потому что добавляет шаг для двойной проверки вашего решения.

Почему псевдоним rm – плохая практика

Псевдоним rm='rm -i' очень опасен, потому что;

Причина 1 – вредные привычки

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

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

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

Причина 2 – непоследовательное поведение

Если вы используете разные компьютеры или системы (например, офисный компьютер, сервер или ноутбук друга), команда rm может не иметь одинакового псевдонима.

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

Причина 3 – проблемы со сценариями и автоматизацией

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

Правильные привычки

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

  • Всегда перепроверяйте команду и файлы, на которые она будет влиять, прежде чем нажать Enter.
  • Используйте команду ls, чтобы просмотреть список файлов и убедиться, что вы находитесь в правильном каталоге.
  • Для критических удалений вручную набирайте rm -i, чтобы получить запрос на подтверждение только для этого случая, а не делать его поведением по умолчанию.
  • Потренируйтесь использовать rm в безопасной среде, например в папке с неважными тестовыми файлами, чтобы выработать уверенность и хорошие привычки.

Более безопасные альтернативы псевдониму rm

Вместо псевдонима rm, используемого по умолчанию, на rm -i, вы можете использовать любую из следующих более безопасных альтернатив:

  1. Использование пользовательского псевдонима с другим именем команды
  2. Создание более безопасного сценария удаления файлов, который помещает удаленные данные в каталог корзины
  3. Использование инструмента trash-cli
  4. Использование снимков файловой системы

Создание пользовательского псевдонима

Если вы хотите создать пользовательский псевдоним для команды rm, используйте совершенно другое имя, например rmi или rmcli или myrm и т. д.

Например, я собираюсь создать псевдоним rmi .

nano ~/.bashrc

Добавьте следующую строку в конце:

alias rmi='rm -i'

Сохраните файл и закройте его.

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

rmi somefile.txt

Вам будет предложено подтвердить удаление файла.

rm: remove regular file 'somefile.txt'?

Нажмите y, чтобы подтвердить удаление файла, или n, чтобы пропустить его.

Создание отдельного псевдонима типа alias rmi='rm -i' действительно является более безопасным и эффективным подходом, чем переопределение стандартного поведения команды rm.

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

Преимущества использования alias rmi='rm -i'

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

  1. Четкое различие: Она сохраняет четкое различие между стандартной командой rm и ее интерактивной версией, снижая вероятность рефлекторного использования rm и ожидания запроса на подтверждение.
  2. Снижение риска в незнакомых системах: Если вы работаете в системе, в которой нет ваших персональных псевдонимов, вероятность случайного удаления файлов будет ниже, поскольку вы не будете привыкать полагаться на rm для запроса подтверждения.
  3. Гибкость: Вы можете выбирать, когда использовать rmi для более безопасного удаления, а rm для более быстрого, неинтерактивного удаления, в зависимости от ситуации и уровня вашей уверенности.

Создание сценария безопасного удаления файлов

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

Создание сценария

Создайте текстовый файл под названием rmcli со следующим содержимым:

#!/bin/bash
rmcli: A safer file deletion script
TRASH_DIR="$HOME/.trash"
LOG_FILE="$HOME/.rmcli.log"
Ensure trash directory exists
mkdir -p "$TRASH_DIR"
Move files to trash instead of deleting
for file in "$@"; do
    timestamp=$(date +%Y-%m-%d_%H-%M-%S)
    trash_path="$TRASH_DIR/$(basename "$file")_$timestamp"
    mv -v "$file" "$trash_path"
    echo "[$timestamp] $file ->$trash_path" >>"$LOG_FILE"
done

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

Сделайте скрипт исполняемым:

После сохранения скрипта необходимо сделать его исполняемым. Это позволит запускать его как команду. Для этого воспользуйтесь командой chmod:

chmod +x rmcli

Переместите скрипт в место в PATH:

Для удобства следует переместить скрипт в место в PATH вашей системы, чтобы вы могли запустить его из любой директории. Обычное место для персональных скриптов – /usr/local/bin:

sudo mv rmcli /usr/local/bin

Использование скрипта:

Сейчас вы можете использовать команду rmcli так же, как и команду rm, но с учетом особенностей безопасности вашего скрипта.

Например:

rmcli somefile.txt

Эта команда переместит somefile.txt в каталог trash, а не удалит его навсегда.

Пример вывода:

renamed 'somefile.txt' ->'/home/ostechnix/.trash/somefile.txt_2024-02-28_16-53-59'

Вы можете проверить это, выведя содержимое каталога ~/.trash.

ls ~/.trash

Восстановление файлов:

Чтобы восстановить файлы, перейдите в каталог корзины (~/.trash в примере) и переместите файлы в исходное место или в другое место по необходимости.

cd ~/.trash
mv somefile.txt_2024-02-28_16-53-59 ~/somefile.txt

Ведение журнала:

Сценарий регистрирует каждое «удаление» с меткой времени. Убедитесь, что местоположение файла журнала, указанное в сценарии, существует или доступно для записи. Вы можете просмотреть этот журнал, чтобы узнать, какие файлы были перемещены в корзину.

cat $HOME/.rmcli.log
[2024-02-28_16-53-59] somefile.txt ->/home/ostechnix/.trash/somefile.txt_2024-02-28_16-53-59

Использование trash-cli

Другой более безопасной альтернативой rm является использование утилиты командной строки, например trash-cli, которая перемещает файлы в каталог корзины, а не удаляет их безвозвратно. Это позволяет восстановить файлы при необходимости.

Используйте файловые системы с поддержкой моментальных снимков

Использование файловой системы с поддержкой неограниченного количества моментальных снимков, например BTRFS (B-tree File System) или ZFS (Zettabyte File System), является отличной стратегией защиты от случайного удаления или перезаписи файлов.

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

Другие безопасные методы

  1. Режим verbose: Используйте опцию verbose (-v) с rm или вашим псевдонимом, чтобы получить подробный вывод того, что удаляется. Это поможет выявить ошибки до того, как они произойдут. Например, alias rmi='rm -i -v'.
  2. Скриптовые средства защиты: Для пользователей, которые часто удаляют файлы массово или с помощью скриптов, рассмотрите возможность написания скрипта-обертки для rm, который включает ведение журнала удаленных файлов или требует явного подтверждения для удаления, превышающего определенный порог (например, количество файлов, размер файла).
  3. Образование и практика: Регулярно рассказывайте себе и другим о последствиях операций командной строки и практикуйте безопасное управление файлами. Это включает в себя двойную проверку текущего каталога (pwd), листинг файлов (ls или la) перед удалением и осторожное использование абсолютных путей.

Заключение

Хотя псевдоним rm на rm -i может показаться хорошей мерой безопасности, это может привести к самоуверенности и ошибкам в средах, где псевдоним не установлен.

Приняв эти советы и лучшие практики, вы можете значительно снизить риски, связанные со случайным удалением файлов с помощью команды rm в системах Unix/Linux.

Зарубин Иван Эксперт по Linux и Windows

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

Вдохновлен ostechnix.com

Похожие статьи

Комментарии (0)