Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- pip
- Selenium
- C++
- label
- 핑거스타일
- 채보
- Linux
- C#
- C
- 오류
- VS Code
- nvidia-smi
- OpenCV
- 기타 연주
- Numpy
- pandas
- Visual Studio
- 컨테이너
- pytorch
- YOLO
- ubuntu
- 프로그래머스
- JSON
- mysql
- Docker
- SSH
- paramiko
- windows forms
- error
- Python
Archives
- Today
- Total
기계는 거짓말하지 않는다
rm -rf 실수 방지 - 보호 스크립트 작성 본문
rm -rf 명령어는 리눅스에서 한 번 잘못 입력하면 중요한 데이터가 한순간에 사라진다.
특히 root 디렉터리나 중요한 프로젝트 폴더를 실수로 지웠을 경우, 복구는 굉장히 어렵다.
이런 경우를 예방하기 위해, 특정 경로에 대해 rm 명령어가 작동하지 않도록 스크립트로 보호하는 방법이 있다.
간단한 shell 스크립트를 통해 특정 디렉터리에 대한 삭제를 차단할 수 있다.
아래는 예시이며, 스크립트를 vi 또는 nano와 같은 편집기를 이용하여 /usr/local/bin/rm에 저장한다.
#!/bin/bash
# 보호할 경로들을 배열로 정의
BLOCKED_PATHS=(
"/home/ubuntu/data"
"/home/ubuntu/project"
"/var/data/sensitive"
)
# 환경 변수로 보호 우회 허용
if [[ "$DISABLE_PROTECT_RM" == "1" ]]; then
exec /usr/bin/rm "$@"
fi
# 각 인자 확인
for arg in "$@"; do
# 옵션(-r, -f 등)은 무시
if [[ "$arg" == "-"* ]]; then
continue
fi
# 절대 경로로 변환
real=$(realpath -m "$arg" 2>/dev/null)
# 각 보호 경로에 대해 비교
for blocked in "${BLOCKED_PATHS[@]}"; do
if [[ "$real" == "$blocked"* ]]; then
echo "Deletion forbidden: $real"
echo "Set DISABLE_PROTECT_RM=1 to override"
exit 1
fi
done
done
# 보호할 경로들이 아니라면 원래 rm 실행
exec /usr/bin/rm "$@"
이 스크립트를 /usr/local/bin/rm에 저장하고 실행 권한을 부여한다.
sudo chmod +x /usr/local/bin/rm
여기서 중요한 점은 /usr/local/bin이 PATH 환경 변수에서 /bin보다 앞서 있어야 한다.
그래야 보호용 rm이 먼저 실행된다.
현재 PATH 순서를 확인하려면 아래 명령어를 사용한다.
echo $PATH
/usr/local/bin이 /bin보다 앞에 없다면, 아래처럼 일시적으로 변경할 수 있다.
export PATH="/usr/local/bin:$PATH"
영구적으로 적용하려면 ~/.bashrc 또는 ~/.bash_profile 파일에 위 내용을 추가하면 된다.
만약 보호된 경로가 포함된 파일 또는 디렉터리를 삭제 하고싶은 경우,
일시적으로 삭제하려면 /usr/local/bin/rm 파일을 잠깐 mv로 이름을 바꿔도 되지만
위의 shell 스크립트에서 11번 라인의 DISABLE_PROTECT_RM 환경변수를 이용하면 된다.
아래와 같이 실행하면 삭제가 가능하다.
DISABLE_PROTECT_RM=1 rm -r /home/ubuntu/data/test
'Linux' 카테고리의 다른 글
error: uninstall-distutils-installed-package (0) | 2025.01.08 |
---|---|
Linux 파일 내용 비우기 (0) | 2024.10.30 |
Ubuntu 그래픽카드(VGA) 정보 확인 (0) | 2024.08.29 |
make 명령어 File {file} has modification time {sec} s in the future 경고 (0) | 2024.07.15 |
Ubuntu apt update 경고(W: Key is stored in legacy trusted.gpg keyring) (0) | 2024.06.18 |
Comments