소개
이 프로젝트에서는 삭제된 파일을 영구적으로 삭제하는 대신 휴지통 디렉토리로 이동시키는 사용자 정의 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 디렉토리를 설정하는 방법을 배우게 됩니다.
- 터미널을 엽니다.
/tmp/trash디렉토리를 생성하고 적절한 권한을 설정합니다:
sudo mkdir /tmp/trash
sudo chown root:root /tmp/trash
sudo chmod 1777 /tmp/trash
1777 권한은 디렉토리에 "sticky bit"를 활성화하여 모든 사용자가 디렉토리에 쓸 수 있도록 하지만, 소유자만 디렉토리 내의 파일을 삭제할 수 있도록 합니다.
PATH 환경 변수 업데이트
이 단계에서는 사용자 정의 rm 명령어가 기본 시스템 rm 명령어 대신 사용되도록 PATH 환경 변수를 업데이트합니다.
- 사용자 정의
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 명령어 생성
이 단계에서는 삭제된 파일을 영구적으로 삭제하는 대신 /tmp/trash 디렉토리로 이동시키는 사용자 정의 rm 명령어를 생성합니다.
- 사용자 정의
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
- 사용자 정의
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
축하합니다! 삭제된 파일을 영구적으로 삭제하는 대신 /tmp/trash 디렉토리로 이동하는 사용자 정의 rm 명령어를 성공적으로 구현했습니다.
요약
축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.



