사용자 정의 휴지통 기능 명령어 구현

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 명령어 스크립트 생성 방법
  • 사용자 정의 rm 명령어를 사용하도록 PATH 환경 변수를 업데이트하는 방법
  • 사용자 정의 rm -f 명령어가 예상대로 작동하는지 테스트하는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • 휴지통 디렉토리가 있는 사용자 정의 rm 명령어를 구현하여 실수로 인한 파일 삭제로부터 Linux 서버를 보호합니다.
  • 기본 동작을 변경하기 위해 시스템 명령어를 수정하는 방법을 이해합니다.
  • 쉘 스크립팅 및 환경 변수 관리에 대한 경험을 얻습니다.

휴지통 디렉토리 설정

이 단계에서는 삭제된 파일을 임시로 저장하기 위해 /tmp/trash 디렉토리를 설정하는 방법을 배우게 됩니다.

  1. 터미널을 엽니다.
  2. /tmp/trash 디렉토리를 생성하고 적절한 권한을 설정합니다:
sudo mkdir /tmp/trash
sudo chown root:root /tmp/trash
sudo chmod 1777 /tmp/trash

1777 권한은 디렉토리에 "sticky bit"를 활성화하여 모든 사용자가 디렉토리에 쓸 수 있도록 하지만, 소유자만 디렉토리 내의 파일을 삭제할 수 있도록 합니다.

✨ 솔루션 확인 및 연습

PATH 환경 변수 업데이트

이 단계에서는 사용자 정의 rm 명령어가 기본 시스템 rm 명령어 대신 사용되도록 PATH 환경 변수를 업데이트합니다.

  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 명령어 생성

이 단계에서는 삭제된 파일을 영구적으로 삭제하는 대신 /tmp/trash 디렉토리로 이동시키는 사용자 정의 rm 명령어를 생성합니다.

  1. 사용자 정의 rm 명령어 스크립트를 생성합니다:
sudo vim /usr/local/custom/bin/rm

다음 내용을 파일에 추가합니다:

#!/bin/zsh

## This script is used to move files or directories to the trash directory instead of permanently deleting them.
## If the -f option is used, the targets will be moved to the trash directory.
## If the targets do not exist, an error message will be displayed.

TRASH_DIR="/tmp/trash"

if [[ "$1" == "-f" ]]; then
  shift
  for arg in "$@"; do
    ## Check if the target exists
    if [[ -e "$arg" ]]; then
      ## Move the target to the trash directory
      mv -f "$arg" "$TRASH_DIR"
    else
      echo "Error: $arg does not exist."
    fi
  done
else
  ## Execute the original rm command
  /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

축하합니다! 삭제된 파일을 영구적으로 삭제하는 대신 /tmp/trash 디렉토리로 이동하는 사용자 정의 rm 명령어를 성공적으로 구현했습니다.

✨ 솔루션 확인 및 연습

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.