chmod, chown에 대한 확인 프롬프트

chmod, chown에 대한 확인 프롬프트

chmod및 와 같은 몇 가지 Linux 명령에 확인 프롬프트를 추가하려고 합니다 chown.

나는 이것을 Google에 시도했지만 주제에 대한 많은 정보를 찾을 수 없습니다.

rm검색하는 동안 옵션을 사용하는 솔루션이 있다는 것을 알았습니다 -i.-f

그러나 서버에 설치할 수 있는 특정 중요한 디렉터리를 블랙리스트에 추가하는 패키지가 있는데 이는 매우 좋은 솔루션이지만 안타깝게도 및 safe-rm에 대한 유사한 패키지는 없습니다 .chmodchown

따라서 내 이상적인 솔루션은 확인 메시지가 표시되는 위치 chmodchown특정 디렉터리가 chmod 및 chown되지 않도록 블랙리스트에 추가되는 것입니다.

어떤 답변이라도 감사드립니다 !!!

답변1

명령친 (1)그리고chmod (1)기본적으로 sunch 옵션이 없습니다. 해당 기능을 추가하려면 다음 중 하나를 수행하세요.

  1. 소스를 변경하고 다시 컴파일해야 합니다.
  2. 아니면 래퍼를 작성하세요.

첫 번째 옵션이 가장 깨끗합니다. 두 번째는 더 쉽습니다. 글을 쓰다 막히면 [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.*

관련 정보