Я работаю над простым 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
Это , кажется , работать, возвращаясь ubuntu
или centos
(я не пробовал другие) в качестве имени выпуска. Однако у меня есть ощущение, что должен быть более простой и надежный способ выяснить это - правда ли это?
Это не работает для RedHat. / 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"
+-release
работает? По сути, вы ищете, если это/etc/lsb-release
так, так что, возможно, просто назовите это так.*
на,+
чтобы избежать формирования комментариев, должно бытьetc/*-release
, это похоже на работу.uname -rv | grep -i "name_of_distro"
и не использует код выхода?Ответы:
Для того, чтобы получить
OS
иVER
, последний стандарт , кажется/etc/os-release
. До этого былоlsb_release
и/etc/lsb-release
. До этого вам приходилось искать разные файлы для каждого дистрибутива.Вот что я бы посоветовал
Я думаю,
uname
что получитьARCH
все еще лучший способ. Но приведенный вами пример, очевидно, касается только систем Intel. Я бы назвал этоBITS
так:Или изменить ,
ARCH
чтобы быть более распространенными, но однозначные варианты:x86
иx64
или аналогичные:но, конечно, это зависит от вас.
источник
-
и_
? Может быть, это/lib/lsb
или где-то так. Чтоrpm -qa "lsb*"
печатает?rpm -qa "lsb*
ничего не печатает. В соответствии сyum provides */lsb_release
этим он содержится в пакете с именем redhat-lsb, который, по-моему, не установлен по умолчанию. Тем не менее, я не эксперт по Fedora, это просто результаты случайной виртуальной машины Fedora, которая у меня есть, и я могу ошибаться.lsb-release
, как ты сказал.$OS
и$VERSION
т. Д. - по договоренности мы используем заглавные переменные среды (PAGER, EDITOR, SHELL, ...) и переменные внутренней оболочки (BASH_VERSION, RANDOM, ...). Все остальные имена переменных должны содержать хотя бы одну строчную букву. Это соглашение позволяет избежать случайного переопределения внешних и внутренних переменных.Я бы пошел с этим в качестве первого шага:
Gentoo, RedHat, Arch & SuSE имеют файл с именем eg
/etc/gentoo-release
. Кажется популярным, проверьте этот сайт на предмет релиз-файлов .У Debian & Ubuntu должен быть
/etc/lsb-release
файл с информацией о выпуске, который будет отображаться с предыдущей командой.Еще один быстрый
uname -rv
. Если установленное ядро является стандартным дистрибутивным ядром, выобычно можетенайти его там.источник
uname -a
.uname -rv
содержит информацию, хотя?uname -a
будет печатать такие вещи, как тип процессора и имя хоста, которые здесь не имеют значения. (Но необходимы и kernel release (-r
), и version (-v
), не все дистрибутивы делают это там одинаково)2.6.32-5-686-bigmem
и uname -v дает#1 SMP Tue Mar 8 22:14:55 UTC 2011
на Debian 6. uname -a OTOH даетLinux debian 2.6.32-5-686-bigmem #1 SMP Tue Mar 8 22:14:55 UTC 2011 i686 GNU/Linux
.uname -a
--n
это имя узла == имя хоста. так что я бы сказал,uname
что не будет интересно на Debian. Если подумать, я не уверен, что это так полезно на RedHat.debian
.lsb_release -a
, Работает на Debian, и я думаю, Ubuntu, но я не уверен в остальном. Обычно он должен существовать во всех дистрибутивах GNU / Linux, поскольку он связан с LSB (Linux Standard Base).источник
Один вкладыш, запасные варианты, одна строка вывода, ошибок нет.
источник
или просто
источник
Воспользуйтесь советами разработчиков JavaScript. Не проверяйте версию, проверяйте ее возможности. Это не красиво, но это работает. Расширяйте по мере необходимости.
источник
В порядке наиболее вероятного успеха, они:
охватывает большинство случаев (AFAIK): Debian, Ubuntu, Slackware, Suse, Redhat, Gentoo, * BSD и, возможно, другие.
источник
cat /etc/*version
не работает (такого файла нет) на CentOS (хотя бы на 6.4)Для большинства современных систем ОС Linux этот файл
/etc/os-release
действительно становится стандартным и включается в большинство ОС. Таким образом, в вашем скрипте Bash вы можете просто включить файл, и у вас будет доступ ко всем переменным, описанным здесь (например: NAME, VERSION, ...)Так что я просто использую это в моем скрипте Bash:
источник
Если файл
/etc/debian_version
существует, дистрибутив - Debian или производная Debian. Этот файл может иметь номер выпуска; на моей машине это в данный момент6.0.1
. Если он тестовый или нестабильный, он может сказать «тестирование / нестабильный», или он может иметь номер следующего выпуска. У меня сложилось впечатление, что, по крайней мере, в Ubuntu этот файл всегда тестируется / нестабилен, и что в него не входит номер выпуска, но кто-то может исправить меня, если я ошибаюсь.У Fedora (по крайней мере, последние выпуски) есть похожий файл, а именно
/etc/fedora-release
.источник
/etc/debian_version
и другое/etc/os-release
./etc/debian_version
файл. Поэтому то, как мы готовим установку Debian, может повлиять на доступные файлы релизов, это интересно.os-release
не включает полный номер версии отdebian_version
. См. Unix.stackexchange.com/questions/382531 .Если вы не можете или не хотите использовать файл релиза LSB (из-за зависимостей, входящих в пакет), вы можете искать специфичные для дистрибутива файлы релиза. У Bcfg2 есть зонд для дистрибутива, который вы можете использовать: http://trac.mcs.anl.gov/projects/bcfg2/browser/doc/server/plugins/probes/group.txt
источник
2 способа из многих:
1) использовать
Я тестировал его на CentOS 5.5 и Ubuntu 10.04
выход для CentOS:
и для Ubuntu это:
2) введите следующую команду:
Я протестировал его на CentOS 5.5 и Ubuntu 10.04, и он отлично работает.
источник
Этот скрипт работает на Debian, (возможно, потребуется немного изменить Ubuntu)
источник
Вот моя простая версия chech_distro. ^^;
источник
Без версии, только только dist:
источник
Это было проверено на Ubuntu 14 и CentOS 7
источник
sed -n -e '/PRETTY_NAME/ s/^.*=\|"\| .*//gp' /etc/os-release
Я считаю , хороший сценарий отсюда , который работает для большинства распространенного dists Linux:
источник
Я использую утилиту сценария screenfetch :
источник
Существует так называемый гем ruby, который дает вам некоторые факты об ОС OS, он анализирует файлы релизов ОС, другие данные и распечатывает их на экране терминала. Вы можете попробовать это следующим образом, начиная с установки rubygems:
Пожалуйста, используйте приведенный выше случай, который подходит для вашей ОС. Затем установите сам драгоценный камень.
Тогда используйте:
ПРИМЕЧАНИЕ: см. Источники драгоценных камней facter, чтобы получить больше информации при установке.
источник
Если кому-то также нужен дистрибутив:
Выход:
Измените на: lsb_release -sc, чтобы получить дистрибутив:
Выход:
источник
Эта команда работает для дистрибутивов на основе Debian и Redhat: Используя
tr
фильтр, вы конвертируете документ в формат по одному слову на строку, а затем подсчитываете первую строку, содержащую имя дистрибутива.источник
/etc/issue
не содержит версию или имя на zenwalk. Это модифицируемый администратором файл, содержащий сообщение, представленное людям, без гарантий , что он может содержать что-либо, что можно извлечь программным путем.