이 명령이 터미널에서 잘못 실행되는 것을 완전히 방지할 수 있는 방법이 있습니까? 예를 들어, bash에는 별칭이 있다는 것을 알고 있습니다. 사용할 수 있는 방법이 있나요?
답변1
rm
그렇습니다. 혼란을 피하는 방법이 있습니다 . 그러나 이처럼 완벽한 명령을 만드는 것보다 rm
Unix 시스템을 책임감 있게 사용하는 방법을 배우는 것이 더 좋습니다.
나의 충고:
위험한 명령(
rm
,dd
, 등)shred
을 처리할eval
때는 각별히 주의하십시오 .오타가 없었다는 확신이 없다면 아무 것도 하지 마십시오.
주어진 명령을 완전히 이해하지 못하면 해당 명령을 실행하지 마십시오. 계속하기 전에 설명서를 읽어보세요.
백업을 하세요. 그리고 백업을 백업하세요.
즉, 다음과 같이 할 수 있습니다.
alias rm='rm -i'
rm() { command rm -i "${@}"; }
해당 옵션을 전달하면 보호되지 않지만 -f
간단한 경우에는 작동합니다.
$ rm file
rm: remove regular file 'file'? y
또는 더 복잡한 래퍼를 작성할 수도 있습니다.
이 접근 방식의 가장 큰 문제는 이러한 비표준 동작에 익숙해질 수 있다는 것입니다. 이는 이 클래스 이름/함수/래퍼가 없는 시스템에서 작업해야 하는 경우 매우 위험할 수 있습니다.
답변2
요청에 따라 이 래퍼 기능은 사용자가 특정 유형의 오류를 범하는 것을 방지합니다.
function rm {
if [ "$#" -eq 2 ] && [ "$1" = "-rf" ] && [ "$2" = "$HOME" ]
then
echo Avoiding a dangerous command...
return
else
command rm "$@"
fi
}
... $HOME이 설정된 경우(그렇지 않으면 사용자의 홈 디렉토리) bash가 이를 rm -rf ~
로 대체하기 때문입니다 .rm -rf $HOME
이것은아니요그러나 많은 오류를 방지할 수 있습니다. 매개변수를 반복하도록 테스트를 확장하고 각 매개변수가 의 하위 집합인지 $HOME
또는 주의해야 할 항목인지 확인할 수 있습니다.
이는 사용자가 다른 변형을 실행 rm -rf ./*
하거나 실행 \rm -rf ~
하는 것을 보호하지 않습니다 .sudo rm -rf ~
답변3
사용할 수 있는 팁: 삭제읽다보호할 디렉터리에 대한 권한입니다. 이렇게 하면 특정 서브파일이나 디렉토리를 제공하지 않는 명령으로 수행해야 하는 디렉토리 내용의 명시적 또는 암시적 나열이 방지됩니다. 하위 이름을 지정하는 경우 디렉터리 탐색 권한(flag execute
)만 필요하므로 보호된 디렉터리 아래의 모든 항목에 계속 액세스할 수 있습니다.
빠른 데모:
# Create the directory, remove its 'read' flag
**$ mkdir protected && chmod -r protected && ls -ald protected
d-wx--x--x 2 me me 4096 Dec 7 21:58 protected
# You cannot list contents since you cannot read it
**$ ls protected
ls: cannot open directory 'protected': Permission denied
# You can create files in it since you have write permission
**$ touch protected/{1..3}
# You can list specific directories entries
**$ ls -al protected/1
-rw-r--r-- 1 me me 0 Dec 7 21:59 protected/1
# You can also create subdirectories
**$ mkdir protected/subdir
# ... and create files in them
**$ touch protected/subdir/{1..3}
# ... do wilcard listing of these subdirectories
**$ ls -al protected/subdir
total 8
drwxr-xr-x 2 me me 4096 Dec 7 21:59 .
d-wx--x--x 3 me me 4096 Dec 7 21:59 ..
-rw-r--r-- 1 me me 0 Dec 7 21:59 1
-rw-r--r-- 1 me me 0 Dec 7 21:59 2
-rw-r--r-- 1 me me 0 Dec 7 21:59 3
# You can erase files, along as you specify them explicitly
**$ rm protected/{1..3}
# You cannot do a blanket erase, since it would require reading the directory
**$ rm -rf protected
rm: cannot remove 'protected': Permission denied
# ... but that works on its subdirectories
**$ rm -rf protected/subdir
# You can still remove the directory once it is empty
**$ rmdir protected
그러나 읽기 권한이 있는 유틸리티(예: 파일 탐색기)가 많을 수 있으므로 이 솔루션이 홈 디렉터리에서 작동할지는 의문입니다.