Bash를 사용하여 시스템이 RHEL, CentOS 또는 Oracle Linux인지 확인하는 방법은 무엇입니까?

Bash를 사용하여 시스템이 RHEL, CentOS 또는 Oracle Linux인지 확인하는 방법은 무엇입니까?

CentOS/Oracle Linux에서 RHEL 8로 새 시스템을 마이그레이션하는 데 필요한 파일을 생성하고 필요한 패키지를 설치하는 스크립트를 생성 중입니다. 스크립트를 실행하는 시스템이 CentOS 8 또는 Oracle Linux 8을 사용하는지 여부를 감지하고 RHEL 8을 사용하는 시스템이 스크립트를 실행하지 못하도록 차단하고 싶습니다(보호 조치로). Bash를 사용하여 이 작업을 어떻게 수행합니까? 시스템이 RHEL인지 CentOS인지 확인하려면 어떤 파일을 확인해야 하며 어떤 명령을 사용해야 합니까?

답변1

~에서https://get.docker.com

get_distribution() {
    lsb_dist=""
    # Every system that we officially support has /etc/os-release
    if [ -r /etc/os-release ]; then
        lsb_dist="$(. /etc/os-release && echo "$ID")"
    fi
    # Returning an empty string here should be alright since the
    # case statements don't act unless you provide an actual value
    echo "$lsb_dist"
}


    # perform some very rudimentary platform detection
    lsb_dist=$( get_distribution )
    lsb_dist="$(echo "$lsb_dist" | tr '[:upper:]' '[:lower:]')"

    case "$lsb_dist" in

        ubuntu)
            if command_exists lsb_release; then
                dist_version="$(lsb_release --codename | cut -f2)"
            fi
            if [ -z "$dist_version" ] && [ -r /etc/lsb-release ]; then
                dist_version="$(. /etc/lsb-release && echo "$DISTRIB_CODENAME")"
            fi
        ;;

        debian|raspbian)
            dist_version="$(sed 's/\/.*//' /etc/debian_version | sed 's/\..*//')"
            case "$dist_version" in
                11)
                    dist_version="bullseye"
                ;;
                10)
                    dist_version="buster"
                ;;
                9)
                    dist_version="stretch"
                ;;
                8)
                    dist_version="jessie"
                ;;
            esac
        ;;

        centos|rhel|sles)
            if [ -z "$dist_version" ] && [ -r /etc/os-release ]; then
                dist_version="$(. /etc/os-release && echo "$VERSION_ID")"
            fi
        ;;

        *)
            if command_exists lsb_release; then
                dist_version="$(lsb_release --release | cut -f2)"
            fi
            if [ -z "$dist_version" ] && [ -r /etc/os-release ]; then
                dist_version="$(. /etc/os-release && echo "$VERSION_ID")"
            fi
        ;;

    esac

관련 정보