Реализация пользовательской команды с поддержкой корзины

LinuxBeginner
Практиковаться сейчас

Введение

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

👀 Предварительный просмотр

labex:project/ $ ll /tmp/trash
total 2.0K
-rw-r--r-- 1 labex labex 8 Oct 26 17:47 trash_file.md

🎯 Задачи

В этом проекте вы научитесь:

  • настраивать директорию /tmp/trash для временного хранения удаленных файлов;
  • создавать скрипт пользовательской команды rm, который перемещает удаленные файлы в директорию для корзины;
  • обновлять переменную окружения PATH, чтобы использовать пользовательскую команду rm;
  • тестировать пользовательскую команду rm -f, чтобы убедиться, что она работает как ожидается.

🏆 Достижения

После завершения этого проекта вы сможете:

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

Настройка директории для корзины

В этом шаге вы научитесь настраивать директорию /tmp/trash для временного хранения удаленных файлов.

  1. Откройте терминал.
  2. Создайте директорию /tmp/trash и задайте соответствующие права доступа:
sudo mkdir /tmp/trash
sudo chown root:root /tmp/trash
sudo chmod 1777 /tmp/trash

Право 1777 включает "стicky bit" для директории, что позволяет всем пользователям записывать в директорию, но только владельцу можно удалять файлы внутри нее.

Обновить переменную окружения PATH

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

  1. Создайте новую директорию для хранения собственной команды rm:
sudo mkdir -p /usr/local/custom/bin
  1. Откройте файл /etc/environment для редактирования:
sudo vim /etc/environment
  1. Добавьте директорию /usr/local/custom/bin в начало переменной PATH:
PATH="/usr/local/custom/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
  1. Сохраните файл и выйдите из редактора.
  2. Примените изменения в файле /etc/environment, чтобы обновить окружение текущей оболочки:
source /etc/environment
sudo chmod a+x /usr/local/custom/bin

Теперь вместо стандартной системной команды rm будет использоваться наша собственная команда rm.

Создать пользовательскую команду rm

В этом шаге вы создадите пользовательскую команду rm, которая будет перемещать удаленные файлы в директорию /tmp/trash вместо их постоянного удаления.

  1. Создайте скрипт пользовательской команды rm:
sudo vim /usr/local/custom/bin/rm

Добавьте в файл следующее содержимое:

#!/bin/zsh

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

TRASH_DIR="/tmp/trash"

if [[ "$1" == "-f" ]]; then
  shift
  for arg in "$@"; do
    ## Проверьте, существует ли цель
    if [[ -e "$arg" ]]; then
      ## Переместите цель в директорию для корзины
      mv -f "$arg" "$TRASH_DIR"
    else
      echo "Error: $arg does not exist."
    fi
  done
else
  ## Выполните исходную команду rm
  /bin/rm "$@"
fi
  1. Задайте соответствующие права доступа для скрипта пользовательской команды rm:
sudo chown root:root /usr/local/custom/bin/rm
sudo chmod 755 /usr/local/custom/bin/rm

Тестировать пользовательскую команду rm

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

  1. Создайте тестовый файл в директории /home/labex/project:
touch /home/labex/project/trash_file.md
  1. Используйте пользовательскую команду rm -f для удаления тестового файла:
rm -f /home/labex/project/trash_file.md
  1. Проверьте, что файл был перемещен в директорию /tmp/trash:
ls -l /tmp/trash

В выводе должен быть перечислен файл trash_file.md.

total 2.0K
-rw-r--r-- 1 labex labex 8 Oct 26 17:47 trash_file.md

Поздравляем! Вы успешно реализовали пользовательскую команду rm, которая перемещает удаленные файлы в директорию /tmp/trash вместо их постоянного удаления.

Резюме

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

✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться