lsb_release -a
có thể sẽ là lựa chọn tốt nhất của bạn để tìm ra thông tin này và có thể làm điều đó một cách nhất quán.
Lịch sử của LSB
Lệnh lsb
trong đó là viết tắt của Dự án Cơ sở Tiêu chuẩn Linux , một dự án ô được tài trợ bởi Quỹ Linux để cung cấp các phương pháp chung để thực hiện các loại điều cơ bản trên các bản phân phối Linux khác nhau.
Dự án là tự nguyện và các nhà cung cấp có thể tham gia vào dự án với tư cách là người dùng và cũng là người hỗ trợ các thông số kỹ thuật khác nhau xung quanh các mô-đun khác nhau giúp thúc đẩy tiêu chuẩn hóa trong các bản phân phối Linux khác nhau.
trích từ điều lệ
Nhóm làm việc LSB, như là mục tiêu cốt lõi của nó, để giải quyết hai mối quan tâm này. Chúng tôi xuất bản một tiêu chuẩn mô tả bộ API tối thiểu mà một bản phân phối phải hỗ trợ, tham khảo ý kiến với các nhà cung cấp phân phối chính. Chúng tôi cũng cung cấp các thử nghiệm và công cụ đo lường sự hỗ trợ cho tiêu chuẩn và cho phép các nhà phát triển ứng dụng nhắm mục tiêu vào bộ chung. Cuối cùng, thông qua công việc thử nghiệm của chúng tôi, chúng tôi tìm cách ngăn chặn sự phân kỳ không cần thiết giữa các bản phân phối.
Các liên kết hữu ích liên quan đến LSB
Phê bình
Có một số vấn đề với LSB khiến nó trở thành vấn đề đối với các bản phát hành như Debian. Việc sử dụng bắt buộc của RPM là một. Xem bài viết Wikipedia để biết thêm về vấn đề này .
Tiểu thuyết
Nếu bạn tìm kiếm, bạn có thể sẽ bắt gặp một trang tìm kiếm khá cũ có tiêu đề: Phát hiện phần mềm phân phối Linux từ Novell. Đây là một trong số ít những nơi tôi đã thấy một danh sách thực tế hiển thị một số phân phối chính và cách bạn có thể phát hiện những gì bên dưới bạn đang sử dụng.
đoạn trích
Novell SUSE /etc/SUSE-release
Red Hat /etc/redhat-release, /etc/redhat_version
Fedora /etc/fedora-release
Slackware /etc/slackware-release, /etc/slackware-version
Debian /etc/debian_release, /etc/debian_version,
Mandrake /etc/mandrake-release
Yellow dog /etc/yellowdog-release
Sun JDS /etc/sun-release
Solaris/Sparc /etc/release
Gentoo /etc/gentoo-release
UnitedLinux /etc/UnitedLinux-release
ubuntu /etc/lsb-release
Trang này cũng bao gồm một tập lệnh tiện dụng cố gắng mã hóa cho phần trên bằng cách sử dụng uname
các lệnh vanilla và sự hiện diện của một trong các tệp trên.
LƯU Ý: Danh sách này là ngày nhưng bạn có thể dễ dàng loại bỏ các bản phát hành ngày như Mandrake khỏi danh sách và thay thế chúng bằng các lựa chọn thay thế. Loại tập lệnh này có thể là một cách tiếp cận nếu bạn đang cố gắng hỗ trợ một lượng lớn các biến thể Solaris & Linux.
Linux Mafia
Tìm kiếm nhiều hơn sẽ bật lên trang sau được duy trì trên Linuxmafia.com, có tiêu đề: / etc / phát hành tương đương cho các bản phân phối Linux (và Unix khác) . Đây có lẽ là danh sách đầy đủ nhất cho đến nay mà tôi đã thấy. Bạn có thể mã hóa danh sách này bằng câu lệnh case / switch và đưa nó vào danh sách phân phối phần mềm của bạn.
Trong thực tế, có một kịch bản ở dưới cùng của trang đó thực hiện chính xác điều đó. Vì vậy, bạn có thể chỉ cần tải xuống và sử dụng tập lệnh với tư cách là bên thứ 3 để phân phối phần mềm của bạn.
kịch bản
#!/bin/sh
# Detects which OS and if it is Linux then it will detect which Linux
# Distribution.
OS=`uname -s`
REV=`uname -r`
MACH=`uname -m`
GetVersionFromFile()
{
VERSION=`cat $1 | tr "\n" ' ' | sed s/.*VERSION.*=\ // `
}
if [ "${OS}" = "SunOS" ] ; then
OS=Solaris
ARCH=`uname -p`
OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
elif [ "${OS}" = "AIX" ] ; then
OSSTR="${OS} `oslevel` (`oslevel -r`)"
elif [ "${OS}" = "Linux" ] ; then
KERNEL=`uname -r`
if [ -f /etc/redhat-release ] ; then
DIST='RedHat'
PSUEDONAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
elif [ -f /etc/SuSE-release ] ; then
DIST=`cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//`
REV=`cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //`
elif [ -f /etc/mandrake-release ] ; then
DIST='Mandrake'
PSUEDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
elif [ -f /etc/debian_version ] ; then
DIST="Debian `cat /etc/debian_version`"
REV=""
fi
if [ -f /etc/UnitedLinux-release ] ; then
DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
fi
OSSTR="${OS} ${DIST} ${REV}(${PSUEDONAME} ${KERNEL} ${MACH})"
fi
echo ${OSSTR}
LƯU Ý: Kịch bản này sẽ trông quen thuộc, đây là phiên bản cập nhật của Novell!
Kịch bản chân
Một phương pháp khác tôi từng thấy được sử dụng là cuộn tập lệnh của riêng bạn, tương tự như phương pháp Novell ở trên nhưng sử dụng LSB thay thế. Bài viết này có tiêu đề: Phương pháp chung để xác định tên phân phối Linux (hoặc UNIX) , hiển thị một phương thức như vậy.
# Determine OS platform
UNAME=$(uname | tr "[:upper:]" "[:lower:]")
# If Linux, try to determine specific distribution
if [ "$UNAME" == "linux" ]; then
# If available, use LSB to identify distribution
if [ -f /etc/lsb-release -o -d /etc/lsb-release.d ]; then
export DISTRO=$(lsb_release -i | cut -d: -f2 | sed s/'^\t'//)
# Otherwise, use release info file
else
export DISTRO=$(ls -d /etc/[A-Za-z]*[_-][rv]e[lr]* | grep -v "lsb" | cut -d'/' -f3 | cut -d'-' -f1 | cut -d'_' -f1)
fi
fi
# For everything else (or if above failed), just use generic identifier
[ "$DISTRO" == "" ] && export DISTRO=$UNAME
unset UNAME
Đoạn mã này có thể được đưa vào một hệ thống /etc/bashrc
hoặc một số tệp như vậy sau đó sẽ đặt biến môi trường $DISTRO
.
gcc
Tin hay không một phương pháp khác là sử dụng gcc
. Nếu bạn truy vấn lệnh, gcc --version
bạn sẽ nhận được bản phân phối mà gcc được xây dựng, nó hoàn toàn giống với hệ thống mà nó đang chạy.
Fedora 14
$ gcc --version
gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
Copyright (C) 2010 Free Software Foundation, Inc.
CentOS 5.x
$ gcc --version
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54)
Copyright (C) 2006 Free Software Foundation, Inc.
CentOS 6.x
$ gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
Copyright (C) 2010 Free Software Foundation, Inc.
Ubuntu 12.04
$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
TL; DR;
Vậy tôi nên dùng cái nào? Tôi có xu hướng đi cùng với lsb_release -a
bất kỳ bản phân phối Linux nào mà tôi thường thấy (RedHat, Debian, Ubuntu, v.v.). Đối với các tình huống mà bạn hỗ trợ các hệ thống không cung cấp, lsb_release
tôi sẽ tự mình thực hiện như một phần của phân phối phần mềm mà tôi đang cung cấp, tương tự như một trong các tập lệnh trên.
CẬP NHẬT # 1: Theo dõi với SuSE
Khi nói chuyện với @Nils trong các bình luận bên dưới, người ta xác định rằng vì bất kỳ lý do gì, SLES11 dường như bỏ LSB khỏi cài đặt theo mặc định. Nó chỉ là một cài đặt tùy chọn, dường như truy cập một gói cung cấp loại tính năng chính này.
Vì vậy, tôi đã nhân cơ hội liên hệ với ai đó từ dự án OpenSuSE để hiểu lý do tại sao.
trích đoạn email
Hi Rob,
I hope you don't mind me contacting you directly but I found your info here:
https://en.opensuse.org/User:Rjschwei. I participate on one of the StackExchange
sites, Unix & Linux and a question recently came up regarding the best option
for determining the underlying OS.
http://unix.stackexchange.com/questions/92199/how-can-i-reliably-get-the-operating-systems-name/92218?noredirect=1#comment140840_92218
In my answer I suggested using lsb_release, but one of the other users mentioned
that this command wasn't installed as part of SLES11 which kind of surprised me.
Anyway we were looking for some way to confirm whether this was intentionally
dropped from SLES or it was accidental.
Would you know how we could go about confirming this one way or another?
Thanks for reading this, appreciate any help and/or guidance on this.
-Sam Mingolelli
http://unix.stackexchange.com/users/7453/slm
Đây là câu trả lời của Rob
Hi,
On 10/01/2013 09:31 AM, Sam Mingo wrote:
- show quoted text -
lsb_release was not dropped in SLES 11. SLES 11 is LSB certified. However, it
is not installed by default, which is consistent with pretty much every other
distribution. The lsb_release command is part of the lsb-release package.
At present almost every distribution has an entry in /etc such as
/etc/SuSE-release for SLES and openSUSE. Since this is difficult for ISVs and
others there is a standardization effort going on driven by the convergence to
systemd. The standard location for distribution information in the future will
be /etc/os-release, although Ubuntu will probably do something different.
HTH,
Robert
-- Robert Schweikert MAY THE SOURCE BE WITH YOU
SUSE-IBM Software Integration Center LINUX
Tech Lead
Public Cloud Architect
uname -s
phải đủ bên ngoài Linux (có thể mong đợi cho các BSD).