/bin/rm -f *
하위 디렉터리를 나열하고 현재 디렉터리에서 실행한 횟수를 기억할 수 없습니다 . 이 문제를 방지하는 데 도움이 되는 제안을 제공할 수 있는 사람이 있습니까? 실행하려고 할 때 시스템이 위험에 대해 경고하도록 하려면 어떻게 해야 합니까 /bin/rm -f *
?
답변1
zsh
기본적으로 명령줄에서 전체 단어로 호출되는 명령을 실행하려고 하면 확인 메시지가 표시됩니다 rm
( *
이 기능은 에서 상속되지만 tcsh
기본적 tcsh
으로 활성화되지 않습니다).
$ rm -rf *
zsh: sure you want to delete all the files in / [yn]?
Bash를 사용해야 한다면 최신 버전을 사용하세요 . and Trap을 사용하면 비슷한 작업을 수행 bash
할 수 있습니다 .extdebug
DEBUG
shopt -s extdebug
check_for_rm_star() {
case $1 in
(rm*[\ /]"* "* | rm*[\ /]\*)
read -p "check_for_rm_star: Are you sure? " -n1 answer < /dev/tty > /dev/tty
echo > /dev/tty
[[ $answer == [yY] ]]
esac
}
trap 'check_for_rm_star "$BASH_COMMAND"' DEBUG
rm *
이는 and의 가장 일반적인 경우에는 작동하지만 rm "*"
or 에는 작동하지 않는 간단한 접근 방식 /bin/rm *
이지만 : $(rm *)
아이디어를 얻을 수 있습니다. 이상적으로 우리는 $BASH_COMMAND
쉘이 하는 것과 같이 구문 분석하고 첫 번째 인수가 rm
or 로 확장되는지 확인 */rm
하고 따옴표 없이 인수가 전달되었는지 확인해야 *
하지만 실제로는 방탄 방식으로 수행할 수 없습니다.
답변2
rm
한 가지 가능성은 덜 파괴적인 명령에 매핑되는 셸 별칭을 만드는 것입니다 . 예를 들어:
alias rm='trash' # from the package trash-cli
이렇게 하면 파일이 삭제되지는 않지만 복구할 수 있도록 파일을 휴지통에 넣습니다. 그러나 이로 인해 명령의 의미가 변경됩니다(예: rm
디렉터리를 사용하지 않고 전체 디렉터리를 삭제할 수 있음). -r
또한 전체 경로를 사용하면 도움이 되지 않습니다.
또 다른 가능성은 한 시간에 한 번과 같이 정기적인 백업을 설정하는 것입니다. 이렇게 하면 파일을 삭제하고 나중에 복구할 수 있습니다.
답변3
유일한 방법은 rm 자체를 교체하는 것입니다.
안전한 rm을 제공하도록 설계된 rm용 래퍼 스크립트는 다음 위치에서 찾을 수 있습니다.발사대. 이 페이지에서:
Safe-rm은 절대 삭제해서는 안 되는 구성 가능한 파일 및 디렉터리의 블랙리스트와 비교하여 지정된 매개변수를 확인하는 래퍼로 /bin/rm을 대체하여 중요한 파일이 실수로 삭제되는 것을 방지하도록 설계된 보안 도구입니다.
내가 본 유일한 문제는 "위험한" rm 예제가 전체 경로로 실행된다는 것입니다 /bin/rm
. 따라서 이 래퍼 스크립트를 $PATH의 이전 디렉터리에 넣을 수 없으며 rm을 실행할 때 이를 찾고 아래와 같이 전체 경로 /bin/rm을 입력하여 래핑되지 않은 "일반" rm을 얻을 수 없습니다. 위와 같이 하십시오.
답변4
간단한 해결책은 추가 alias rm="rm -i"
한 다음 삭제할 때마다 확실한지 묻는 것입니다. 그러나 선생님 중 한 분이 지적하셨듯이, 이는 여러분이 사용하고 있는 UNIX 시스템이 안전하고 따뜻한 곳이라고 생각하도록 속일 수 있으며, 이는 실수로 실행하는 것보다 더 위험할 수 있습니다.rm *