我正在开发一个简单的 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 …
示例:在 Ubuntu 中,.local主目录中始终有一个目录,并.profile包含以下行:
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)
$HOME/.local/bin默认情况下不存在,但如果创建它,它已经存在$PATH并且可以找到其中的可执行文件。
这在XDG 目录规范中没有完全提到,但似乎是从它派生出来的。
我想知道这是否足够普遍,以至于通常可以假设它存在于最常见的最终用户发行版中。例如,是在所有 Debian 衍生产品中,还是至少在 Ubuntu 衍生产品中?Red Hat/Fedora/CentOS 生态系统如何?等等 Arch、Suse 以及人们现在使用的东西。
更明确地说,这仅适用于$HOME/.local/bin,而不 适用于$HOME/bin。
出于好奇,如果您有相关信息,请随意包括 BSD、OS/X 和其他。:)
Linux Mint 基于 Ubuntu。Ubuntu 基于 Debian。像这样,还有其他几个基于 Ubuntu、Debian、Slackware 等的 linux 发行版。让我困惑的是这意味着什么,即一个基于其他发行版的 Linux 发行版。它们是如何制作的?
为什么大多数 Linux 发行版默认安装 Perl?
linux perl distribution-choice system-installation distributions
究竟什么是“稳定”的 Linux 发行版,使用“不稳定”发行版的(实际)后果是什么?
对于临时用户(即不是系统管理员)真的很重要吗?
我见过诸如“Debian Stable”和“Debian Unstable”之类的词和短语,以及“Debian 比 Ubuntu 更稳定”之类的词。
/bin/sh,Bourne shell创建于 1977 年,曾经是 Unix 系统的默认 shell。
现在这个文件仍然存在,但主要是作为系统上安装的默认 POSIX 兼容 shell 的符号链接:
/bin/bashBourne Again shell/bin/dashDebian Almquist shell/bin/dash(6.0 及更高版本;较旧的 Debian 版本有它指向/bin/bash) 这让我很好奇:有没有一个Unix系统或Linux发行版,仍然提供了一个二进制的/bin/sh?
我知道macOS 是一个 UNIX 操作系统,但我不知道 macOS 是否可以像 Gentoo 或 Debian 是GNU/Linux 发行版一样被称为UNIX发行版。
macOS 是 UNIX 发行版吗?如果不是,那么如何正确地指称 macOS 在 UNIX 操作系统家族中的成员资格以及对单一 UNIX 规范的遵守(即,它是Unix 变体、Unix 版本、Unix 风格等)?此外,这个问题适用于 Solaris、HP-UX 和其他 unices(它们都是 UNIX 发行版吗?)。
此外,“分发”一词是否仅限于 GNU(/Linux、/Hurd、/kFreeBSD、/etc)操作系统,还是可以用于其他情况?
编辑:我已经意识到UNIX 的官方网站使用“UNIX 实现”和“UNIX 操作系统”来指代 Unix 操作系统系列,即实现单一 Unix 标准的那些。
我试图找到一种方法来确定适用于大多数(或理想情况下,所有)现代发行版的 Linux 发行版名称和版本。我注意到其中/etc/os-release包含我尝试过的发行版(CentOS、Debian)所需的信息,但是依赖它的存在有多安全?诸如此类的命令uname -a实际上并不包含相同的信息,并且lsb_release在例如最小的 CentOS 上显然不存在。
有没有一种快速的方法可以准确地找出发行版附带的内容/etc/os-release?此外,是否/etc/os-release保证包含NAME,VERSION和PRETTY_NAME字段?
我在 Debian Wheezy(稳定版)上,并通过基本的定期更新我的系统:
sudo apt-get update
sudo apt-get dist-upgrade
Run Code Online (Sandbox Code Playgroud)
以后等 Jessie 稳定版本后,我想知道如果我继续这样做dist-upgrade,Wheezy 是否会自动变成 Jessie 。
是否需要任何手动步骤,以确保始终使用当前的稳定版本(未来数年,例如在 Jessie 之后的 Sid),还是我准备继续?
例如,我是否必须以某种方式修改我的 sources.list 文件,以确保 Jessie 会在没有任何手动步骤的情况下简单地闲逛,或者是否会有一些“大”更新(“dist-upgrade”)为我做这一切和更改的所有实例wheezy来jessie时,它知道这样做呢?
(我的 sources.list 中的每一行都有wheezy。也许我只需wheezy要从它们中删除?)
我是一个新手(来自 OS X,在那个 Windows 之前),所以我不确定如何在 Debian 上自动完成同一频道上的“发布升级”——在那里,OS X 只是通过其自动更新提供,完全升级到下一个(稳定/就绪)版本,除了正常的系统更新检查之外,不需要手动检查或复杂的步骤。