我正在开发一个简单的 bash 脚本,它应该能够在 Ubuntu 和 CentOS 发行版上运行(对 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
Run Code Online (Sandbox Code Playgroud)
这似乎有效,返回ubuntu或centos(我没有尝试过其他人)作为发布名称。但是,我有一种感觉,必须有一种更简单、更可靠的方法来解决这个问题——这是真的吗?
它不适用于 RedHat。/etc/redhat-release 包含:Redhat Linux 企业版 5.5 …
如何在没有访问任何图形界面的情况下确定 CentOS 服务器的版本?我尝试了几个命令:
# cat /proc/version
Linux version 2.6.18-128.el5 (mockbuild@hs20-bc1-7.build.redhat.com)
(gcc version 4.1.2 20080704 (Red Hat 4.1.2-44)) …
# cat /etc/issue
Red Hat Enterprise Linux Server release 5.3 (Tikanga)
Run Code Online (Sandbox Code Playgroud)
但哪一个是正确的:4.1.2-4 from/proc/version或 5.3 from /etc/issue?
当我cat /proc/version在终端中运行命令时,我得到以下输出:
Linux version 2.6.18-348.1.1.0.1.el5 (mockbuild@ca-build56.us.oracle.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-54)) #1 SMP Tue Jan 22 16:39:05 PST 2013
Run Code Online (Sandbox Code Playgroud)
如果我运行lsb_release -a命令,我可以看到以下信息:
LSB Version: :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64 :graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:prin ting-4.0-noarch
Distributor ID: EnterpriseEnterpriseServer
Description: Enterprise Linux Enterprise Linux Server release 5.9 (Carthage)
Release: 5.9
Codename: Carthage
Run Code Online (Sandbox Code Playgroud)
根据 的输出 cat /proc/version,我可以看到我使用的是 RedHat 4.1.2。虽然根据 的输出lsb_release -a,我正在使用Linux Server release 5.9. 哪一个是正确的?
如果是,它的年龄是多少?因为,我没有得到这个版本的 MySQL 5.6 安装程序。MySQL 5.6 仅适用Red Hat Enterprise Linux 5 / Oracle Linux 5 …
uname我的 RHEL 5.4 机器上的-a输出是:
Linux <machine name> 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
这是否意味着硬件是 64 位(可能是第一个 x86_64),而操作系统也是最后一个 x86_64 的 64 位?
另外,这么多 x86_64 实例是什么?
我可以在 32 位操作系统上安装 64 位 vm,反之亦然吗?
我想在我的 unix shell /usr/bin/ksh 中执行 stat 命令:
输入:
/bin/date +%Y%m%d%H%M%S -d "$(/usr/bin/stat -c %x find.txt)"
Run Code Online (Sandbox Code Playgroud)
和输出:
/usr/bin/ksh: stat: not found
Run Code Online (Sandbox Code Playgroud)
我的系统: SunOS 5.10 Generic_150400-23 sun4v sparc sun4v
我通常uname用来确定正在运行的操作系统,但我在多台机器上有帐户,我不知道正在运行的特定发行版。
当uname返回Linux 时,我尝试过uname -a,但只看到以下内容:
Linux host123 3.0.58-0.6.6-pae blah blah blah i686 i686 i386 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
我的猜测是这是一个 SUSE 发行版,但是有没有更好的方法来了解安装了哪个发行版,类似于unameAIX、Darwin 等的正常显示方式……?