Ubuntu 및 CentOS 배포판에서 실행할 수 있는 간단한 bash 스크립트를 개발 중입니다(Debian 및 Fedora/RHEL에 대한 지원은 장점입니다). 스크립트가 실행 중인 배포판의 이름과 버전을 알아야 합니다. (저장소 생성과 같은 특정 작업 트리거로 시작) 내가 지금까지 얻은 것은 다음과 같습니다.
OS=$(awk '/DISTRIB_ID=/' /etc/*-release | sed 's/DISTRIB_ID=//' | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')
VERSION=$(awk '/DISTRIB_RELEASE=/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | sed 's/[.]0/./')
if [ -z "$OS" ]; then
OS=$(awk '{print $1}' /etc/*-release | tr '[:upper:]' '[:lower:]')
fi
if [ -z "$VERSION" ]; then
VERSION=$(awk '{print $3}' /etc/*-release)
fi
echo $OS
echo $ARCH
echo $VERSION
이것~인 것 같다일, 복귀 ubuntu
또는 centos
(다른 것은 시도하지 않았습니다) 게시 이름으로 사용합니다. 하지만 이 문제를 알아내는 더 쉽고 신뢰할 수 있는 방법이 있어야 한다고 생각합니다. 그게 사실인가요?
Red Hat에서는 작동하지 않습니다. /etc/redhat-release에는 다음이 포함되어 있습니다: Redhat Linux Entreprise 버전 5.5
따라서 버전을 세 번째 단어로 사용하는 대신 다음을 사용하는 것이 좋습니다.
OS_MAJOR_VERSION=`sed -rn 's/.*([0-9])\.[0-9].*/\1/p' /etc/redhat-release`
OS_MINOR_VERSION=`sed -rn 's/.*[0-9].([0-9]).*/\1/p' /etc/redhat-release`
echo "RedHat/CentOS $OS_MAJOR_VERSION.$OS_MINOR_VERSION"
답변1
OS
합계를 구해 보면 VER
최신 기준은 인 것 같습니다 /etc/os-release
. 그 전에는 lsb_release
및 가 있었습니다 /etc/lsb-release
. 이전에는 배포마다 다른 파일을 찾아야 했습니다.
이건 내 제안이야
if [ -f /etc/os-release ]; then
# freedesktop.org and systemd
. /etc/os-release
OS=$NAME
VER=$VERSION_ID
elif type lsb_release >/dev/null 2>&1; then
# linuxbase.org
OS=$(lsb_release -si)
VER=$(lsb_release -sr)
elif [ -f /etc/lsb-release ]; then
# For some versions of Debian/Ubuntu without lsb_release command
. /etc/lsb-release
OS=$DISTRIB_ID
VER=$DISTRIB_RELEASE
elif [ -f /etc/debian_version ]; then
# Older Debian/Ubuntu/etc.
OS=Debian
VER=$(cat /etc/debian_version)
elif [ -f /etc/SuSe-release ]; then
# Older SuSE/etc.
...
elif [ -f /etc/redhat-release ]; then
# Older Red Hat, CentOS, etc.
...
else
# Fall back to uname, e.g. "Linux <version>", also works for BSD, etc.
OS=$(uname -s)
VER=$(uname -r)
fi
uname
아직은 얻는 것이 ARCH
가장 좋은 방법인 것 같아요 . 하지만 당신이 제시한 예는 분명히 인텔 시스템에만 적용됩니다. 나는 BITS
그것을 다음과 같이 부를 것입니다 :
case $(uname -m) in
x86_64)
BITS=64
;;
i*86)
BITS=32
;;
*)
BITS=?
;;
esac
ARCH
또는 보다 일반적이지만 모호하지 않은 버전으로 변경하거나 다음 x86
과 x64
유사합니다.
case $(uname -m) in
x86_64)
ARCH=x64 # or AMD64 or Intel64 or whatever
;;
i*86)
ARCH=x86 # or IA32 or Intel32 or whatever
;;
*)
# leave ARCH as-is
;;
esac
하지만 물론 그것은 당신에게 달려 있습니다.
답변2
나는 이것을 첫 번째 단계로 삼을 것입니다.
ls /etc/*release
/etc/gentoo-release
Gentoo, RedHat, Arch 및 SuSE에는 다음과 같은 파일이 있습니다 . 매우 인기가 많은 것 같습니다. 이 웹사이트를 확인해 보세요.파일 게시.
/etc/lsb-release
Debian 및 Ubuntu 에는 버전 정보도 포함하고 이전 명령과 함께 표시되는 파일이 있어야 합니다 .
또 다른 빠른 방법은 uname -rv
. 설치된 커널이 순정 배포 커널인 경우 일반적으로 해당 커널에서 이 이름을 찾을 수 있습니다.
답변3
lsb_release -a
. 데비안에서 작동하고 우분투인 것 같지만 나머지는 잘 모르겠습니다. 일반적으로 이는 LSB(Linux Standard Base)와 관련되어 있으므로 모든 GNU/Linux 배포판에 있어야 합니다.
답변4
python -m platform
샘플 출력:
우분투:
Linux-4.9.184-linuxkit-x86_64-with-Ubuntu-18.04-bionic
더반:
Linux-4.14.117-grsec-grsec+-x86_64-with-debian-buster-sid
센토스:
Linux-3.10.0-957.1.3.el7.x86_64-x86_64-with-centos-7.6.1810-Core
맥 OS X:
Darwin-17.7.0-x86_64-i386-64bit
바라보다플랫폼 모듈 문서해당 행에 특정 값이 필요한 경우. 예를 들어 Linux 배포 이름만 필요한 경우 다음을 사용합니다.
python -c "import platform;print(platform.linux_distribution()[0])"