Введение
В этом проекте вы научитесь создавать пользовательскую команду 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 для временного хранения удаленных файлов.
- Откройте терминал.
- Создайте директорию
/tmp/trashи задайте соответствующие права доступа:
sudo mkdir /tmp/trash
sudo chown root:root /tmp/trash
sudo chmod 1777 /tmp/trash
Право 1777 включает "стicky bit" для директории, что позволяет всем пользователям записывать в директорию, но только владельцу можно удалять файлы внутри нее.
Обновить переменную окружения PATH
В этом шаге вы обновите переменную окружения PATH, чтобы гарантировать, что будет использоваться наша собственная команда rm вместо стандартной системной команды rm.
- Создайте новую директорию для хранения собственной команды
rm:
sudo mkdir -p /usr/local/custom/bin
- Откройте файл
/etc/environmentдля редактирования:
sudo vim /etc/environment
- Добавьте директорию
/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"
- Сохраните файл и выйдите из редактора.
- Примените изменения в файле
/etc/environment, чтобы обновить окружение текущей оболочки:
source /etc/environment
sudo chmod a+x /usr/local/custom/bin
Теперь вместо стандартной системной команды rm будет использоваться наша собственная команда rm.
Создать пользовательскую команду rm
В этом шаге вы создадите пользовательскую команду rm, которая будет перемещать удаленные файлы в директорию /tmp/trash вместо их постоянного удаления.
- Создайте скрипт пользовательской команды
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
- Задайте соответствующие права доступа для скрипта пользовательской команды
rm:
sudo chown root:root /usr/local/custom/bin/rm
sudo chmod 755 /usr/local/custom/bin/rm
Тестировать пользовательскую команду rm
В этом шаге вы протестируете пользовательскую команду rm -f, чтобы убедиться, что она работает как ожидается.
- Создайте тестовый файл в директории
/home/labex/project:
touch /home/labex/project/trash_file.md
- Используйте пользовательскую команду
rm -fдля удаления тестового файла:
rm -f /home/labex/project/trash_file.md
- Проверьте, что файл был перемещен в директорию
/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, чтобы улучшить свои навыки.



