
chmod
및 와 같은 몇 가지 Linux 명령에 확인 프롬프트를 추가하려고 합니다 chown
.
나는 이것을 Google에 시도했지만 주제에 대한 많은 정보를 찾을 수 없습니다.
rm
검색하는 동안 옵션을 사용하는 솔루션이 있다는 것을 알았습니다 -i
.-f
그러나 서버에 설치할 수 있는 특정 중요한 디렉터리를 블랙리스트에 추가하는 패키지가 있는데 이는 매우 좋은 솔루션이지만 안타깝게도 및 safe-rm
에 대한 유사한 패키지는 없습니다 .chmod
chown
따라서 내 이상적인 솔루션은 확인 메시지가 표시되는 위치 chmod
와 chown
특정 디렉터리가 chmod 및 chown되지 않도록 블랙리스트에 추가되는 것입니다.
어떤 답변이라도 감사드립니다 !!!
답변1
명령친 (1)그리고chmod (1)기본적으로 sunch 옵션이 없습니다. 해당 기능을 추가하려면 다음 중 하나를 수행하세요.
- 소스를 변경하고 다시 컴파일해야 합니다.
- 아니면 래퍼를 작성하세요.
첫 번째 옵션이 가장 깨끗합니다. 두 번째는 더 쉽습니다. 글을 쓰다 막히면 [SO]에 더 적합할 것 같은 새로운 질문이 필요합니다. 단, 간단히 말하면 다음과 같습니다.
1) chmod를 다른 곳으로 옮깁니다. 예를 들어mv /bin/chmod /bin/chmold.therealthing
2) 원하는 작업을 수행하는(실제 chmod를 호출하는) chmod라는 실행 가능한 스크립트를 만듭니다.
쉘 스크립트가 아닌 사람(일명 나:)이 작성한 내용을 테스트하지 않았습니다.
#!/usr/bin/env bash
echo "/bin/chmod (Shell script) called with these arguments:"
echo $@
read -p "Are you sure you want to do this? (y/n) " RESPONSE
if [ "$RESPONSE" = "y" ]; then
exec /bin/chmod.therealthing $@
else
echo "OK, aborting."
fi
보다 세부적인 제어를 원하면 스크립트가 빠르게 더 복잡해집니다. 그래도 입력을 구문 분석하고 모든 파일에 대해 chmod를 실행할 수 있기를 바랍니다(유효한 구문을 확인한 후).
답변2
Bash의 해결책은 쉘 함수와 별칭을 사용하는 것입니다. 특정 사용자에게만 적용하려면 /etc/bashrc 또는 ~/.bashrc에 넣을 수 있습니다. 다음은 귀하가 요청한 것과 같은 작업을 수행하는 데 사용할 수 있는 몇 가지 함수 및 별칭 정의입니다.
DANGERLIST=/etc/dangerous.paths
_dangerouspath() {
file=$(readlink -e "$1")
[ -z "${file}" ] && return 1
while read pattern
do
[[ "${file}" =~ ^${pattern}$ ]] && return 0
done < ${DANGERLIST}
return 1
}
_checkpaths() {
shift
while [ -n "$1" ]
do
[[ "X$1" =~ ^X[^-].* ]] && _dangerouspath $1 && return 0
shift
done
return 1
}
_saferun() {
p="$1"
shift
if _checkpaths $*
then
read -p "Are you sure you want to do this? (y/n) " r && [ "$r" = "y" ] && $p $*
else
$p $*
fi
}
alias chown="_saferun /bin/chown"
alias chgrp="_saferun /bin/chgrp"
alias chmod="_saferun /bin/chmod"
"$DANGERLIST" (/etc/dangerous.paths)에서 보호하려는 경로 목록을 만들어야 합니다.
/
/home
/etc.*
/usr/bin.*
/bin.*