alias ‘rm -rf /'="echo 'Are you C***?’"
bash: alias: `rm -rf /*': 잘못된 별칭 이름
rm -rf ./* 을 칠 때 '.'을 빼고 입력 하는 것이 두려워서 alias으로 막을 려 했습니다.
그런데 위 오류처럼 안되네요… man alias를 입력 했더니 참 신기하게 No manual entry for alias를 뿜더군요…
이걸 어떻게 할 수 없을까요?
alias ‘rm -rf /'="echo 'Are you C***?’"
bash: alias: `rm -rf /*': 잘못된 별칭 이름
rm -rf ./* 을 칠 때 '.'을 빼고 입력 하는 것이 두려워서 alias으로 막을 려 했습니다.
그런데 위 오류처럼 안되네요… man alias를 입력 했더니 참 신기하게 No manual entry for alias를 뿜더군요…
이걸 어떻게 할 수 없을까요?
[quote="never":mokdgjii]alias ‘rm -rf /'="echo 'Are you C***?’"
bash: alias: `rm -rf /*': 잘못된 별칭 이름
rm -rf ./* 을 칠 때 '.'을 빼고 입력 하는 것이 두려워서 alias으로 막을 려 했습니다.
그런데 위 오류처럼 안되네요… man alias를 입력 했더니 참 신기하게 No manual entry for alias를 뿜더군요…
이걸 어떻게 할 수 없을까요?[/quote:mokdgjii]
alias는 bash 쉘의 내장 명령입니다.
man이 아니라 help명령어어로 찾아보아야 합니다.
rm 명령으로 루트 폴더를 지우려면 --no-preserve-root옵션이 요구됩니다.
해당 명령으로는 루트권한이 있더라도 지울수 없습니다.
질문에서 ls -l과 rm -rf /이 무슨 상관이 있는지 모르겠습니다.
alias는 명령어를 축약하는 bash쉘 내장 명령어이고, 다음과 같이 사용합니다.
alias ‘ll’=‘ls -l’
만약, ll -l이 ls -l과 등가관계에 놓이게 하려면
ll이란 프로그램이나 스크립트, 또는 bash 함수를 만들고 주어진 인자를 파싱하여 검사하게 하면 됩니다.
일단 rm이 alias로 잡혀있는지 확인(alias rm)하시고,
alias되어 있다면 unalias 하시고(자동일 경우, .bashrc등에 unalias 해주시면 됩니다),
/bin보다 빠른 경로에 다음 스크립트를 rm이라는 파일명으로 만들어 주시고, sudo chmod 755로 실행권한을 주시면 됩니다.
[code:1tsyuxhf]
#!/bin/bash
OPTSTR=$(getopt -l recursive,force -o Rrf – "$@" 2>/dev/null)
if [ "$OPTSTR" = " –" ]; then
/bin/rm "$@"
else
PARAM=("$@")
eval set – $OPTSTR
recursive=0
force=0
while true; do case "$1" in
-r|-R|–recursive)
recursive=1
;;
-f|–force)
force=1
;;
–)
shift; break
esac; shift; done
if [ $recursive -eq 1 -a $force -eq 1 ]; then
read -n1 -p "정말로 삭제하시겠습니까? (y/N)" ans
if [ "$ans" = "y" ]; then
echo
/bin/rm "${PARAM[@]}"
else
echo "취소 되었습니다" 1>&2
exit 1
fi
fi
fi
[/code:1tsyuxhf]
-R, -r 와 -f 옵션이 함께 사용되면, 삭제 확인을 하고, y를 눌렀을 때에만, 삭제하고, 나머지 경우(그냥 엔터를 친 경우 포함)에는 그냥 취소 됩니다.
[quote:3bvditn6]alias는 bash 쉘의 내장 명령입니다.
man이 아니라 help명령어어로 찾아보아야 합니다.
rm 명령으로 루트 폴더를 지우려면 --no-preserve-root옵션이 요구됩니다.
해당 명령으로는 루트권한이 있더라도 지울수 없습니다.
질문에서 ls -l과 rm -rf /이 무슨 상관이 있는지 모르겠습니다.
alias는 명령어를 축약하는 bash쉘 내장 명령어이고, 다음과 같이 사용합니다.
alias ‘ll’=‘ls -l’
만약, ll -l이 ls -l과 등가관계에 놓이게 하려면
ll이란 프로그램이나 스크립트, 또는 bash 함수를 만들고 주어진 인자를 파싱하여 검사하게 하면 됩니다.[/quote:3bvditn6]
–no-preserve-root 옵션이 있었군요.
내장 명령어는 help로 찿아봐야 한다는 것은 처음 알았네요. (/usr 구조를 알면서도 그걸 생각 못했네요.)
명령어 -옵션이 명령어 -옵션과 등가관계에 놓이게 하는 [b:3bvditn6]방법[/b:3bvditn6]을 계속 못 찿고 있었는데 그런 방법이 있었네요.
제가 확인이 몇 일 늦었지만 답변에 감사드립니다.
[quote="protochaos":24khcnuc]일단 rm이 alias로 잡혀있는지 확인(alias rm)하시고,
alias되어 있다면 unalias 하시고(자동일 경우, .bashrc등에 unalias 해주시면 됩니다),
/bin보다 빠른 경로에 다음 스크립트를 rm이라는 파일명으로 만들어 주시고, sudo chmod 755로 실행권한을 주시면 됩니다.
[code:24khcnuc]
#!/bin/bash
OPTSTR=$(getopt -l recursive,force -o Rrf – "$@" 2>/dev/null)
if [ "$OPTSTR" = " –" ]; then
/bin/rm "$@"
else
PARAM=("$@")
eval set – $OPTSTR
recursive=0
force=0
while true; do case "$1" in
-r|-R|–recursive)
recursive=1
;;
-f|–force)
force=1
;;
–)
shift; break
esac; shift; done
if [ $recursive -eq 1 -a $force -eq 1 ]; then
read -n1 -p "정말로 삭제하시겠습니까? (y/N)" ans
if [ "$ans" = "y" ]; then
echo
/bin/rm "${PARAM[@]}"
else
echo "취소 되었습니다" 1>&2
exit 1
fi
fi
fi
[/code:24khcnuc]
-R, -r 와 -f 옵션이 함께 사용되면, 삭제 확인을 하고, y를 눌렀을 때에만, 삭제하고, 나머지 경우(그냥 엔터를 친 경우 포함)에는 그냥 취소 됩니다.[/quote:24khcnuc]
쉘 스크립트를 몰라서 못 짜고 있었는데, 소스를 만들어 주시다니. 감사합니다.
–no-preserve-root 옵션이 있어서 안심 하지만, sudo rm -rf ./* 도 좀 불안 했습니다. 인제 (조금하고 거슬리는) 불안감에서 벗어날 수 있겠네요.